fix for applying wayland (removing X)
[apps/home/settings.git] / src / setting.c
1 /*
2  * setting
3  * * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
4  *
5  * Contact: MyoungJune Park <mj2004.park@samsung.com>
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20 #include <setting.h>
21 #include <app.h>
22 #include <sound_manager.h>
23
24 #include <appcore-common.h>
25 #include <sensor.h>
26 #include <aul.h>
27 #include <app_preference.h>
28
29 #include "setting-helper.h"
30 #include "setting-main.h"
31 #include <setting-cfg.h>
32
33 #include <setting-common-search.h>
34 #include <elm_object.h>
35 #include <appsvc.h>
36 /*#include <nfc.h> */
37 #include <signal.h>
38 #include <system_settings.h>
39 #include <bundle_internal.h>
40
41 #define KEY_END "XF86Stop"
42 /*#define SUPPORT_UG_MESSAGE */
43
44
45 #define SETTING_SOUND_VOL_MAX 15
46 #define SETTING_DEFAULT_RINGTONE_VOL_INT        11
47 #define SETTING_DEFAULT_NOTI_VOL_INT            11
48 #define SETTING_DEFAULT_MEDIA_VOL_INT           9
49
50 int g_geometry_x, g_geometry_y, g_geometry_w, g_geometry_h;
51 extern int aul_listen_app_dead_signal(int (*func)(int signal, void *data), void *data);
52
53 /* This API is defined in <app_service_private.h>. But, cannot include and it is not a managed API.
54         The way to resolve : 1. Add extern.
55                                                  2. Use bundle pointer originally
56         At first, choose No.1 */
57 extern int app_control_create_request(bundle *data, app_control_h *service);
58
59
60 setting_main_appdata *g_main_ad;
61
62 void termination_handler(int signum)
63 {
64         SETTING_TRACE_BEGIN;
65         /* do something for signal handling */
66         /*SETTING_TRACE_DEBUG(">>>>>>>>>>>>>>>>> SIGTERM >>>>>>>>>>>>>>> SETTING "); */
67
68         elm_exit();
69 }
70
71
72 #if LOW_BATTERY_DO_NOTHING
73
74 /*  in case of low battery, don't terminate itself.*/
75
76 /**
77 * The event process when battery becomes low.
78 */
79 static void setting_main_low_battery_cb(app_event_info_h event_info, void *data)
80 {
81         SETTING_TRACE_BEGIN;
82         retm_if(!data, "Invalid argument: data is NULL");
83         setting_main_appdata *ad = data;
84
85         if (ad->ug) {
86                 ug_send_event(UG_EVENT_LOW_BATTERY);
87         }
88 }
89 #endif
90
91
92 #if SUPPORT_APP_ROATION
93 static void _rot_changed_cb(void *data, Evas_Object *obj, void *event_info)
94 {
95         SETTING_TRACE_BEGIN;
96         setting_main_appdata *ad = (setting_main_appdata *)data;
97         if (ad == NULL || ad->win_main == NULL) {
98                 return;
99         }
100         int change_ang = elm_win_rotation_get(ad->win_main);
101         SETTING_TRACE_DEBUG("....change_ang:%d", change_ang);
102         SETTING_TRACE_DEBUG("current_rotation:%d", ad->current_rotation);
103         /*Send the rotation event to UGs.. */
104         enum ug_event event = UG_EVENT_ROTATE_PORTRAIT;
105         switch (change_ang) {
106                 case APP_DEVICE_ORIENTATION_0:
107                         event = UG_EVENT_ROTATE_PORTRAIT;
108                         break;
109                 case APP_DEVICE_ORIENTATION_180:
110                         event = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN;
111                         break;
112                 case APP_DEVICE_ORIENTATION_270:
113                         event = UG_EVENT_ROTATE_LANDSCAPE;
114                         break;
115                 case APP_DEVICE_ORIENTATION_90:
116                         event = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN;
117                         break;
118                 default:
119                         return;
120         }
121         SETTING_TRACE_DEBUG("diff:%d", elm_win_rotation_get(ad->win_main) - ad->current_rotation);
122
123         if (change_ang != ad->current_rotation) {
124                 int diff = change_ang - ad->current_rotation;
125                 if (diff < 0) {
126                         diff = -diff;
127                 }
128                 /**
129                 * @todo if app didn't launch UG, is the call required to invoke?
130                 */
131                 ug_send_event(event);
132                 if (diff == 180) {
133                         /* do nothing */
134                 }
135                 ad->current_rotation = change_ang;
136         }
137 }
138 #endif
139
140
141 /**
142 * The event process when region is changes.
143 */
144 static void setting_main_region_changed_cb(app_event_info_h event_info, void *data)
145 {
146         retm_if(!data, "Invalid argument: data is NULL");
147         setting_main_appdata *ad = data;
148
149         if (ad->ug) {
150                 ug_send_event(UG_EVENT_REGION_CHANGE);
151         }
152 }
153
154 /**
155 * The event process when win object is destroyed
156 */
157 static void setting_main_del_win(void *data, Evas_Object *obj, void *event)
158 {
159         elm_exit();
160 }
161
162 void profile_changed_cb(void *data, Evas_Object *obj, void *event)
163 {
164         const char *profile = elm_config_profile_get();
165
166         if (strcmp(profile, "desktop") == 0) {
167                 elm_win_indicator_mode_set(obj, ELM_WIN_INDICATOR_HIDE);
168         } else {
169                 elm_win_indicator_mode_set(obj, ELM_WIN_INDICATOR_SHOW);
170         }
171 }
172
173 /**
174 * To create a win object, the win is shared between the App and all its UGs
175 */
176 static Evas_Object *setting_main_create_win(const char *name)
177 {
178         SETTING_TRACE_BEGIN;
179         LAUNCH_SETTING_IN();
180         Evas_Object *eo;
181         int w, h;
182
183         eo = (Evas_Object *) elm_win_add(NULL, name, ELM_WIN_BASIC);
184         if (!eo)
185                 eo = elm_win_util_standard_add(name, name);
186         else {
187                 /* elm_win_util_standard_add creates bg inside */
188                 Evas_Object *bg;
189
190                 bg = elm_bg_add(eo);
191
192                 if (!bg) {
193                         evas_object_del(eo);
194                         return NULL;
195                 }
196                 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
197                 elm_win_resize_object_add(eo, bg);
198                 evas_object_show(bg);
199         }
200         if (eo) {
201                 elm_win_title_set(eo, name);
202                 evas_object_smart_callback_add(eo, "delete,request", setting_main_del_win, NULL);
203                 evas_object_smart_callback_add(eo, "profile,changed", profile_changed_cb, NULL);
204                 /*elm_win_conformant_set(eo, EINA_TRUE); */
205                 //ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
206                 // evas_object_resize(eo, w, h);
207         }
208         LAUNCH_SETTING_OUT();
209         return eo;
210 }
211
212
213 /**
214 * exceptional process, reset the env vars by Setting vconf VCONFKEY_LANGSET
215 */
216 static void setting_main_lang_changed_cb(app_event_info_h event_info, void *data)
217 {
218         SETTING_TRACE_BEGIN;
219         retm_if(!data, "Invalid argument: data is NULL");
220         /*FIX the crash when switch from Portrait mode to landscape mode, */
221         /*It is so strange the data is no longer correct */
222         /*and ....why it is invoked */
223         /*setting_main_appdata *ad = data; */
224         setting_main_appdata *ad = g_main_ad;
225
226         char *tab_str[] = {
227                 Keystr_Connection,
228                 KeyStr_Device,
229                 KeyStr_MotionControl,
230                 "IDS_ST_BODY_GENERAL",
231                 KeyStr_DownloadedAPPs
232         };
233         int i = 0;
234
235         for (; i < SETTING_TAB_VIEW_MAX; i++) {
236                 if (ad->ctrl_item[i])
237                         elm_object_item_text_set(ad->ctrl_item[i], _(tab_str[i]));
238         }
239
240         char *tmp = NULL;
241         if (ad->data_bright) {
242                 tmp = ad->data_bright->sub_desc;
243                 ad->data_bright->sub_desc = (char *)g_strdup(get_brightness_mode_str());
244                 FREE(tmp)
245         }
246         if (ad->data_backlight) {
247                 tmp = ad->data_backlight->sub_desc;
248                 ad->data_backlight->sub_desc = get_pa_backlight_time_str();
249                 FREE(tmp)
250         }
251         if (ad->data_screenmode) {
252                 tmp = ad->data_screenmode->sub_desc;
253                 ad->data_screenmode->sub_desc = get_pa_screen_mode_str();
254                 FREE(tmp)
255         }
256
257         Eina_List *list, *l;
258         Elm_Object_Item *it;
259         i = SETTING_TAB_VIEW_INVALID;
260         for (i = SETTING_TAB_VIEW_CONNECTION; i < SETTING_TAB_VIEW_MAX; i++) {
261                 if (ad->sub_view[i]) {
262                         list = elm_genlist_realized_items_get(ad->sub_view[i]);
263                         EINA_LIST_FOREACH(list, l, it) {
264                                 __add_gl_tts_feature(it);
265                                 elm_genlist_item_update(it);
266                         }
267                 }
268         }
269
270         /* update all tabs */
271         for (i = SC_All_List; i < SC_Max; i++) {
272                 if (ad->sc_gl[i]) {
273                         list = elm_genlist_realized_items_get(ad->sc_gl[i]);
274                         EINA_LIST_FOREACH(list, l, it) {
275                                 __add_gl_tts_feature(it);
276                                 elm_genlist_item_update(it);
277                         }
278                 }
279         }
280         /* For UGs */
281
282         elm_object_item_part_text_set(ad->main_navi_it, "elm.text.title", _("IDS_ST_OPT_SETTINGS"));
283         setting_navi_items_update(ad->navibar_main);
284
285         if (ad->isInUGMode && ad->ug) {
286                 Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
287                 if (layout) {
288                         Evas_Object *navi_bar = NULL;
289                         navi_bar = elm_object_part_content_get(layout, "elm.swallow.content");
290                         setting_navi_items_update(navi_bar);
291                 }
292                 ug_send_event(UG_EVENT_LANG_CHANGE);
293         }
294
295 }
296
297 /**
298 * the event process when other VCONFS changes
299 */
300 static void setting_other_vconf_change_cb(keynode_t *key, void *data)
301 {
302         setting_main_appdata *ad = data;
303         retm_if(!data, "Invalid argument: data is NULL");
304
305         Setting_GenGroupItem_Data *item_to_update = NULL;
306         char *vconf_name = vconf_keynode_get_name(key);
307         SETTING_TRACE("the value of [ %s ] just changed", vconf_name);
308         int i = 0;
309
310         if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_FLIGHT_MODE)) {
311                 int flightmode = 0;
312                 vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &flightmode);
313                 /*Flight mode is ON : Network menu dimmed */
314                 SETTING_TRACE("vconf flight [%d]", flightmode);
315                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
316                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_Network], flightmode);
317                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_PM], flightmode);
318                         item_to_update = ad->gl_data_item[i][GL_FlightMode];
319                         if (item_to_update) {
320                                 item_to_update->chk_status = flightmode;
321                                 const char *tmp = item_to_update->l_swallow_path;
322                                 SETTING_TRACE("status:%d", flightmode);
323                                 if (!flightmode) {
324                                         item_to_update->l_swallow_path = (char *)g_strdup(SETTING_ICON_PATH_CFG"settings_flightoff1.png");
325                                 } else {
326                                         item_to_update->l_swallow_path = (char *)g_strdup(SETTING_ICON_PATH_CFG"A01-1_icon_Flight_Mode.png");
327                                 }
328                                 G_FREE(tmp);
329
330                                 elm_genlist_item_fields_update(item_to_update->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
331                         }
332
333                 }
334
335                 SETTING_TRACE_END;
336                 return;
337 #if SUPPORT_NETWORK_RESTRICTION
338         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE)) {
339                 int status = 0;
340                 vconf_get_bool(VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE, &status);
341
342                 /* Update network restriction mode UI */
343                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
344                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_MobileApp], status);
345                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_WiFi], status);
346                         setting_force_update_gl_item_chk_status(ad->gl_data_item[i][GL_NetRestriction], status);
347                 }
348
349                 return;
350 #endif
351         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL)) {
352                 SETTING_TRACE_DEBUG("%s updated", vconf_name);
353                 int status = 0;
354                 vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &status);
355                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
356                         setting_force_update_gl_item_chk_status(ad->gl_data_item[i][GL_Landscape], status);
357                 }
358
359                 if (status) {
360                         int angle = elm_win_rotation_get(ad->win_main);
361                         elm_win_rotation_with_resize_set(ad->win_main, angle);
362                 } else {
363                         elm_win_rotation_with_resize_set(ad->win_main, 0);
364                 }
365                 return;
366         } else if (!safeStrCmp(vconf_name, VCONFKEY_NFC_STATE)) {
367                 SETTING_TRACE_DEBUG("%s updated", vconf_name);
368                 if (ad->nfc_timer) {
369                         ecore_timer_del(ad->nfc_timer);
370                         ad->nfc_timer = NULL;
371                 }
372
373                 int status = 0;
374                 vconf_get_bool(VCONFKEY_NFC_STATE, &status);
375
376                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
377                         item_to_update = ad->gl_data_item[i][GL_NFC];
378                         if (item_to_update) {
379                                 item_to_update->swallow_type = SWALLOW_Type_1ICON_1RADIO;
380                                 item_to_update->chk_status = status;
381                                 elm_object_item_data_set(item_to_update->item, item_to_update);
382                                 elm_genlist_item_fields_update(item_to_update->item, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
383                         }
384                 }
385         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DM_DRIVING_MODE)) {
386                 SETTING_TRACE_DEBUG("%s updated", vconf_name);
387                 /* cfg set_item_state has do the work, need to del it, or it will be a issue */
388
389                 int status = 0;
390                 vconf_get_bool(VCONFKEY_SETAPPL_DM_DRIVING_MODE, &status);
391                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
392                         item_to_update = ad->gl_data_item[i][GL_DM];
393                         setting_force_update_gl_item_chk_status(item_to_update, status);
394                 }
395         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE)) {
396 #ifndef BINARY_RELEASE_TYPE_ENG
397                 /*for user binary: need to check develop_option_state vconf value*/
398                 if (ad->sub_view[SETTING_TAB_VIEW_GENERAL]) {
399                         SETTING_TRACE("redraw Gernel Tab");
400                         evas_object_del(ad->sub_view[SETTING_TAB_VIEW_GENERAL]);
401                         ad->sub_view[SETTING_TAB_VIEW_GENERAL] = NULL;
402                 }
403                 //setting_search_genlist_update(ad);
404 #endif
405
406         }  else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ENHANCED_TOUCH)) {
407                 int status = 0;
408                 vconf_get_bool(VCONFKEY_SETAPPL_ENHANCED_TOUCH, &status);
409
410                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
411                         SETTING_TRACE("ad->gl_data_item[%d][GL_TouchSens]:%p", i, ad->gl_data_item[i][GL_TouchSens]);
412                         item_to_update = ad->gl_data_item[i][GL_TouchSens];
413                         setting_force_update_gl_item_chk_status(item_to_update, status);
414                 }
415         }
416 }
417
418 /**
419 * the event process when int VCONFS changes
420 * @todo code clean - it has big if-else structure
421 */
422 static void setting_int_vconf_change_cb(keynode_t *key, void *data)
423 {
424         setting_main_appdata *ad = data;
425         retm_if(!data, "Invalid argument: data is NULL");
426
427         int status = vconf_keynode_get_int(key);
428         char *vconf_name = vconf_keynode_get_name(key);
429         SETTING_TRACE("Enter %s(%s=%d)", __FUNCTION__, vconf_name, status);
430
431         Setting_GenGroupItem_Data *item_to_update = NULL;
432         int i = 0;
433         if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
434                 /* do handling in case of VCONFKEY_WIFI_STATE */
435                 SETTING_TRACE_DEBUG("%s updated", vconf_name);
436                 SETTING_TRACE("status:%d", status);
437                 int on_off_state = EINA_FALSE;
438                 switch (status) {
439                         case VCONFKEY_WIFI_OFF:
440                                 on_off_state = EINA_FALSE;
441                                 break;
442
443                         case VCONFKEY_WIFI_UNCONNECTED: {
444                                         /*item_to_update->chk_status = EINA_FALSE; */
445                                         /*item_to_update->swallow_type = SWALLOW_Type_1ICON_1PROCESS; */
446                                         /*elm_object_item_data_set(item_to_update->item, item_to_update); */
447                                         /*elm_genlist_item_update(item_to_update->item); */
448                                         /*return; */
449                                         bool last_state = FALSE;
450                                         int r = preference_get_boolean(WIFI_LAST_ON_OFF_STATE, &last_state);
451                                         if (0 != r) {
452                                                 SETTING_TRACE("ERROR, r:%d", r);
453                                         }
454                                         char *ap_name = vconf_get_str(VCONFKEY_WIFI_CONNECTED_AP_NAME);
455                                         SETTING_TRACE("Connect AP:%s", ap_name);
456                                         if (last_state) {
457                                                 /*on -> off */
458                                                 SETTING_TRACE("on -> off");
459                                                 if (isEmptyStr(ap_name)) {
460                                                         if (OP_WIFI_TURNING_ON == ad->wifi_op
461                                                             || OP_WIFI_TURNING_OFF == ad->wifi_op) {
462                                                                 SETTING_TRACE("Operating in Setting(ad->wifi_op:%d)", ad->wifi_op);
463                                                                 /*ad->wifi_op = OP_WIFI_TURNING_INVALID; */
464                                                                 /*on_off_state = EINA_FALSE; */
465                                                                 return;
466                                                         } else {
467                                                                 SETTING_TRACE("Operating in Other App");
468                                                                 return;
469                                                         }
470                                                 } else {
471                                                         on_off_state = EINA_FALSE;
472                                                 }
473                                         } else {
474                                                 /*off -> on */
475                                                 SETTING_TRACE("off -> on");
476                                                 on_off_state = EINA_TRUE;
477                                         }
478                                         break;
479                                 }
480                         case VCONFKEY_WIFI_CONNECTED:
481                         case VCONFKEY_WIFI_TRANSFER:
482
483                                 on_off_state = EINA_TRUE;
484                                 break;
485                         default:
486                                 SETTING_TRACE_ERROR("Invalid wifi status!");
487                                 return;
488                 }
489                 ad->wifi_op = OP_WIFI_TURNING_INVALID;
490                 if (ad->wifi_timer) {
491                         ecore_timer_del(ad->wifi_timer);
492                         ad->wifi_timer = NULL;
493                 }
494
495                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
496                         item_to_update = ad->gl_data_item[i][GL_WiFi];
497                         if (item_to_update) {
498
499                                 item_to_update->chk_status = on_off_state;
500                                 item_to_update->swallow_type = SWALLOW_Type_1ICON_1RADIO;
501                                 elm_object_item_data_set(item_to_update->item, item_to_update);
502                                 elm_genlist_item_update(item_to_update->item);
503                         }
504                 }
505                 preference_set_boolean(WIFI_LAST_ON_OFF_STATE, on_off_state);
506         } else if (!safeStrCmp(vconf_name, VCONFKEY_CALL_STATE)) {
507                 /* do handling in case of VCONFKEY_CALL_STATE */
508                 /*In call situation : Wi-fi / Tethering / Network menu dimmed */
509                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
510                         status = (VCONFKEY_CALL_OFF != status);
511                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_WiFi], status);
512                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_MobileApp], status);
513                 }
514
515         } else if (!safeStrCmp(vconf_name, VCONFKEY_BT_STATUS)) {
516                 /* do handling in case of VCONFKEY_BT_STATUS */
517                 SETTING_TRACE_DEBUG("%s updated", vconf_name);
518                 if (ad->bt_timer) {
519                         ecore_timer_del(ad->bt_timer);
520                         ad->bt_timer = NULL;
521                 }
522
523                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
524                         item_to_update = ad->gl_data_item[i][GL_BT];
525                         if (item_to_update) {
526                                 item_to_update->swallow_type = SWALLOW_Type_1ICON_1RADIO;
527                                 item_to_update->chk_status = status;
528                                 elm_object_item_data_set(item_to_update->item, item_to_update);
529                                 elm_genlist_item_fields_update(item_to_update->item, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
530                         }
531                 }
532
533         } else if (!safeStrCmp(vconf_name, VCONFKEY_MOBILE_HOTSPOT_MODE)) {
534         } else if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_BATTERY_STATUS_LOW)) {
535                 /* do handling in case of VCONFKEY_SYSMAN_BATTERY_STATUS_LOW */
536                 status  = (status <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW);
537                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
538                         setting_genlist_item_disabled_set(ad->gl_data_item[i][GL_Bright], status);
539                 }
540
541         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT)) {
542                 /* do handling in case of VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT */
543                 /*update directly */
544                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
545                         item_to_update = ad->gl_data_item[i][GL_Bright];
546                         if (item_to_update) {
547                                 G_FREE(item_to_update->sub_desc);
548                                 item_to_update->sub_desc = (char *)g_strdup(get_brightness_mode_str());
549                                 elm_object_item_data_set(item_to_update->item, item_to_update);
550                                 elm_genlist_item_update(item_to_update->item);
551                         }
552                 }
553         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL)) {
554                 /*update directly */
555                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
556                         item_to_update = ad->gl_data_item[i][GL_Backlight];
557                         if (item_to_update) {
558                                 char backlight_time_str[MAX_DISPLAY_NAME_LEN_ON_UI];
559                                 if (status == 0) {
560                                         snprintf(backlight_time_str, sizeof(backlight_time_str), "%s",
561                                                  _("IDS_ST_BODY_ALWAYS_ON"));
562                                 } else if (status == 60) {
563                                         snprintf(backlight_time_str, sizeof(backlight_time_str), "%s",
564                                                  _("IDS_ST_BODY_1MINUTE"));
565                                 } else if (status > 60) {
566                                         snprintf(backlight_time_str, sizeof(backlight_time_str),
567                                                  "%d %s", status / 60, (char *)(_("IDS_CLD_OPT_MINUTES_LC_ABB")));
568                                 } else {
569                                         snprintf(backlight_time_str, sizeof(backlight_time_str),
570                                                  "%d %s", status, (char *)(_("IDS_ST_BODY_SECONDS")));
571                                 }
572                                 SETTING_TRACE("backlight_time_str:%s", backlight_time_str);
573                                 G_FREE(item_to_update->sub_desc);
574                                 item_to_update->sub_desc = (char *)g_strdup(backlight_time_str);
575                                 elm_object_item_data_set(item_to_update->item, item_to_update);
576                                 elm_genlist_item_update(item_to_update->item);
577                         }
578                 }
579         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
580
581                 /* do nothing */
582
583         } else if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_BATTERY_CAPACITY)) {
584         } else {
585                 SETTING_TRACE_ERROR("vconf_name is bad[%s]", vconf_name);
586         }
587
588         return;
589 }
590
591
592 /**
593 * the event process when string VCONFS changes
594 */
595 static void setting_string_vconf_change_cb(keynode_t *key, void *data)
596 {
597         setting_main_appdata *ad = data;
598         retm_if(!data, "Invalid argument: data is NULL");
599
600         char *value = vconf_keynode_get_str(key);
601         char *vconf_name = vconf_keynode_get_name(key);
602         SETTING_TRACE("Enter %s(%s=%s)", __FUNCTION__, vconf_name, value);
603
604         if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_CONNECTED_AP_NAME)) {
605         } /* vconf_name == VCONFKEY_WIFI_CONNECTED_AP_NAME */
606         else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SCREENMODE_SELNAME)) {
607                 int i;
608                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
609                         Setting_GenGroupItem_Data *item_to_update = ad->gl_data_item[i][GL_Screenmode];
610                         if (item_to_update) {
611                                 char *tmp = item_to_update->sub_desc;
612                                 item_to_update->sub_desc = get_pa_screen_mode_str();
613
614                                 SETTING_TRACE("item_to_update->sub_desc:%s", item_to_update->sub_desc);
615                                 elm_object_item_data_set(item_to_update->item, item_to_update);
616                                 elm_genlist_item_update(item_to_update->item);
617                                 G_FREE(tmp);
618                         }
619                 }
620         } else if (!safeStrCmp(vconf_name, VCONFKEY_BGSET)
621                    || !safeStrCmp(vconf_name, VCONFKEY_IDLE_LOCK_BGSET)) {
622         }
623 }
624
625 /**
626 * The function is called to create Setting view widgets
627 */
628 static bool setting_main_app_create(void *data)
629 {
630         SETTING_TRACE_BEGIN;
631         LAUNCH_SETTING_IN();
632         SETTING_TRACE_DEBUG("[TIME] 3. it taked %d msec from main to setting_main_app_create ", appcore_measure_time());
633         appcore_measure_start();
634
635         /*elm_config_preferred_engine_set("opengl_x11"); */
636         //ug_create_cb(setting_ug_create_cb, NULL);
637
638 #ifdef TIZEN_BUILD_TARGET
639         SETTING_TRACE_DEBUG(" ------------------------> TIZEN_BUILD_TARGET is ON");
640 #endif
641
642 #ifdef TIZEN_BUILD_EMULATOR
643         SETTING_TRACE_DEBUG(" ------------------------> TIZEN_BUILD_EMULATOR is ON");
644 #endif
645
646 #if SUPPORT_DRI
647         setenv("EVAS_DRI_SWAPBUF", "1", 1);
648 #endif
649
650         setting_main_appdata *ad = data;
651         /* regitering sigterm */
652         if (signal(SIGTERM, termination_handler) == SIG_IGN) {
653                 signal(SIGTERM, SIG_IGN);
654         }
655
656         app_event_handler_h handlers[5] = {NULL, };
657         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, setting_main_low_battery_cb, ad);
658         ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, setting_main_lang_changed_cb, ad);
659         ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, setting_main_region_changed_cb, ad);
660         ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL);    /* no callback */
661
662
663 #if 0
664         app_control_h svc;
665         app_control_create(&svc);
666         /*app_control_create_request(b, &svc); */
667         /*ad->is_searchmode = setting_main_sfinder_handler(svc, ad, NULL); */
668         app_control_destroy(svc);
669         svc = NULL;
670 #endif
671         /*--------------------------------------------------------------------------------------------- */
672         ad->data_roaming_popup = NULL;
673
674         elm_app_base_scale_set(2.4);
675
676         /* create window */
677         ad->win_main = setting_main_create_win(SETTING_PACKAGE);
678         setting_retvm_if(ad->win_main == NULL, SETTING_RETURN_FAIL, "window is null");
679         UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE);
680         ad->evas = evas_object_evas_get(ad->win_main);
681         ad->current_rotation = elm_win_rotation_get(ad->win_main);
682         SETTING_TRACE_DEBUG("ad->current_rotation:%d", ad->current_rotation);
683         if (elm_win_wm_rotation_supported_get(ad->win_main)) {
684                 int rots[4] = { 0, 90, 180, 270 };  /* rotation value that app may want */
685                 elm_win_wm_rotation_available_rotations_set(ad->win_main, rots, 4);
686         }
687         evas_object_smart_callback_add(ad->win_main, "wm,rotation,changed", _rot_changed_cb, ad);
688
689         /* load config file */
690         int cfg_operation_ret = setting_cfg_init();
691         /*PLUGIN_INIT(ad); */
692         /*if ( ! ad->is_searchmode) */
693         /*{ */
694         elm_theme_extension_add(NULL, SETTING_THEME_EDJ_NAME);
695         elm_theme_extension_add(NULL, SETTING_NEWUX_EDJ_NAME);
696         elm_theme_extension_add(NULL, SETTING_GENLIST_EDJ_NAME);
697         elm_theme_extension_add(NULL, SETTING_NEW_GENLIST_EDJ_NAME);
698         elm_theme_extension_add(NULL, SETTING_SLIDER_EDJ_NAME);
699         /*} */
700
701         elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW);
702         elm_win_indicator_opacity_set(ad->win_main, ELM_WIN_INDICATOR_OPAQUE);
703
704         evas_object_show(ad->win_main);
705
706         g_main_ad = ad;
707         setting_view_create(&setting_view_main, ad);
708
709         /* error handling */
710         if (Cfg_Error_Type_Sucess != cfg_operation_ret) {
711                 SETTING_TRACE_ERROR("cfg_operation_ret: %d", cfg_operation_ret);
712                 const char *notifyStr = NULL;
713                 switch (cfg_operation_ret) {
714
715                         case Cfg_Error_Type_CreateCfg_Failed: {
716                                         notifyStr = _("failed to create config file, <br>re-install org.tizen.setting please");
717                                         break;
718                                 }
719                         case Cfg_Error_Type_Mkdir_Failed: {
720                                         notifyStr = _("file system missed<br>/opt/usr/data/setting, <br>re-install org.tizen.setting please");
721                                         break;
722                                 }
723                         case Cfg_Error_Type_RemoveCfg_Failed: {
724                                         notifyStr = _("config file size 0 byte<br>and failed to re-create it.<br>try to startup the app again");
725                                         break;
726                                 }
727                         case Cfg_Error_Type_ReadCfg_Failed: {
728                                         notifyStr = _("failed to read config file, <br>try to startup the app again");
729                                         break;
730                                 }
731                         case Cfg_Error_Type_DirPermissionDenied: {
732                                         notifyStr =
733                                             _("the dir of config file permission denied");
734                                         break;
735                                 }
736                         case Cfg_Error_Type_FilePermissionDenied: {
737                                         notifyStr = _("config file permission denied");
738                                         break;
739                                 }
740                         default: {
741                                         notifyStr = _("Invalid Result, try to startup the app again");
742                                         break;
743                                 }
744                 }
745                 setting_create_popup_without_btn(ad, ad->win_main, NULL, (char *)notifyStr, NULL, 10, FALSE, FALSE);
746                 return SETTING_RETURN_FAIL;
747         }
748
749
750         SETTING_TRACE_DEBUG("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
751         appcore_measure_start();
752         LAUNCH_SETTING_OUT();
753         return true;
754 }
755
756 /**
757 * The function is called when Setting is terminated
758 */
759 static void setting_main_app_terminate(void *data)
760 {
761         SETTING_TRACE_BEGIN;
762         setting_main_appdata *ad = data;
763         if (ad->account_subscribe_handle) {
764                 (void)account_unsubscribe_notification(ad->account_subscribe_handle);
765         }
766         vconf_set_bool(VCONFKEY_SETAPPL_ROTATE_HOLD_BOOL, FALSE);
767         evas_object_smart_callback_del(ad->win_main, "wm,rotation,changed", _rot_changed_cb);
768
769         /*PLUGIN_FINI; */
770         setting_cfg_exit();
771         clear_system_service_data();
772
773         ug_destroy_all();
774         ad->ug = NULL;
775
776         //ug_create_cb(NULL , NULL);
777
778         SETTING_TRACE_DEBUG("%s*** SETTING APPLICATION CLOSED ***%s", SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
779         DEREGISTER_VCONFS(ad->listened_list);
780
781
782 #if SUPPORT_LCD_TIMEOUT_KEEPING
783         /* once Setting is not running, LCD_TIMEOUT must be backuped */
784         int back_value = 0;
785         vconf_get_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, &back_value);
786         vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, back_value);
787 #endif
788         setting_view_destroy(&setting_view_main, ad);
789
790         SETTING_TRACE_DEBUG("!!! After setting_view_destroy");
791         if (ad->win_main) {
792                 evas_object_del(ad->win_main);
793                 ad->win_main = NULL;
794         }
795
796         if (ad->b) {
797                 bundle_free(ad->b);
798                 ad->b = NULL;
799         }
800
801         SETTING_TRACE_END;
802         return;
803 }
804
805 /**
806 * The function is called when Setting begins run in background from forground
807 */
808 static void setting_main_app_pause(void *data)
809 {
810         SETTING_TRACE_BEGIN;
811         setting_main_appdata *ad = data;
812         if (ad->ug) {
813                 ug_pause();
814         }
815
816 #if SUPPORT_LCD_TIMEOUT_KEEPING
817         /* once Setting is running in background, LCD_TIMEOUT must be backuped */
818         int back_value = 0;
819         vconf_get_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, &back_value);
820         vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, back_value);
821 #endif
822
823 }
824
825 /**
826 * The function is called when Setting begins run in forground from background
827 */
828 static void setting_main_app_resume(void *data)
829 {
830         SETTING_TRACE_BEGIN;
831         setting_main_appdata *ad = data;
832
833 #if SUPPORT_LCD_TIMEOUT_KEEPING
834         /* once Setting is running in foreground, LCD_TIMEOUT must be reset to 600 */
835         vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 600);
836 #endif
837         _rot_changed_cb(ad, ad->win_main, NULL);/*to fix P131121-02103 */
838
839         if (ad->is_searchmode % 10 == Cfg_Item_AppLauncher_Node) {
840                 /* app-launching exit */
841                 elm_exit();
842         }
843
844         if (!(ad->isInUGMode && ad->ug)) {      /* top-level view is not on UG */
845                 SETTING_TRACE("update main genlist in resuming app without UG");
846                 Eina_Bool is_freezed = evas_object_freeze_events_get(ad->navibar_main);
847                 SETTING_TRACE_DEBUG("is_freezed : %d", is_freezed);
848                 if (is_freezed) {
849                         evas_object_freeze_events_set(ad->navibar_main, EINA_FALSE);
850                 }
851
852                 /* update personal mode toggle */
853                 Setting_GenGroupItem_Data *item_to_update;
854                 int status = 0;
855                 vconf_get_bool(VCONFKEY_SETAPPL_PERSONAL_MODE_STATUS_BOOL, &status);
856                 int i;
857                 for (i = VIEW_All_List; i < VIEW_Max; i++) {
858                         item_to_update = ad->gl_data_item[i][GL_PersonalPage];
859                         setting_force_update_gl_item_chk_status(item_to_update, status);
860                 }
861         } else if (ad->ug) {
862                 ug_resume();
863         }
864 }
865
866 /**
867  * The function is called by app-fwk after app_create. It always do the process which cost much time.
868  */
869 static void setting_main_app_reset(app_control_h service, void *data)
870 {
871         SETTING_TRACE_BEGIN;
872         setting_main_appdata *ad = data;
873
874         if (is_searchmode_app(ad->is_searchmode)) {
875                 evas_object_hide(ad->view_layout);
876         } else {
877                 evas_object_show(ad->view_layout);
878         }
879         vconf_callback_fn cb = NULL;
880
881         cb = setting_int_vconf_change_cb;
882         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_BT_STATUS, cb, data);
883         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_WIFI_STATE, cb, ad);
884
885         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, cb, data);
886         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, cb, data);
887         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, cb, data);
888         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SYSMAN_BATTERY_CAPACITY, cb, data);
889
890         cb = setting_string_vconf_change_cb;
891         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_WIFI_CONNECTED_AP_NAME, cb, ad);
892         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_SCREENMODE_SELNAME, cb, ad);
893         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_BGSET, cb, ad);
894         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_IDLE_LOCK_BGSET, cb, ad);
895
896         cb = setting_other_vconf_change_cb;
897         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_USB_MODE_INT, cb, ad);
898         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, cb, ad);
899         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_TELEPHONY_FLIGHT_MODE, cb, ad);
900 #if SUPPORT_NETWORK_RESTRICTION
901         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE, cb, ad);
902 #endif
903         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, cb, ad);
904         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, cb, ad);
905 #ifndef BINARY_RELEASE_TYPE_ENG
906         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE, cb, ad);
907 #endif
908         REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_ENHANCED_TOUCH, cb, ad);
909         /*---------------------------------------------------------------------------------- */
910
911         /*---------------------------------------------------------------------------------- */
912
913         if (ad->win_main) {
914                 elm_win_activate(ad->win_main);
915         }
916         int flight_mode = 0;
917         vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &flight_mode);
918         if (flight_mode) {
919                 if (ad->data_network) setting_disable_genlist_item(ad->data_network->item);
920                 if (ad->data_powersaving) setting_disable_genlist_item(ad->data_powersaving->item);
921         }
922 }
923
924 EXPORT_PUBLIC
925 int main(int argc, char *argv[])
926 {
927         int r = 0;
928         setting_main_appdata ad;
929
930         SETTING_TRACE_DEBUG("[TIME] 1. aul_launch -> main :: Setting main : %d msec ", appcore_measure_time_from("APP_START_TIME"));
931         appcore_measure_start();
932
933
934         ui_app_lifecycle_callback_s ops = {
935                 .create = setting_main_app_create,
936                 .terminate = setting_main_app_terminate,
937                 .pause = setting_main_app_pause,
938                 .resume = setting_main_app_resume,
939                 .app_control = setting_main_app_reset,
940         };
941         memset(&ad, 0x00, sizeof(setting_main_appdata));
942
943         bundle *b = NULL;
944         b = bundle_import_from_argv(argc, argv);
945         ad.b = b;
946
947         SETTING_TRACE_DEBUG("[TIME] 2. main : %d msec ", appcore_measure_time());
948         appcore_measure_start();
949         r = ui_app_main(argc, argv, &ops, &ad);
950         retv_if(r == -1, -1);
951
952         return 0;
953 }