3 * * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <sound_manager.h>
24 #include <appcore-common.h>
27 #include <app_preference.h>
29 #include "setting-helper.h"
30 #include "setting-main.h"
31 #include <setting-cfg.h>
33 #include <setting-common-search.h>
34 #include <elm_object.h>
38 #include <system_settings.h>
39 #include <bundle_internal.h>
41 #define KEY_END "XF86Stop"
42 /*#define SUPPORT_UG_MESSAGE */
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
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);
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);
60 setting_main_appdata *g_main_ad;
62 void termination_handler(int signum)
65 /* do something for signal handling */
66 /*SETTING_TRACE_DEBUG(">>>>>>>>>>>>>>>>> SIGTERM >>>>>>>>>>>>>>> SETTING "); */
72 #if LOW_BATTERY_DO_NOTHING
74 /* in case of low battery, don't terminate itself.*/
77 * The event process when battery becomes low.
79 static void setting_main_low_battery_cb(app_event_info_h event_info, void *data)
82 retm_if(!data, "Invalid argument: data is NULL");
83 setting_main_appdata *ad = data;
86 ug_send_event(UG_EVENT_LOW_BATTERY);
92 #if SUPPORT_APP_ROATION
93 static void _rot_changed_cb(void *data, Evas_Object *obj, void *event_info)
96 setting_main_appdata *ad = (setting_main_appdata *)data;
97 if (ad == NULL || ad->win_main == NULL) {
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;
109 case APP_DEVICE_ORIENTATION_180:
110 event = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN;
112 case APP_DEVICE_ORIENTATION_270:
113 event = UG_EVENT_ROTATE_LANDSCAPE;
115 case APP_DEVICE_ORIENTATION_90:
116 event = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN;
121 SETTING_TRACE_DEBUG("diff:%d", elm_win_rotation_get(ad->win_main) - ad->current_rotation);
123 if (change_ang != ad->current_rotation) {
124 int diff = change_ang - ad->current_rotation;
129 * @todo if app didn't launch UG, is the call required to invoke?
131 ug_send_event(event);
135 ad->current_rotation = change_ang;
142 * The event process when region is changes.
144 static void setting_main_region_changed_cb(app_event_info_h event_info, void *data)
146 retm_if(!data, "Invalid argument: data is NULL");
147 setting_main_appdata *ad = data;
150 ug_send_event(UG_EVENT_REGION_CHANGE);
155 * The event process when win object is destroyed
157 static void setting_main_del_win(void *data, Evas_Object *obj, void *event)
162 void profile_changed_cb(void *data, Evas_Object *obj, void *event)
164 const char *profile = elm_config_profile_get();
166 if (strcmp(profile, "desktop") == 0) {
167 elm_win_indicator_mode_set(obj, ELM_WIN_INDICATOR_HIDE);
169 elm_win_indicator_mode_set(obj, ELM_WIN_INDICATOR_SHOW);
174 * To create a win object, the win is shared between the App and all its UGs
176 static Evas_Object *setting_main_create_win(const char *name)
183 eo = (Evas_Object *) elm_win_add(NULL, name, ELM_WIN_BASIC);
185 eo = elm_win_util_standard_add(name, name);
187 /* elm_win_util_standard_add creates bg inside */
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);
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);
208 LAUNCH_SETTING_OUT();
214 * exceptional process, reset the env vars by Setting vconf VCONFKEY_LANGSET
216 static void setting_main_lang_changed_cb(app_event_info_h event_info, void *data)
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;
229 KeyStr_MotionControl,
230 "IDS_ST_BODY_GENERAL",
231 KeyStr_DownloadedAPPs
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]));
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());
246 if (ad->data_backlight) {
247 tmp = ad->data_backlight->sub_desc;
248 ad->data_backlight->sub_desc = get_pa_backlight_time_str();
251 if (ad->data_screenmode) {
252 tmp = ad->data_screenmode->sub_desc;
253 ad->data_screenmode->sub_desc = get_pa_screen_mode_str();
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);
270 /* update all tabs */
271 for (i = SC_All_List; i < SC_Max; 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);
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);
285 if (ad->isInUGMode && ad->ug) {
286 Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
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);
292 ug_send_event(UG_EVENT_LANG_CHANGE);
298 * the event process when other VCONFS changes
300 static void setting_other_vconf_change_cb(keynode_t *key, void *data)
302 setting_main_appdata *ad = data;
303 retm_if(!data, "Invalid argument: data is NULL");
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);
310 if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_FLIGHT_MODE)) {
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);
324 item_to_update->l_swallow_path = (char *)g_strdup(SETTING_ICON_PATH_CFG"settings_flightoff1.png");
326 item_to_update->l_swallow_path = (char *)g_strdup(SETTING_ICON_PATH_CFG"A01-1_icon_Flight_Mode.png");
330 elm_genlist_item_fields_update(item_to_update->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
337 #if SUPPORT_NETWORK_RESTRICTION
338 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE)) {
340 vconf_get_bool(VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE, &status);
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);
351 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL)) {
352 SETTING_TRACE_DEBUG("%s updated", vconf_name);
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);
360 int angle = elm_win_rotation_get(ad->win_main);
361 elm_win_rotation_with_resize_set(ad->win_main, angle);
363 elm_win_rotation_with_resize_set(ad->win_main, 0);
366 } else if (!safeStrCmp(vconf_name, VCONFKEY_NFC_STATE)) {
367 SETTING_TRACE_DEBUG("%s updated", vconf_name);
369 ecore_timer_del(ad->nfc_timer);
370 ad->nfc_timer = NULL;
374 vconf_get_bool(VCONFKEY_NFC_STATE, &status);
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);
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 */
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);
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;
403 //setting_search_genlist_update(ad);
406 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ENHANCED_TOUCH)) {
408 vconf_get_bool(VCONFKEY_SETAPPL_ENHANCED_TOUCH, &status);
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);
419 * the event process when int VCONFS changes
420 * @todo code clean - it has big if-else structure
422 static void setting_int_vconf_change_cb(keynode_t *key, void *data)
424 setting_main_appdata *ad = data;
425 retm_if(!data, "Invalid argument: data is NULL");
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);
431 Setting_GenGroupItem_Data *item_to_update = NULL;
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;
439 case VCONFKEY_WIFI_OFF:
440 on_off_state = EINA_FALSE;
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); */
449 bool last_state = FALSE;
450 int r = preference_get_boolean(WIFI_LAST_ON_OFF_STATE, &last_state);
452 SETTING_TRACE("ERROR, r:%d", r);
454 char *ap_name = vconf_get_str(VCONFKEY_WIFI_CONNECTED_AP_NAME);
455 SETTING_TRACE("Connect AP:%s", ap_name);
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; */
467 SETTING_TRACE("Operating in Other App");
471 on_off_state = EINA_FALSE;
475 SETTING_TRACE("off -> on");
476 on_off_state = EINA_TRUE;
480 case VCONFKEY_WIFI_CONNECTED:
481 case VCONFKEY_WIFI_TRANSFER:
483 on_off_state = EINA_TRUE;
486 SETTING_TRACE_ERROR("Invalid wifi status!");
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;
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) {
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);
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);
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);
519 ecore_timer_del(ad->bt_timer);
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);
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);
541 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT)) {
542 /* do handling in case of VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT */
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);
553 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL)) {
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];
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")));
569 snprintf(backlight_time_str, sizeof(backlight_time_str),
570 "%d %s", status, (char *)(_("IDS_ST_BODY_SECONDS")));
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);
579 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
583 } else if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_BATTERY_CAPACITY)) {
585 SETTING_TRACE_ERROR("vconf_name is bad[%s]", vconf_name);
593 * the event process when string VCONFS changes
595 static void setting_string_vconf_change_cb(keynode_t *key, void *data)
597 setting_main_appdata *ad = data;
598 retm_if(!data, "Invalid argument: data is NULL");
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);
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)) {
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();
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);
620 } else if (!safeStrCmp(vconf_name, VCONFKEY_BGSET)
621 || !safeStrCmp(vconf_name, VCONFKEY_IDLE_LOCK_BGSET)) {
626 * The function is called to create Setting view widgets
628 static bool setting_main_app_create(void *data)
632 SETTING_TRACE_DEBUG("[TIME] 3. it taked %d msec from main to setting_main_app_create ", appcore_measure_time());
633 appcore_measure_start();
635 /*elm_config_preferred_engine_set("opengl_x11"); */
636 //ug_create_cb(setting_ug_create_cb, NULL);
638 #ifdef TIZEN_BUILD_TARGET
639 SETTING_TRACE_DEBUG(" ------------------------> TIZEN_BUILD_TARGET is ON");
642 #ifdef TIZEN_BUILD_EMULATOR
643 SETTING_TRACE_DEBUG(" ------------------------> TIZEN_BUILD_EMULATOR is ON");
647 setenv("EVAS_DRI_SWAPBUF", "1", 1);
650 setting_main_appdata *ad = data;
651 /* regitering sigterm */
652 if (signal(SIGTERM, termination_handler) == SIG_IGN) {
653 signal(SIGTERM, SIG_IGN);
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 */
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);
671 /*--------------------------------------------------------------------------------------------- */
672 ad->data_roaming_popup = NULL;
674 elm_app_base_scale_set(2.4);
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);
687 evas_object_smart_callback_add(ad->win_main, "wm,rotation,changed", _rot_changed_cb, ad);
689 /* load config file */
690 int cfg_operation_ret = setting_cfg_init();
691 /*PLUGIN_INIT(ad); */
692 /*if ( ! ad->is_searchmode) */
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);
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);
704 evas_object_show(ad->win_main);
707 setting_view_create(&setting_view_main, ad);
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) {
715 case Cfg_Error_Type_CreateCfg_Failed: {
716 notifyStr = _("failed to create config file, <br>re-install org.tizen.setting please");
719 case Cfg_Error_Type_Mkdir_Failed: {
720 notifyStr = _("file system missed<br>/opt/usr/data/setting, <br>re-install org.tizen.setting please");
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");
727 case Cfg_Error_Type_ReadCfg_Failed: {
728 notifyStr = _("failed to read config file, <br>try to startup the app again");
731 case Cfg_Error_Type_DirPermissionDenied: {
733 _("the dir of config file permission denied");
736 case Cfg_Error_Type_FilePermissionDenied: {
737 notifyStr = _("config file permission denied");
741 notifyStr = _("Invalid Result, try to startup the app again");
745 setting_create_popup_without_btn(ad, ad->win_main, NULL, (char *)notifyStr, NULL, 10, FALSE, FALSE);
746 return SETTING_RETURN_FAIL;
750 SETTING_TRACE_DEBUG("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
751 appcore_measure_start();
752 LAUNCH_SETTING_OUT();
757 * The function is called when Setting is terminated
759 static void setting_main_app_terminate(void *data)
762 setting_main_appdata *ad = data;
763 if (ad->account_subscribe_handle) {
764 (void)account_unsubscribe_notification(ad->account_subscribe_handle);
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);
771 clear_system_service_data();
776 //ug_create_cb(NULL , NULL);
778 SETTING_TRACE_DEBUG("%s*** SETTING APPLICATION CLOSED ***%s", SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
779 DEREGISTER_VCONFS(ad->listened_list);
782 #if SUPPORT_LCD_TIMEOUT_KEEPING
783 /* once Setting is not running, LCD_TIMEOUT must be backuped */
785 vconf_get_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, &back_value);
786 vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, back_value);
788 setting_view_destroy(&setting_view_main, ad);
790 SETTING_TRACE_DEBUG("!!! After setting_view_destroy");
792 evas_object_del(ad->win_main);
806 * The function is called when Setting begins run in background from forground
808 static void setting_main_app_pause(void *data)
811 setting_main_appdata *ad = data;
816 #if SUPPORT_LCD_TIMEOUT_KEEPING
817 /* once Setting is running in background, LCD_TIMEOUT must be backuped */
819 vconf_get_int(VCONFKEY_LCD_TIMEOUT_NORMAL_BACKUP, &back_value);
820 vconf_set_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, back_value);
826 * The function is called when Setting begins run in forground from background
828 static void setting_main_app_resume(void *data)
831 setting_main_appdata *ad = data;
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);
837 _rot_changed_cb(ad, ad->win_main, NULL);/*to fix P131121-02103 */
839 if (ad->is_searchmode % 10 == Cfg_Item_AppLauncher_Node) {
840 /* app-launching exit */
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);
849 evas_object_freeze_events_set(ad->navibar_main, EINA_FALSE);
852 /* update personal mode toggle */
853 Setting_GenGroupItem_Data *item_to_update;
855 vconf_get_bool(VCONFKEY_SETAPPL_PERSONAL_MODE_STATUS_BOOL, &status);
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);
867 * The function is called by app-fwk after app_create. It always do the process which cost much time.
869 static void setting_main_app_reset(app_control_h service, void *data)
872 setting_main_appdata *ad = data;
874 if (is_searchmode_app(ad->is_searchmode)) {
875 evas_object_hide(ad->view_layout);
877 evas_object_show(ad->view_layout);
879 vconf_callback_fn cb = NULL;
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);
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);
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);
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);
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);
908 REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_ENHANCED_TOUCH, cb, ad);
909 /*---------------------------------------------------------------------------------- */
911 /*---------------------------------------------------------------------------------- */
914 elm_win_activate(ad->win_main);
917 vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &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);
925 int main(int argc, char *argv[])
928 setting_main_appdata ad;
930 SETTING_TRACE_DEBUG("[TIME] 1. aul_launch -> main :: Setting main : %d msec ", appcore_measure_time_from("APP_START_TIME"));
931 appcore_measure_start();
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,
941 memset(&ad, 0x00, sizeof(setting_main_appdata));
944 b = bundle_import_from_argv(argc, argv);
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);