fix for applying wayland (removing X)
[apps/home/settings.git] / setting-display / src / setting-display-main.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-display-main.h>
22 #include <dd-display.h>
23 #include <eventsystem.h>
24
25 #include <setting-common-draw-widget.h>
26 #include <bundle_internal.h>
27
28 #define KEYSTR_SCREEN_ROTATION "IDS_ST_MBODY_SCREEN_ROTATION"
29
30
31 static int setting_display_main_create(void *cb);
32 static int setting_display_main_destroy(void *cb);
33 static int setting_display_main_update(void *cb);
34 static int setting_display_main_cleanup(void *cb);
35
36 setting_view setting_view_display_main = {
37         .create = setting_display_main_create,
38         .destroy = setting_display_main_destroy,
39         .update = setting_display_main_update,
40         .cleanup = setting_display_main_cleanup,
41 };
42
43 extern const char *str_in_arr[];
44 extern const char *str_out_arr[];
45 const char *screen_capture_destination[] = {
46         KeyStr_ScreenCapture_Ask,
47         KeyStr_ScreenCapture_Gallery,
48         KeyStr_ScreenCapture_KeepIt,
49         NULL,
50 };
51
52 /* ***************************************************
53  *
54  *basic func
55  *
56  ***************************************************/
57 static void __screen_timeout_cb(void *data, Evas_Object *obj, void *event_info)
58 {
59         /* error check */
60         ret_if(data == NULL);
61         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
62
63         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
64         elm_genlist_item_selected_set(item, 0);
65
66         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
67
68         SettingDisplayUG *ad = data;
69
70         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
71
72         int value = 0;
73         if (!safeStrCmp(KeyStr_Backlight_15_SEC_STR, list_item->keyStr)) {
74                 elm_radio_value_set(ad->screen_timeout_rdg, 0);
75                 value = 15;
76         } else if (!safeStrCmp(KeyStr_Backlight_30_SEC_STR, list_item->keyStr)) {
77                 elm_radio_value_set(ad->screen_timeout_rdg, 1);
78                 value = 30;
79         } else if (!safeStrCmp(KeyStr_Backlight_1_MIN_STR, list_item->keyStr)) {
80                 elm_radio_value_set(ad->screen_timeout_rdg, 2);
81                 value = 60;
82         } else if (!safeStrCmp(KeyStr_Backlight_2_MIN_STR, list_item->keyStr)) {
83                 elm_radio_value_set(ad->screen_timeout_rdg, 3);
84                 value = 120;
85         } else if (!safeStrCmp(KeyStr_Backlight_5_MIN_STR, list_item->keyStr)) {
86                 elm_radio_value_set(ad->screen_timeout_rdg, 4);
87                 value = 300;
88         } else if (!safeStrCmp(KeyStr_Backlight_10_MIN_STR, list_item->keyStr)) {
89                 elm_radio_value_set(ad->screen_timeout_rdg, 5);
90                 value = 600;
91         }
92
93         int err;
94         setting_set_int_slp_key(ad->data_back->int_slp_setting_binded, value, &err);
95
96         if (ad->screen_timeout_popup) {
97                 evas_object_del(ad->screen_timeout_popup);
98                 ad->screen_timeout_popup = NULL;
99         }
100 }
101
102 static void setting_display_screen_timeout_popup(void *data)
103 {
104         SETTING_TRACE_BEGIN;
105         setting_retm_if(data == NULL, "data is NULL");
106
107         SettingDisplayUG *ad = (SettingDisplayUG *) data;
108
109         Evas_Object *menu_glist = NULL;
110         ad->screen_timeout_popup = setting_create_popup_with_list(&menu_glist, ad, ad->win_get,
111                                                                   KeyStr_BacklightTime, NULL, 0, 0);
112         _P(ad->screen_timeout_popup);
113
114         Evas_Object *rdg = elm_radio_add(menu_glist);
115         elm_object_style_set(rdg, "list");
116         evas_object_propagate_events_set(rdg, EINA_TRUE);
117         elm_radio_state_value_set(rdg, -1);
118         evas_object_data_set(menu_glist, "radio", rdg);
119         ad->screen_timeout_rdg = rdg;
120
121         ad->data_backlight_15sec = setting_create_Gendial_field_1radio(menu_glist, &(ad->itc_1icon_1text_sub),
122                                                                        __screen_timeout_cb, ad,
123                                                                        SWALLOW_Type_1RADIO,
124                                                                        rdg, 0, KeyStr_Backlight_15_SEC_STR,
125                                                                        NULL);
126         if (ad->data_backlight_15sec) {
127                 ad->data_backlight_15sec->userdata = ad;
128                 __BACK_POINTER_SET(ad->data_backlight_15sec);
129         } else {
130                 SETTING_TRACE_ERROR("ad->data_backlight_15sec is NULL");
131         }
132
133         ad->data_backlight_30sec = setting_create_Gendial_field_1radio(menu_glist, &(ad->itc_1icon_1text_sub),
134                                                                        __screen_timeout_cb, ad,
135                                                                        SWALLOW_Type_1RADIO,
136                                                                        rdg, 1, KeyStr_Backlight_30_SEC_STR,
137                                                                        NULL);
138         if (ad->data_backlight_30sec) {
139                 ad->data_backlight_30sec->userdata = ad;
140                 __BACK_POINTER_SET(ad->data_backlight_30sec);
141         } else {
142                 SETTING_TRACE_ERROR("ad->data_backlight_30sec is NULL");
143         }
144
145         ad->data_backlight_1min = setting_create_Gendial_field_1radio(menu_glist, &(ad->itc_1icon_1text_sub),
146                                                                       __screen_timeout_cb, ad,
147                                                                       SWALLOW_Type_1RADIO,
148                                                                       rdg, 2, KeyStr_Backlight_1_MIN_STR,
149                                                                       NULL);
150         if (ad->data_backlight_1min) {
151                 ad->data_backlight_1min->userdata = ad;
152                 __BACK_POINTER_SET(ad->data_backlight_1min);
153         } else {
154                 SETTING_TRACE_ERROR("ad->data_backlight_1min is NULL");
155         }
156
157         ad->data_backlight_2min = setting_create_Gendial_field_1radio(menu_glist, &(ad->itc_1icon_1text_sub),
158                                                                       __screen_timeout_cb, ad,
159                                                                       SWALLOW_Type_1RADIO,
160                                                                       rdg, 3, KeyStr_Backlight_2_MIN_STR,
161                                                                       NULL);
162         if (ad->data_backlight_2min) {
163                 ad->data_backlight_2min->userdata = ad;
164                 __BACK_POINTER_SET(ad->data_backlight_2min);
165         } else {
166                 SETTING_TRACE_ERROR("ad->data_backlight_2min is NULL");
167         }
168
169         ad->data_backlight_5min = setting_create_Gendial_field_1radio(menu_glist, &(ad->itc_1icon_1text_sub),
170                                                                       __screen_timeout_cb, ad,
171                                                                       SWALLOW_Type_1RADIO,
172                                                                       rdg, 4, KeyStr_Backlight_5_MIN_STR,
173                                                                       NULL);
174         if (ad->data_backlight_5min) {
175                 ad->data_backlight_5min->userdata = ad;
176                 __BACK_POINTER_SET(ad->data_backlight_5min);
177         } else {
178                 SETTING_TRACE_ERROR("ad->data_backlight_5min is NULL");
179         }
180
181         ad->data_backlight_10min = setting_create_Gendial_field_1radio(menu_glist, &(ad->itc_1icon_1text_sub),
182                                                                        __screen_timeout_cb, ad,
183                                                                        SWALLOW_Type_1RADIO,
184                                                                        rdg, 5, KeyStr_Backlight_10_MIN_STR,
185                                                                        NULL);
186         if (ad->data_backlight_10min) {
187                 ad->data_backlight_10min->userdata = ad;
188                 __BACK_POINTER_SET(ad->data_backlight_10min);
189         } else {
190                 SETTING_TRACE_ERROR("ad->data_backlight_10min is NULL");
191         }
192
193         /* update radio */
194         int value;
195         int err;
196         setting_get_int_slp_key(ad->data_back->int_slp_setting_binded, &value, &err);
197         if (15 == value) {
198                 elm_radio_value_set(rdg, 0);
199         } else if (30 == value) {
200                 elm_radio_value_set(rdg, 1);
201         } else if (60 == value) {
202                 elm_radio_value_set(rdg, 2);
203         } else if (120 == value) {
204                 elm_radio_value_set(rdg, 3);
205         } else if (300 == value) {
206                 elm_radio_value_set(rdg, 4);
207         } else if (600 == value) {
208                 elm_radio_value_set(rdg, 5);
209         }
210 }
211
212 #if !SUPPOR_SEPARATE_BRIGHTNESS
213 /* low battery */
214 static void setting_display_main_lowbat_cb(keynode_t *key, void *data)
215 {
216         ret_if(data == NULL);
217         SettingDisplayUG *ad = (SettingDisplayUG *) data;
218         SETTING_TRACE_BEGIN;
219         ret_if(ad->data_br == NULL);
220
221         char *vconf_key = vconf_keynode_get_name(key);
222         SETTING_TRACE("the value of [ %s ] just changed", vconf_key);
223         /* VCONFKEY_SYSMAN_BATTERY_STATUS_LOW */
224
225         int battery_value;
226         vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
227         ad->low_bat = battery_value;
228
229         if (battery_value < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
230                 elm_slider_value_set(ad->data_br->eo_check, 1);
231                 /* disabled */
232                 setting_disable_genlist_item(ad->data_br->item);
233         } else {
234                 setting_enable_genlist_item(ad->data_br->item);
235         }
236         return;
237 }
238 #endif
239
240 static char *___touchkey_light_duration_sub_desc()
241 {
242         SETTING_TRACE_BEGIN;
243         int value = 0;
244         vconf_get_int(VCONFKEY_SETAPPL_TOUCHKEY_LIGHT_DURATION, &value);
245         switch (value) {
246                 case 0:
247                         return g_strdup("IDS_ST_BODY_ALWAYS_OFF");
248                 case -1:
249                         return g_strdup("IDS_ST_BODY_ALWAYS_ON");
250                 case 90: {
251                                 return g_strdup("IDS_ST_BODY_1_5_SECONDS");
252                         }
253                 case 360: {
254                                 return g_strdup("IDS_MSG_OPT_6_SECONDS");
255                         }
256                 default:
257                         return g_strdup("IDS_ST_BODY_ALWAYS_ON");
258         }
259         return NULL;
260 }
261 static char *___format_touchkey_light_duration_sub_desc(char *temp)
262 {
263         /*SETTING_TRACE_BEGIN; */
264         /*SETTING_TRACE("temp:%s",temp); */
265         if (!safeStrCmp(temp, "IDS_ST_BODY_ALWAYS_OFF")) {
266                 return g_strdup(_("IDS_ST_BODY_ALWAYS_OFF"));
267         } else if (!safeStrCmp(temp, "IDS_ST_BODY_ALWAYS_ON")) {
268                 return g_strdup(_("IDS_ST_BODY_ALWAYS_ON"));
269         } else if (!safeStrCmp(temp, "1.5")) {
270                 char duration[MAX_DISPLAY_NAME_LEN_ON_UI] = {0, };
271                 snprintf(duration, sizeof(duration), "%s %s", temp, (char *)(_("IDS_ST_BODY_SECONDS")));
272                 return g_strdup(duration);
273         } else if (!safeStrCmp(temp, "6")) {
274                 char duration[MAX_DISPLAY_NAME_LEN_ON_UI] = {0, };
275                 snprintf(duration, sizeof(duration), "%s %s", temp, (char *)(_("IDS_ST_BODY_SECONDS")));
276                 return g_strdup(duration);
277         } else {
278                 return g_strdup(_("IDS_ST_BODY_ALWAYS_ON"));
279         }
280         return NULL;
281 }
282
283 char *__setting_display_screen_capture_destination_get()
284 {
285         SETTING_TRACE_BEGIN;
286         int value = 0;
287         int ret = vconf_get_int(VCONFKEY_SETAPPL_SCREEN_CAPTURE_DESTINATION, &value);
288         if (ret != 0) {
289                 SETTING_TRACE_ERROR("get vconf failed");
290         }
291         char *temp = NULL;
292         switch (value) {
293                 case SETTING_SCREEN_CAPTURE_DESTINATION_ASK:
294                         temp = (char *)(screen_capture_destination[SETTING_SCREEN_CAPTURE_DESTINATION_ASK]);
295                         break;
296                 case SETTING_SCREEN_CAPTURE_DESTINATION_GALLERY:
297                         temp = (char *)(screen_capture_destination[SETTING_SCREEN_CAPTURE_DESTINATION_GALLERY]);
298                         break;
299                 case SETTING_SCREEN_CAPTURE_DESTINATION_KEEPIT:
300                         temp = (char *)(screen_capture_destination[SETTING_SCREEN_CAPTURE_DESTINATION_KEEPIT]);
301                         break;
302                 default:
303                         SETTING_TRACE_ERROR("incorrect screen capture destination");
304                         temp = (char *)(screen_capture_destination[SETTING_SCREEN_CAPTURE_DESTINATION_ASK]);
305                         break;
306         }
307         return temp;
308 }
309
310 char *__item_touch_duration_sub_item_text_get(void *data, Evas_Object *obj, const char *part)
311 {
312         /*SETTING_TRACE_BEGIN; */
313         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
314         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
315         char *ret_str = NULL;
316         if (!safeStrCmp(part, "elm.text") || !safeStrCmp(part, "elm.text.1")) {
317                 if (item_data->keyStr) {
318                         ret_str = ___format_touchkey_light_duration_sub_desc(item_data->keyStr);
319                 }
320         }
321         return ret_str;
322 }
323 char *__item_touch_duration_text_get(void *data, Evas_Object *obj, const char *part)
324 {
325         /*SETTING_TRACE_BEGIN; */
326         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
327         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
328         char *ret_str = NULL;
329         if (!safeStrCmp(part, "elm.text") || !safeStrCmp(part, "elm.text.1")) {
330                 if (item_data->keyStr) {
331                         ret_str = (char *)g_strdup(_(item_data->keyStr));
332                 }
333         } else if (!safeStrCmp(part, "elm.text.2")) {   /* bottom or right */
334                 if (item_data->sub_desc) {
335                         ret_str = ___format_touchkey_light_duration_sub_desc(item_data->sub_desc);
336                 }
337         }
338         return ret_str;
339 }
340 char *__item_backlight_sub_item_text_get(void *data, Evas_Object *obj, const char *part)
341 {
342         /*SETTING_TRACE_BEGIN; */
343         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
344         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
345         char *ret_str = NULL;
346         if (!safeStrCmp(part, "elm.text") || !safeStrCmp(part, "elm.text.1")) {
347                 if (item_data->keyStr) {
348                         ret_str =  format_backlight_time_str(item_data->keyStr);
349                 }
350         }
351         return ret_str;
352 }
353
354
355 char *__item_backlight_text_get(void *data, Evas_Object *obj, const char *part)
356 {
357         /*SETTING_TRACE_BEGIN; */
358         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
359         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
360         char *ret_str = NULL;
361         if (!safeStrCmp(part, "elm.text") || !safeStrCmp(part, "elm.text.1")) {
362                 if (item_data->keyStr) {
363                         ret_str = (char *)g_strdup(_(item_data->keyStr));
364                 }
365         } else if (!safeStrCmp(part, "elm.text.2")) {   /* bottom or right */
366                 if (item_data->sub_desc) {
367                         ret_str =  format_backlight_time_str(item_data->sub_desc);
368                 }
369         }
370         /*SETTING_TRACE_END; */
371         return ret_str;
372 }
373 static void setting_display_main_vconf_change_cb(keynode_t *key, void *data)
374 {
375         ret_if(data == NULL);
376
377         SettingDisplayUG *ad = data;
378         int status = 0;
379
380         status = vconf_keynode_get_bool(key);
381         char *vconf_name = vconf_keynode_get_name(key);
382         SETTING_TRACE("status:%d", status);
383         if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL)) {
384                 if (ad->data_auto_rotate && ad->data_auto_rotate->eo_check) {
385                         setting_update_gl_item_chk_status(ad->data_auto_rotate, status);
386                         if (status == TRUE) {
387                                 if (ad->data_smart_rotation && ad->data_smart_rotation->item) {
388                                         setting_enable_genlist_item(ad->data_smart_rotation->item);
389                                 }
390                         } else if (status == FALSE) {
391                                 if (ad->data_smart_rotation && ad->data_smart_rotation->item) {
392                                         setting_disable_genlist_item(ad->data_smart_rotation->item);
393                                 }
394                         }
395                 }
396         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_LCD_AUTO_DISPLAY_ADJUSTMENT)) {
397                 setting_update_gl_item_chk_status(ad->data_auto_adjust_scrn_tone, status);
398         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DYNAMIC_STATUS_BAR)) {
399                 setting_update_gl_item_chk_status(ad->data_dynamic, status);
400         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL)) {
401                 if (ad->data_back) {
402                         G_FREE(ad->data_back->sub_desc);
403                         ad->data_back->sub_desc = get_pa_backlight_time_value_str();
404                         elm_object_item_data_set(ad->data_back->item, ad->data_back);
405                         elm_genlist_item_update(ad->data_back->item);
406                 }
407         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_TOUCHKEY_LIGHT_DURATION)) {
408                 if (ad->data_touchkey_light_duration) {
409                         G_FREE(ad->data_touchkey_light_duration->sub_desc);
410                         ad->data_touchkey_light_duration->sub_desc = ___touchkey_light_duration_sub_desc();
411                         elm_object_item_data_set(ad->data_touchkey_light_duration->item, ad->data_touchkey_light_duration);
412                         elm_genlist_item_update(ad->data_touchkey_light_duration->item);
413                 }
414         }
415
416 }
417
418 void auto_rotate_event_handler(const char *event_name, bundle *data, void *user_data)
419 {
420         const char *auto_rotate_set = NULL;
421         SETTING_TRACE("auto rotate set event(%s) received", event_name);
422
423         auto_rotate_set = bundle_get_val(data, EVT_KEY_SCREEN_AUTOROTATE_STATE);
424         SETTING_TRACE("auto_rotate_set(%s", auto_rotate_set);
425 }
426
427 int auto_rotate_event_reg_id;
428
429 static int setting_display_main_create(void *cb)
430 {
431         SETTING_TRACE_BEGIN;
432         /* error check */
433         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
434
435         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
436
437         Evas_Object *scroller = NULL;
438
439         int value = 0;
440         int ret = 0;
441
442         /* add basic layout */
443         char setBtnStr[MAX_DISPLAY_NAME_LEN_ON_UI];
444         snprintf(setBtnStr, sizeof(setBtnStr), "%s",
445                  (char *)dgettext("sys_string", "IDS_ST_BUTTON_BACK"));
446
447         ad->ly_main =
448             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
449                                                    ad->win_get,
450                                                    KeyStr_Display, setBtnStr,
451                                                    NULL,
452                                                    (setting_call_back_func)setting_display_main_click_softkey_back_cb,
453                                                    NULL, ad, &scroller,
454                                                    &(ad->navi_bar));
455
456         ad->genlist = scroller;
457         elm_genlist_mode_set(ad->genlist, ELM_LIST_COMPRESS);
458         /*register vconf key */
459
460         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
461                                        setting_display_main_vconf_change_cb, ad);
462         if (ret != 0) {
463                 SETTING_TRACE_ERROR("vconf notifications Failed %d", ret);
464         }
465         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_AUTO_DISPLAY_ADJUSTMENT,
466                                        setting_display_main_vconf_change_cb, ad);
467         if (ret != 0) {
468                 SETTING_TRACE_ERROR("vconf notifications Failed %d", ret);
469         }
470         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DYNAMIC_STATUS_BAR,
471                                        setting_display_main_vconf_change_cb, ad);
472         if (ret != 0) {
473                 SETTING_TRACE_ERROR("vconf notifications Failed %d", ret);
474         }
475         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SCREEN_CAPTURE_EDIT_AFTER_CAPTURE,
476                                        setting_display_main_vconf_change_cb, ad);
477         if (ret != 0) {
478                 SETTING_TRACE_ERROR("vconf notifications Failed %d", ret);
479         }
480         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL,
481                                        setting_display_main_vconf_change_cb, ad);
482         if (ret != 0) {
483                 SETTING_TRACE_ERROR("vconf notifications Failed %d", ret);
484         }
485         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCHKEY_LIGHT_DURATION,
486                                        setting_display_main_vconf_change_cb, ad);
487         if (ret != 0) {
488                 SETTING_TRACE_ERROR("vconf notifications Failed %d", ret);
489         }
490
491
492
493         /* BRIGHTNESS */
494         construct_brightness(ad, scroller);
495
496         /* FONT */
497         ad->data_font =
498             setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
499                                              setting_display_main_mouse_up_Gendial_list_cb,
500                                              ad, SWALLOW_Type_INVALID, NULL,
501                                              NULL, 0, KeyStr_Font,
502                                              NULL, NULL);
503         if (ad->data_font) {
504                 ad->data_font->userdata = ad;
505                 ad->data_font->group_style = SETTING_GROUP_STYLE_TOP;
506                 __BACK_POINTER_SET(ad->data_font);
507         } else {
508                 SETTING_TRACE_ERROR("ad->data_font is NULL");
509         }
510
511         /* AUTO ROTATE */
512         ret = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &value);
513         ad->data_auto_rotate =
514             setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
515                                              setting_display_main_mouse_up_Gendial_list_cb,
516                                              ad, SWALLOW_Type_1ICON_1RADIO, NULL,
517                                              NULL, value, "IDS_ST_HEADER_AUTO_ROTATE_SCREEN_ABB",
518                                              NULL,
519                                              setting_display_main_auto_rotate_chk_btn_cb);
520         if (ad->data_auto_rotate) {
521                 ad->data_auto_rotate->userdata = ad;
522                 __BACK_POINTER_SET(ad->data_auto_rotate);
523                 setting_genlist_item_groupstyle_set(ad->data_auto_rotate, SETTING_GROUP_STYLE_TOP);
524         } else {
525                 SETTING_TRACE_ERROR("ad->data_battery is NULL");
526         }
527
528         /* BACKLIGHTTIME */
529         char *pa_backlight_time = get_pa_backlight_time_str();
530         ad->data_back =
531             setting_create_Gendial_field_def(scroller,
532                                              &itc_2text_3_parent,
533                                              setting_display_main_mouse_up_Gendial_list_cb, ad,
534                                              SWALLOW_Type_INVALID, NULL, NULL,
535                                              0, KeyStr_BacklightTime,
536                                              pa_backlight_time,
537                                              NULL);
538
539         if (ad->data_back) {
540                 ad->data_back->int_slp_setting_binded = INT_SLP_SETTING_LCD_TIMEOUT_NORMAL;
541                 ad->data_back->group_style = SETTING_GROUP_STYLE_CENTER;
542                 __BACK_POINTER_SET(ad->data_back);
543         } else {
544                 SETTING_TRACE_ERROR("ad->data_back is NULL");
545         }
546         G_FREE(pa_backlight_time);
547
548 #if !SUPPOR_SEPARATE_BRIGHTNESS
549         if (ad->data_br) {
550                 int battery_value;
551                 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
552                 ad->low_bat = battery_value;
553
554                 if (battery_value < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
555                         elm_slider_value_set(ad->data_br->eo_check, 1);
556                         setting_disable_genlist_item(ad->data_br->item);
557                 } else {
558                         setting_enable_genlist_item(ad->data_br->item);
559                 }
560         }
561         if (ad->display_expand_state == DISPLAY_EXPAND_BACKLIGHT) {
562                 if (ad->data_back && ad->data_back->item) {
563                         elm_genlist_item_expanded_set(ad->data_back->item, TRUE);
564                 }
565         }
566         vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_main_lowbat_cb, ad);
567 #endif
568
569         /* eventsystem */
570         if (eventsystem_register_event(SYS_EVENT_SCREEN_AUTOROTATE_STATE,
571                                        &auto_rotate_event_reg_id,
572                                        (eventsystem_handler)auto_rotate_event_handler, cb) != ES_R_OK) {
573                 SETTING_TRACE_ERROR("error");
574         }
575
576         /*  add separator in botton of view */
577         Elm_Object_Item *item =
578             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
579                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
580         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
581         setting_view_display_main.is_create = 1;
582         return SETTING_RETURN_SUCCESS;
583 }
584
585 static int setting_display_main_destroy(void *cb)
586 {
587         SETTING_TRACE_BEGIN;
588         /* error check */
589         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
590         retv_if(!(setting_view_display_main.is_create), SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
591
592         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
593         destruct_brightness(ad);
594 #if !SUPPORT_SEPARATE_BRIGHTNESS
595         /* low battery handler - registration */
596         vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_main_lowbat_cb);
597 #endif
598         vconf_ignore_key_changed(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, __display_int_vconf_cb);
599         int ret = 0;
600         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
601                                        setting_display_main_vconf_change_cb);
602         if (ret != 0) {
603                 SETTING_TRACE_ERROR("vconf ignore Failed %d", ret);
604         }
605         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_AUTO_DISPLAY_ADJUSTMENT,
606                                        setting_display_main_vconf_change_cb);
607         if (ret != 0) {
608                 SETTING_TRACE_ERROR("vconf ignore Failed %d", ret);
609         }
610         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DYNAMIC_STATUS_BAR,
611                                        setting_display_main_vconf_change_cb);
612         if (ret != 0) {
613                 SETTING_TRACE_ERROR("vconf ignore Failed %d", ret);
614         }
615         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_SCREEN_CAPTURE_EDIT_AFTER_CAPTURE,
616                                        setting_display_main_vconf_change_cb);
617         if (ret != 0) {
618                 SETTING_TRACE_ERROR("vconf ignore Failed %d", ret);
619         }
620         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL,
621                                        setting_display_main_vconf_change_cb);
622         if (ret != 0) {
623                 SETTING_TRACE_ERROR("vconf ignore Failed %d", ret);
624         }
625         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCHKEY_LIGHT_DURATION,
626                                        setting_display_main_vconf_change_cb);
627         if (ret != 0) {
628                 SETTING_TRACE_ERROR("vconf ignore Failed %d", ret);
629         }
630
631         if (ad->nf_it) {
632                 ad->nf_it = NULL;
633         }
634         if (ad->ly_main != NULL) {
635                 evas_object_del(ad->ly_main);
636                 ad->ly_main = NULL;
637                 /* if(ad->back_dialData) FREE(ad->back_dialData); */
638         }
639         setting_view_display_main.is_create = 0;
640
641         if (ES_R_OK != eventsystem_unregister_event(auto_rotate_event_reg_id)) {
642                 SETTING_TRACE_ERROR("error");
643         }
644
645         return SETTING_RETURN_SUCCESS;
646 }
647
648 static int setting_display_main_update(void *cb)
649 {
650         SETTING_TRACE_BEGIN;
651         /* error check */
652         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
653
654         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
655
656         if (ad->ly_main != NULL) {
657                 evas_object_show(ad->ly_main);
658                 if (ad->data_br) {
659                         ad->data_br->sub_desc =
660                             (char *)g_strdup(get_brightness_mode_str());
661                         elm_object_item_data_set(ad->data_br->item, ad->data_br);
662                         elm_genlist_item_update(ad->data_br->item);
663
664                 }
665 #ifdef SUPPORT_SCREEN_MODE
666                 if (ad->data_screen_mode) {
667                         char *curmode = vconf_get_str(VCONFKEY_SETAPPL_SCREENMODE_SELNAME);
668                         SETTING_TRACE(">>> CUR SCREEN MODE : %s ", curmode);
669                         int i = 0;
670                         for (; i < SCREENMODE_MAX; i++) {
671                                 if (0 == safeStrCmp(str_in_arr[i], curmode)) {
672                                         ad->data_screen_mode->sub_desc = (char *)g_strdup(_(str_out_arr[i]));
673                                         break;
674                                 }
675                         }
676                         FREE(curmode);
677
678                         elm_object_item_data_set(ad->data_screen_mode->item, ad->data_screen_mode);
679                         elm_genlist_item_update(ad->data_screen_mode->item);
680                 }
681 #endif
682         }
683
684         return SETTING_RETURN_SUCCESS;
685 }
686
687 static int setting_display_main_cleanup(void *cb)
688 {
689         SETTING_TRACE_BEGIN;
690         return SETTING_RETURN_SUCCESS;
691 }
692
693 /* ***************************************************
694  *
695  *general func
696  *
697  ***************************************************/
698
699 void setting_display_destroy_font_ug_cb(ui_gadget_h ug,
700                                         void *priv)
701 {
702         ret_if(priv == NULL);
703         SettingDisplayUG *ad = (SettingDisplayUG *) priv;
704         if (ug) {
705                 setting_ug_destroy(ug);
706                 ad->ug_font = NULL;
707         }
708         elm_genlist_realized_items_update(ad->genlist);
709 }
710
711
712 Eina_Bool ___display_freeze_event_timer_cb(void *cb)
713 {
714         SETTING_TRACE_BEGIN;
715         retv_if(cb == NULL, EINA_FALSE);
716
717         SettingDisplayUG *ad = (SettingDisplayUG *)cb;
718
719         evas_object_freeze_events_set(ad->navi_bar, EINA_FALSE);
720         ad->event_freeze_timer = NULL;
721         return EINA_FALSE;
722 }
723
724 gboolean setting_display_create_font_sg(void *data)
725 {
726         SETTING_TRACE_BEGIN;
727         /* error check */
728         retv_if(data == NULL, FALSE);
729
730         SettingDisplayUG *ad = (SettingDisplayUG *) data;       /* ad is point to data */
731         if (0 == app_launcher("setting-font-efl")) {
732                 if (ad->event_freeze_timer) {
733                         ecore_timer_del(ad->event_freeze_timer);
734                         ad->event_freeze_timer = NULL;
735                 }
736                 ad->event_freeze_timer = ecore_timer_add(1, ___display_freeze_event_timer_cb, ad);
737                 evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
738         }
739         return TRUE;
740 }
741
742 void setting_display_destroy_ledindicator_ug_cb(ui_gadget_h ug,
743                                                 void *priv)
744 {
745         ret_if(priv == NULL);
746         SettingDisplayUG *ad = (SettingDisplayUG *) priv;
747         if (ug) {
748                 setting_ug_destroy(ug);
749                 ad->ug_ledindicator = NULL;
750         }
751         /* elm_genlist_realized_items_update(ad->genlist); */
752 }
753
754 gboolean setting_display_create_ledindicator_sg(void *data)
755 {
756         /* error check */
757         retv_if(data == NULL, FALSE);
758
759         SettingDisplayUG *ad = (SettingDisplayUG *) data;       /* ad is point to data */
760
761         if (ad->ug_ledindicator) {
762                 SETTING_TRACE("Font UG is already loaded.");
763                 return FALSE;
764         }
765         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
766
767         if (!cbs) {
768                 return FALSE;
769         }
770         cbs->layout_cb = setting_display_layout_ug_cb;
771         cbs->result_cb = NULL;
772         cbs->destroy_cb = setting_display_destroy_ledindicator_ug_cb;
773         cbs->priv = (void *)ad;
774
775         elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
776         ad->ug_ledindicator = setting_ug_create(ad->ug, "setting-ledindicator-efl", UG_MODE_FULLVIEW, NULL, cbs);
777         if (NULL == ad->ug_ledindicator) {      /* error handling */
778                 SETTING_TRACE_ERROR("NULL == ad->ug_ledindicator");
779                 evas_object_show(ad->ly_main);
780         }
781
782         FREE(cbs);
783
784         return TRUE;
785 }
786
787 static void
788 setting_display_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
789                                               void *event_info)
790 {
791         /* error check */
792         setting_retm_if(data == NULL, "Data parameter is NULL");
793
794         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
795         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
796         elm_genlist_item_selected_set(item, 0);
797         Setting_GenGroupItem_Data *list_item =
798             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
799         setting_retm_if(NULL == list_item, "list_item is NULL");
800
801         SettingDisplayUG *ad = (SettingDisplayUG *) data;
802
803         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
804
805         if (!safeStrCmp("IDS_ST_BODY_BRIGHTNESS_M_POWER_SAVING", list_item->keyStr)) {
806                 setting_view_change(&setting_view_display_main,
807                                     &setting_view_display_brightness, ad);
808         } else if (!safeStrCmp(KEYSTR_SCREEN_ROTATION, list_item->keyStr)) {
809                 setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
810                 vconf_set_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, list_item->chk_status);
811         } else if (!safeStrCmp(KeyStr_Font, list_item->keyStr)) {
812                 setting_display_create_font_sg(ad);
813         } else if (!safeStrCmp(keystr_LedIndicator, list_item->keyStr)) {
814                 setting_display_create_ledindicator_sg(ad);
815         } else if (!safeStrCmp(KeyStr_ScreenCapture_Edit, list_item->keyStr)) {
816                 setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
817                 vconf_set_bool(VCONFKEY_SETAPPL_SCREEN_CAPTURE_EDIT_AFTER_CAPTURE, list_item->chk_status);
818         } else if (!safeStrCmp(KeyStr_Dynamic_Status_Bar, list_item->keyStr)) {
819                 setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
820                 vconf_set_bool(VCONFKEY_SETAPPL_DYNAMIC_STATUS_BAR, list_item->chk_status);
821         } else if (!safeStrCmp(KeyStr_BacklightTime, list_item->keyStr)) {
822                 setting_display_screen_timeout_popup(ad);
823         }
824 }
825
826 static Eina_Bool
827 setting_display_main_click_softkey_back_cb(void *data, Evas_Object *obj,
828                                            void *event_info)
829 {
830         SETTING_TRACE_BEGIN;
831         /* error check */
832         setting_retvm_if(data == NULL, EINA_FALSE,
833                          "[Setting > Display] Data parameter is NULL");
834
835         SettingDisplayUG *ad = (SettingDisplayUG *) data;
836
837         /* Send destroy request */
838         ug_destroy_me(ad->ug);
839         SETTING_TRACE_END;
840         return EINA_FALSE;
841
842 }
843
844 static void setting_display_main_auto_rotate_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
845 {
846         SETTING_TRACE_BEGIN;
847         /* error check */
848         retm_if(data == NULL, "Data parameter is NULL");
849         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
850         SettingDisplayUG *ad = (SettingDisplayUG *)list_item->userdata;
851
852         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
853
854         if (list_item->chk_status == 1) {
855                 int angle = elm_win_rotation_get(ad->win_main_layout);
856                 elm_win_rotation_with_resize_set(ad->win_main_layout, angle);
857                 setting_set_event_system(SYS_EVENT_SCREEN_AUTOROTATE_STATE, EVT_KEY_SCREEN_AUTOROTATE_STATE, EVT_VAL_SCREEN_AUTOROTATE_ON);
858         } else {
859                 elm_win_rotation_with_resize_set(ad->win_main_layout, 0);
860                 setting_set_event_system(SYS_EVENT_SCREEN_AUTOROTATE_STATE, EVT_KEY_SCREEN_AUTOROTATE_STATE, EVT_VAL_SCREEN_AUTOROTATE_OFF);
861         }
862
863         vconf_set_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, list_item->chk_status);
864 }