remove unused code
[apps/core/preloaded/quickpanel.git] / daemon / settings / setting_utils.c
1 /*
2  * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <Elementary.h>
19 #include <glib.h>
20
21 #include <notification.h>
22 #include <tzsh.h>
23 #include <tzsh_quickpanel_service.h>
24 #include <E_DBus.h>
25
26 #include "settings.h"
27 #include "common.h"
28 #include "quickpanel_def.h"
29 #include "quickpanel-ui.h"
30 #include "setting_utils.h"
31 #ifdef QP_SCREENREADER_ENABLE
32 #include "accessibility.h"
33 #endif
34
35 #define DEFAULT_EDJ             EDJDIR"/"PACKAGE".edj"
36 #define _EDJ(o) elm_layout_edje_get(o)
37
38 #define TEXT_LEN 128
39 #define QP_SETTING_INITIAL_PAGE_NUM 0
40 #define DIVIDER_MAGIC 0xCAFECAFE
41 #define E_DATA_DIVIDER_MAGIC "divider_magic"
42
43 static inline void __escaped_text_set(Evas_Object *obj, const char *part, const char *text)
44 {
45         char buf[256] = {0,};
46         char *ecaped = NULL;
47
48         if (!obj) {
49                 return;
50         }
51
52         if (!part) {
53                 return;
54         }
55
56         strncpy(buf, text, sizeof(buf) - 1);
57         quickpanel_common_util_char_trim(buf);
58         ecaped = evas_textblock_text_utf8_to_markup(NULL, buf);
59
60         elm_object_part_text_set(obj, part, ecaped);
61
62         if (ecaped) {
63                 free(ecaped);
64         }
65 }
66
67 HAPI int quickpanel_setting_icon_text_set(Evas_Object *icon, const char *text, int state)
68 {
69         retif(icon == NULL, QP_FAIL, "invalid parameter");
70         retif(text == NULL, QP_FAIL, "invalid parameter");
71
72         __escaped_text_set(icon, "icon.text", text);
73
74 #ifdef QP_SCREENREADER_ENABLE
75         char buf[256] = {0,};
76         Evas_Object *ao = NULL;
77
78         ao = quickpanel_accessibility_screen_reader_object_get(icon,
79                         SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
80         if (ao != NULL) {
81                 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
82                 strncpy(buf, text, sizeof(buf) - 1);
83                 quickpanel_common_util_char_replace(buf, '\n', ' ');
84                 elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
85         }
86
87         ao = quickpanel_accessibility_screen_reader_object_get(icon,
88                         SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
89         if (ao != NULL) {
90                 if (state == ICON_VIEW_STATE_ON) {
91                         elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
92                 } else if (state == ICON_VIEW_STATE_DIM) {
93                         elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
94                 } else if (state == ICON_VIEW_STATE_OFF) {
95                         elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
96                 }
97         }
98 #endif
99
100         return QP_OK;
101 }
102
103 HAPI void quickpanel_setting_icon_access_text_set(Evas_Object *icon, const char *text)
104 {
105 #ifdef QP_SCREENREADER_ENABLE
106         char buf[256] = {0,};
107         Evas_Object *ao = NULL;
108 #endif
109
110         retif(icon == NULL, , "invalid parameter");
111         retif(text == NULL, , "invalid parameter");
112
113 #ifdef QP_SCREENREADER_ENABLE
114         ao = quickpanel_accessibility_screen_reader_object_get(icon,
115                         SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
116         if (ao != NULL) {
117                 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
118                 strncpy(buf, text, sizeof(buf) - 1);
119                 quickpanel_common_util_char_replace(buf, '\n', ' ');
120                 elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
121         }
122 #endif
123 }
124
125 HAPI Evas_Object *quickpanel_setting_icon_content_get(Evas_Object *icon)
126 {
127         retif(icon == NULL, NULL, "invalid parameter");
128
129         struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
130         retif(ad == NULL, NULL, "application data is NULL");
131
132         return elm_object_part_content_get(icon, "icon.swallow.wvga");
133 }
134
135 HAPI int quickpanel_setting_icon_content_set(Evas_Object *icon, Evas_Object *content)
136 {
137         retif(icon == NULL, QP_FAIL, "invalid parameter");
138         retif(content == NULL, QP_FAIL, "invalid parameter");
139
140         struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
141         retif(ad == NULL, QP_FAIL, "application data is NULL");
142
143         elm_object_part_content_set(icon, "icon.swallow.wvga", content);
144
145         return QP_OK;
146 }
147
148 HAPI int quickpanel_setting_icon_state_set(Evas_Object *icon, int state)
149 {
150 #ifdef QP_SCREENREADER_ENABLE
151         Evas_Object *ao = NULL;
152 #endif
153         retif(icon == NULL, -1, "invalid parameter");
154         SERR("icon:%p state:%d", icon, state);
155
156 #ifdef QP_SCREENREADER_ENABLE
157         ao = quickpanel_accessibility_screen_reader_object_get(icon,
158                         SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
159         if (ao != NULL) {
160                 if (state == ICON_VIEW_STATE_ON) {
161                         elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
162                 } else if (state == ICON_VIEW_STATE_DIM) {
163                         elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
164                 } else if (state == ICON_VIEW_STATE_OFF) {
165                         elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
166                 }
167         }
168 #endif
169
170         if (state == ICON_VIEW_STATE_ON) {
171                 elm_object_signal_emit(icon, "icon.on", "quickpanl.prog");
172         } else if (state == ICON_VIEW_STATE_DIM) {
173                 elm_object_signal_emit(icon, "icon.dim", "quickpanl.prog");
174         } else {
175                 elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
176         }
177
178         edje_object_message_signal_process(_EDJ(icon));
179
180         return 0;
181 }
182
183 HAPI int quickpanel_setting_icon_state_progress_set(Evas_Object *icon)
184 {
185         retif(icon == NULL, -1, "invalid parameter");
186
187         elm_object_signal_emit(icon, "icon.progress", "quickpanl.prog");
188         edje_object_message_signal_process(_EDJ(icon));
189
190         return 0;
191 }
192
193 HAPI Evas_Object *quickpanel_setting_icon_new(Evas_Object *parent)
194 {
195         const char *signal = NULL;
196         Evas_Object *icon = NULL;
197         retif(parent == NULL, NULL, "invalid parameter");
198
199         struct appdata *ad = quickpanel_get_app_data();
200         retif(ad == NULL, EINA_FALSE, "invalid data.");
201
202         icon = elm_layout_add(parent);
203         retif(!icon, NULL, "fail to add layout");
204
205         elm_layout_file_set(icon, DEFAULT_EDJ, "quickpanel/setting_icon_wvga");
206
207         evas_object_size_hint_weight_set(icon,
208                         EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209         elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
210
211         Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(icon);
212         elm_object_part_content_set(icon, "focus", focus);
213
214         if (ad->angle == 0 || ad->angle == 180) {
215                 signal = "icon.portrait";
216         } else {
217                 signal = "icon.landscape";
218         }
219
220         elm_object_signal_emit(icon, signal, "quickpanl.prog");
221         edje_object_message_signal_process(_EDJ(icon));
222
223         return icon;
224 }
225
226 HAPI Evas_Object *quickpanel_setting_icon_image_new(Evas_Object *parent, const char *img_path)
227 {
228         Evas_Object *content = NULL;
229         retif(parent == NULL, NULL, "invalid parameter");
230         retif(img_path == NULL, NULL, "invalid parameter");
231
232         content = elm_image_add(parent);
233         retif(content == NULL, NULL, "failed to create image");
234
235         if (!elm_image_file_set(content, DEFAULT_EDJ, img_path)) {
236                 ERR("fail to set file[%s]", img_path);
237                 evas_object_del(content);
238                 content = NULL;
239                 return NULL;
240         }
241
242         return content;
243 }
244
245 static Evas_Object *quickpanel_setting_container_get(Evas_Object *base)
246 {
247         Evas_Object *container = NULL;
248         retif(base == NULL, NULL, "invalid parameter");
249
250         container = elm_object_part_content_get(base, QP_SETTING_BASE_PART);
251
252         return container;
253 }
254
255 HAPI Evas_Object *quickpanel_setting_scroller_get(Evas_Object *base)
256 {
257         Evas_Object *container = NULL;
258         Evas_Object *scroller = NULL;
259         retif(base == NULL, NULL, "invalid parameter");
260
261         struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
262         retif(ad == NULL, NULL, "application data is NULL");
263
264         container = quickpanel_setting_container_get(base);
265
266         scroller = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
267
268         retif(scroller == NULL, NULL, "invalid parameter");
269
270         return scroller;
271 }
272
273 HAPI Evas_Object *quickpanel_setting_box_get_from_scroller(Evas_Object *base)
274 {
275         Evas_Object *scroller = NULL;
276         Evas_Object *box = NULL;
277         retif(base == NULL, NULL, "invalid parameter");
278
279         scroller = quickpanel_setting_scroller_get(base);
280         retif(scroller == NULL, NULL, "invalid parameter");
281
282         box = elm_object_content_get(scroller);
283
284         return box;
285 }
286
287 HAPI Evas_Object *quickpanel_setting_box_get(Evas_Object *base)
288 {
289         Evas_Object *container = NULL;
290         Evas_Object *box = NULL;
291         retif(base == NULL, NULL, "invalid parameter");
292
293         container = quickpanel_setting_container_get(base);
294         retif(container == NULL, NULL, "invalid parameter");
295         box = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
296
297         return box;
298 }
299
300 HAPI int quickpanel_setting_container_rotation_set(Evas_Object *base, int angle)
301 {
302         Evas_Object *container = NULL;
303         const char *signal = NULL;
304
305         retif(!base, -1, "base is NULL");
306         retif(angle < 0, -1, "angle is %d", angle);
307
308         container = quickpanel_setting_container_get(base);
309         retif(!container, -1, "box is NULL");
310
311         if (angle % 180 == 0) {
312                 signal = "portrait";
313         } else {
314                 signal = "landscape";
315         }
316
317         elm_object_signal_emit(container, signal, "background");
318         edje_object_message_signal_process(_EDJ(container));
319
320         return 0;
321 }
322
323 HAPI int quickpanel_setting_icons_rotation_set(Evas_Object *base, int angle)
324 {
325         Evas_Object *box = NULL;
326         Evas_Object *icon = NULL;
327         Eina_List *icons = NULL;
328         Eina_List *l = NULL;
329         const char *signal = NULL;
330
331         retif(!base, -1, "base is NULL");
332         retif(angle < 0, -1, "angle is %d", angle);
333
334         box = quickpanel_setting_box_get(base);
335         retif(!box, -1, "box is NULL");
336
337         icons = elm_box_children_get(box);
338         retif(!icons, -1, "icons list is NULL");
339
340         if (angle % 180 == 0) {
341                 signal = "icon.portrait";
342         } else {
343                 signal = "icon.landscape";
344         }
345
346         EINA_LIST_FOREACH(icons, l, icon) {
347                 elm_object_signal_emit(icon, signal, "quickpanl.prog");
348                 edje_object_message_signal_process(_EDJ(icon));
349         }
350
351         eina_list_free(icons);
352
353         return 0;
354 }
355
356 HAPI void quickpanel_setting_icons_emit_sig(Evas_Object *icon, const char *signal)
357 {
358         retif(!icon, , "icon is NULL");
359         retif(!signal, , "icon is NULL");
360
361         elm_object_signal_emit(icon, signal, "quickpanl.prog");
362         edje_object_message_signal_process(_EDJ(icon));
363 }
364
365 HAPI int quickpanel_setting_icons_dragging_set(Evas_Object *icon, int is_on)
366 {
367         const char *signal = NULL;
368         retif(!icon, QP_FAIL, "icon is NULL");
369
370         if (is_on == 1) {
371                 signal = "dragging.on";
372         } else {
373                 signal = "dragging.off";
374         }
375
376         elm_object_signal_emit(icon, signal, "quickpanl.prog");
377         edje_object_message_signal_process(_EDJ(icon));
378
379         return QP_OK;
380 }
381
382 HAPI int quickpanel_setting_icons_screen_mode_set(Evas_Object *icon, int screen_mode)
383 {
384         const char *signal = NULL;
385         retif(!icon, QP_FAIL, "icon is NULL");
386
387         if (screen_mode == 0) {
388                 signal = "icon.portrait";
389         } else {
390                 signal = "icon.landscape";
391         }
392
393         elm_object_signal_emit(icon, signal, "quickpanl.prog");
394         edje_object_message_signal_process(_EDJ(icon));
395
396         return QP_OK;
397 }
398
399 HAPI int quickpanel_setting_icon_pack(Evas_Object *box, Evas_Object *icon, int is_attach_divider)
400 {
401         retif(box == NULL, QP_FAIL, "box is NULL");
402
403         elm_box_pack_end(box, icon);
404
405         return QP_OK;
406 }
407
408 HAPI void quickpanel_setting_icon_unpack_all(Evas_Object *box)
409 {
410         Eina_List *l;
411         Eina_List *l_next;
412         Evas_Object *node = NULL;
413         Eina_List *list = NULL;
414         retif(box == NULL, , "invalid parameter");
415
416         list = elm_box_children_get(box);
417         retif(list == NULL, , "empty list");
418
419         elm_box_unpack_all(box);
420
421         EINA_LIST_FOREACH_SAFE(list, l, l_next, node) {
422                 if (node != NULL) {
423                         if (evas_object_data_get(node, E_DATA_DIVIDER_MAGIC) == (void *)DIVIDER_MAGIC) {
424                                 evas_object_del(node);
425                                 node = NULL;
426                         }
427                 }
428         }
429
430         eina_list_free(list);
431 }
432
433 HAPI int quickpanel_setting_scroll_page_get(void *data)
434 {
435         int page_h = 0x99;
436         struct appdata *ad = NULL;
437         retif(data == NULL, QP_FAIL, "Invalid parameter!");
438
439         ad = data;
440         retif(!ad->ly, QP_FAIL, "layout is NULL!");
441
442         Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
443         elm_scroller_current_page_get(scroller, &page_h, NULL);
444
445         return page_h;
446 }
447
448 HAPI int quickpanel_setting_set_scroll_page_width(void *data)
449 {
450         struct appdata *ad = NULL;
451         retif(data == NULL, QP_FAIL, "Invalid parameter!");
452
453         ad = data;
454         retif(!ad->ly, QP_FAIL, "layout is NULL!");
455
456         Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
457
458         int w, h;
459         elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
460         elm_scroller_page_size_set(scroller, w / QP_SETTING_NUM_PORTRAIT_ICONS, 0);
461
462         return 0;
463 }
464
465 HAPI int quickpanel_setting_start(Evas_Object *base)
466 {
467         Evas_Object *scroller = NULL;
468         retif(base == NULL, QP_FAIL, "Invalid parameter!");
469
470         scroller = quickpanel_setting_scroller_get(base);
471         retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
472
473         elm_scroller_page_bring_in(scroller, 0, 0);
474
475         return QP_OK;
476 }
477
478 HAPI int quickpanel_setting_stop(Evas_Object *base, int is_bring_in)
479 {
480         int page = QP_SETTING_INITIAL_PAGE_NUM;
481         Evas_Object *scroller = NULL;
482         retif(base == NULL, QP_FAIL, "Invalid parameter!");
483
484         scroller = quickpanel_setting_scroller_get(base);
485         retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
486
487         if (is_bring_in == 1) {
488                 elm_scroller_page_bring_in(scroller, page, 0);
489         } else {
490                 elm_scroller_page_show(scroller, page, 0);
491         }
492
493         return QP_OK;
494 }
495
496 HAPI int quickpanel_setting_layout_set(Evas_Object *base, Evas_Object *setting)
497 {
498         retif(base == NULL, QP_FAIL, "Invalid parameter!");
499         retif(setting == NULL, QP_FAIL, "Invalid parameter!");
500
501         elm_object_part_content_set(base, QP_SETTING_BASE_PART, setting);
502
503         return 0;
504 }
505
506 HAPI Evas_Object *quickpanel_setting_layout_get(Evas_Object *base, const char *setting_part)
507 {
508         retif(base == NULL, NULL, "Invalid parameter!");
509         retif(setting_part == NULL, NULL, "Invalid parameter!");
510
511         return elm_object_part_content_get(base, setting_part);
512 }
513
514 HAPI int quickpanel_setting_layout_remove(Evas_Object *base)
515 {
516         Evas_Object *container = NULL;
517         Evas_Object *scroller = NULL;
518         Evas_Object *box = NULL;
519         retif(base == NULL, QP_FAIL, "Invalid parameter!");
520
521         container = quickpanel_setting_container_get(base);
522         scroller = quickpanel_setting_scroller_get(base);
523         box = quickpanel_setting_box_get(base);
524
525         if (box) {
526                 elm_box_clear(box);
527                 evas_object_del(box);
528                 box = NULL;
529         }
530         if (scroller) {
531                 evas_object_del(scroller);
532                 scroller = NULL;
533         }
534         if (container) {
535                 evas_object_del(container);
536                 container = NULL;
537         }
538
539         return QP_OK;
540 }
541
542 HAPI void quickpanel_setting_create_confirm_popup(
543                 Evas_Object *parent,
544                 char *title,
545                 char *text,
546                 Evas_Smart_Cb func)
547 {
548         Evas_Object *popup = elm_popup_add(parent);
549         Evas_Object *btn = NULL;
550
551         if (popup == NULL) {
552                 return;
553         }
554
555         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
556                         EVAS_HINT_EXPAND);
557
558         if (title) {
559                 elm_object_part_text_set(popup, "title,text", title);
560         }
561
562         if (text) {
563                 elm_object_text_set(popup, text);
564         }
565
566         btn = elm_button_add(popup);
567         elm_object_style_set(btn, "popup");
568         elm_object_text_set(btn, _("IDS_ST_SK_OK"));
569         elm_object_part_content_set(popup, "button1", btn);
570         evas_object_smart_callback_add(btn, "clicked", func, popup);
571
572         evas_object_show(popup);
573         quickpanel_common_ui_set_current_popup(popup, func);
574 }
575
576 HAPI void quickpanel_setting_create_2button_confirm_popup(
577                 Evas_Object *parent,
578                 char *title,
579                 char *text,
580                 char *btn1_text,
581                 Evas_Smart_Cb btn1_func,
582                 char *btn2_text,
583                 Evas_Smart_Cb btn2_func)
584 {
585         Evas_Object *popup = elm_popup_add(parent);
586         Evas_Object *btn = NULL;
587
588         if (popup == NULL) {
589                 return;
590         }
591
592         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
593                         EVAS_HINT_EXPAND);
594
595         if (title) {
596                 elm_object_part_text_set(popup, "title,text", title);
597         }
598
599         if (text) {
600                 elm_object_text_set(popup, text);
601         }
602
603         if (btn1_func != NULL && btn1_text != NULL) {
604                 btn = elm_button_add(popup);
605                 elm_object_style_set(btn, "popup");
606                 elm_object_text_set(btn, btn1_text);
607                 elm_object_part_content_set(popup, "button1", btn);
608                 evas_object_smart_callback_add(btn, "clicked", btn1_func, popup);
609         }
610         if (btn2_func != NULL && btn2_text != NULL) {
611                 btn = elm_button_add(popup);
612                 elm_object_style_set(btn, "popup");
613                 elm_object_text_set(btn, btn2_text);
614                 elm_object_part_content_set(popup, "button2", btn);
615                 evas_object_smart_callback_add(btn, "clicked", btn2_func, popup);
616         }
617
618         evas_object_show(popup);
619         quickpanel_common_ui_set_current_popup(popup, btn1_func);
620 }
621
622 HAPI void quickpanel_setting_create_timeout_popup(Evas_Object *parent, char *msg)
623 {
624         retif(msg == NULL, , "invalid parameter");
625
626         notification_status_message_post(msg);
627 }