2 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <Ecore_X.h> /* ecore_x_window_size_get */
20 #include <utilX.h> /* KEY_END */
22 #include <vconf-keys.h>
24 #include <appcore-efl.h>
26 #include "setting-sound.h"
27 #include "setting-volume.h"
28 #include "setting-clock.h"
29 #include "setting-homescreen.h"
30 #include "setting-info.h"
31 #include "setting-bluetooth.h"
32 #include "setting-motion.h"
33 #include "setting-display.h"
34 #include "setting-language.h"
35 #include "setting-reset.h"
36 #include "setting-battery.h"
37 #include "setting-privacy.h"
38 #include "setting-double.h"
39 #include "setting-safety.h"
40 #include "setting-notification.h"
41 #include "setting-profile.h"
43 #include "setting-common-sound.h"
45 #include "setting_control_bt.h"
46 #include "setting_view_toast.h"
47 #include "setting_indicator_util.h"
50 #ifndef FEATURE_SETTING_SDK
51 #define LANGUAGE_MENU_INDEX 10
53 #define LANGUAGE_MENU_INDEX 5
57 #define LANGUAGE_ICON_DISABLED "b_settings_language_disabled.png"
58 #define LANGUAGE_ICON_ENABLED "b_settings_language.png"
60 static struct _menu_item setting_emergency_menu_its[] = {
61 #ifdef FEATURE_SETTING_EMUL
62 { "IDS_ST_BUTTON_CLOCK", "b_settings_change_clock.png", clock_cb },
64 { "IDS_ST_OPT_SOUND_ABB2", "b_settings_volume.png", sound_cb },
65 { "IDS_ST_MBODY_DISPLAY_ABB", "b_setting_display.png", display_cb },
66 #ifndef FEATURE_SETTING_EMUL
67 { "IDS_QP_BUTTON_BLUETOOTH", "b_settings_bluetooth.png", bluetooth_cb },
69 //#if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
70 #if !defined(FEATURE_SETTING_SDK)
71 { "IDS_ST_MBODY_SAFETY_ABB", "b_settings_safety.png", safety_cb },
76 static struct _menu_item setting_menu_its[] = {
77 {/*ALWAYS*/"IDS_ST_BUTTON_CLOCK", "b_settings_change_clock.png", clock_cb },
78 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
79 { "IDS_ST_BODY_WALLPAPERS", "b_setting_wallpaper.png", homescreen_cb },
80 { "IDS_ST_BUTTON_NOTIFICATIONS", "b_settings_notifications.png", notification_cb },
83 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
84 { "IDS_ST_OPT_SOUND_ABB2", "b_settings_volume.png", sound_cb },
86 {/*ALWAYS*/"IDS_ST_MBODY_DISPLAY_ABB", "b_setting_display.png", display_cb },
88 {/*ALWAYS*/"IDS_QP_BUTTON_BLUETOOTH", "b_settings_bluetooth.png", bluetooth_cb },
90 #if !defined(FEATURE_SETTING_SDK)
91 { "IDS_ST_MBODY_DOUBLE_PRESS_ABB", "b_setting_double-press.png", double_pressing_cb },
92 { "IDS_LCKSCN_BODY_PRIVACY_LOCK_ABB", "b_settings_lockscreen.png", lockscreen_cb },
93 { "IDS_HEALTH_MBODY_PROFILE", "b_settings_profile.png", profile_cb },
95 #if !defined(FEATURE_SETTING_SDK)
96 { "IDS_ST_BODY_RESET_GEAR_ABB", "b_settings_reset.png", reset_gear_cb },
98 {/*ALWAYS*/"IDS_ST_BUTTON_GEAR_INFO", "b_settings_info.png", gear_info_cb },
102 static int is_emergency;
103 static Elm_Object_Item * lang_item = NULL;
104 static bool running = false;
105 static Ecore_Timer *running_timer = NULL;
107 static Evas_Object* _create_bg(Evas_Object *parent);
108 static Evas_Object* _create_conform(Evas_Object *parent);
109 static Evas_Object* _create_layout_main(Evas_Object* parent);
110 static Evas_Object* _create_naviframe_layout(Evas_Object* parent);
111 static void _create_view_layout(appdata *ad);
112 static int init_clocksetting(appdata *ad);
115 void clock_cb(void *data, Evas_Object *obj, void *event_info)
117 Evas_Object* layout = NULL;
118 Elm_Object_Item *nf_it = NULL;
123 DBG("Setting - ad is null");
128 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
132 if (is_running_clock) {
133 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
137 initialize_clock(data);
139 //genlist = _create_clock_list(data);
140 layout = _clock_type_cb(data);
143 DBG("%s", "clock cb - layout is null");
146 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
147 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_clock_cb, ad);
148 //elm_naviframe_item_pop_cb_set(nf_it, _clear_clock_cb, ad);
149 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
151 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
152 is_running_clock = 1;
154 ad->MENU_TYPE = SETTING_CLOCK;
157 void notification_cb(void *data, Evas_Object *obj, void *event_info)
159 Evas_Object* genlist = NULL;
160 Elm_Object_Item *nf_it = NULL;
165 DBG("Setting - ad is null");
170 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
176 genlist = _create_noti_list(data);
179 DBG("%s", "notification_cb - genlist is null");
182 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
183 elm_naviframe_item_pop_cb_set(nf_it, _clear_noti_cb, ad);
184 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
186 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
188 ad->MENU_TYPE = SETTING_NOTIFICATION;
191 void homescreen_cb(void *data, Evas_Object *obj, void *event_info)
193 Evas_Object* layout = NULL;
194 Elm_Object_Item *nf_it = NULL;
199 DBG("Setting - ad is null");
204 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
208 //layout = _create_homescreen_list(data);
209 layout = create_wallpaper_list(data);
212 DBG("%s", "homescreen cb - layout is null");
215 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
216 //elm_naviframe_item_pop_cb_set(nf_it, _clear_homescreen_cb, ad);
217 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_homescreen_cb, ad);
218 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
220 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
222 ad->MENU_TYPE = SETTING_HOMESCREEN;
226 void sound_cb(void *data, Evas_Object *obj, void *event_info)
228 Evas_Object* genlist = NULL;
229 Elm_Object_Item *nf_it = NULL;
234 DBG("Setting - ad is null");
239 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
245 genlist = _create_sound_list(data);
248 DBG("%s", "sound cb - genlist is null");
251 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
252 elm_naviframe_item_pop_cb_set(nf_it, _clear_sound_cb, ad);
253 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
255 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
257 ad->MENU_TYPE = SETTING_SOUND;
260 void volume_cb(void *data, Evas_Object *obj, void *event_info)
262 Evas_Object* genlist = NULL;
263 Elm_Object_Item *nf_it = NULL;
268 DBG("Setting - ad is null");
273 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
277 _initialize_volume();
279 genlist = _create_volume_list(data);
282 DBG("%s", "volume cb - genlist is null");
285 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
286 //elm_naviframe_item_pop_cb_set(nf_it, _clear_volume_cb, ad);
287 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
289 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
291 ad->MENU_TYPE = SETTING_VOLUME;
294 void display_cb(void *data, Evas_Object *obj, void *event_info)
296 Evas_Object* genlist = NULL;
297 Elm_Object_Item *nf_it = NULL;
302 DBG("Setting - ad is null");
307 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
313 genlist = _create_display_list(data);
316 DBG("%s", "display cb - genlist is null");
319 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
320 //elm_naviframe_item_pop_cb_set(nf_it, _clear_display_cb, ad);
321 evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, _clear_display_cb, ad);
322 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
324 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
326 ad->MENU_TYPE = SETTING_DISPLAY;
329 void battery_cb(void *data, Evas_Object *obj, void *event_info)
331 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
333 Evas_Object* layout = NULL;
334 Elm_Object_Item *nf_it = NULL;
339 DBG("Setting - ad is null");
344 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
348 _initialize_battery();
349 layout = _battery_status_cb(data);
352 DBG("%s", "battery cb - layout is null");
355 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
356 //elm_naviframe_item_pop_cb_set(nf_it, _clear_battery_list_cb, ad);
357 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_battery_cb, ad);
358 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
360 ad->MENU_TYPE = SETTING_BATTERY;
363 void bluetooth_cb(void *data, Evas_Object *obj, void *event_info)
365 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
367 Evas_Object* genlist = NULL;
368 Elm_Object_Item *nf_it = NULL;
373 DBG("Setting - ad is null");
383 genlist = _create_bt_list(data);
386 DBG("%s", "bluetooth cb - genlist is null");
389 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
390 //elm_naviframe_item_pop_cb_set(nf_it, _clear_bluetooth_cb, ad);
391 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
393 ad->MENU_TYPE = SETTING_BLUETOOTH;
396 void motion_cb(void *data, Evas_Object *obj, void *event_info)
398 Evas_Object* genlist = NULL;
399 Elm_Object_Item *nf_it = NULL;
404 DBG("Setting - ad is null");
409 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
413 _initialize_motion();
414 genlist = _create_motion_list(data);
417 DBG("%s", "motion cb - genlist is null");
420 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
421 elm_naviframe_item_pop_cb_set(nf_it, _clear_motion_cb, ad);
422 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
424 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
427 void lockscreen_cb(void *data, Evas_Object *obj, void *event_info)
429 Evas_Object* layout = NULL;
430 Elm_Object_Item *nf_it = NULL;
436 DBG("Setting - ad is null");
441 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
445 layout = create_privacy_list(data);
448 DBG("%s", "lockscreen cb - genlist is null");
452 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
453 elm_naviframe_item_pop_cb_set(nf_it, clear_privacy_cb, ad);
454 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
456 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
458 ad->MENU_TYPE = SETTING_SCREEN_LOCK;
461 void double_pressing_cb(void *data, Evas_Object *obj, void *event_info)
463 Evas_Object* layout = NULL;
464 Elm_Object_Item *nf_it = NULL;
470 DBG("Setting - ad is null");
475 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
479 init_double_pressing(ad);
481 layout = create_double_app_list(data);
484 DBG("%s", "double cb - genlist is null");
488 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
489 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, clear_double_app_cb, ad);
490 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
492 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
494 ad->MENU_TYPE = SETTING_DOUBLE_PRESSING;
497 void language_cb(void *data, Evas_Object *obj, void *event_info)
499 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
501 Evas_Object* genlist = NULL;
502 Elm_Object_Item *nf_it = NULL;
507 DBG("Setting - ad is null");
512 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
516 if( is_connected_GM() )
518 DBG("Setting - language can not change!!");
521 struct _toast_data * toast = _create_toast(ad, _("IDS_ST_TPOP_CHANGE_LANGUAGE_ON_MOBILE_DEVICE"));
523 _show_toast(ad, toast);
528 _initialize_language(ad);
529 _set_launguage_update_cb(_update_main_menu_title);
531 genlist = _create_lang_list(data);
534 DBG("%s", "language cb - genlist is null");
537 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
538 elm_naviframe_item_pop_cb_set(nf_it, _clear_lang_cb, ad);
539 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
541 ad->MENU_TYPE = SETTING_LANGUAGE;
544 void safety_cb(void *data, Evas_Object *obj, void *event_info)
546 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
551 DBG("Setting - ad is null");
556 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
560 Evas_Object* layout = NULL;
561 Elm_Object_Item *nf_it = NULL;
563 layout = create_safety_list(ad);
566 DBG("%s", "safety cb - genlist is null");
570 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
571 elm_naviframe_item_pop_cb_set(nf_it, clear_safety_cb, ad);
572 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
574 ad->MENU_TYPE = SETTING_SAFETY;
577 void reset_gear_cb(void *data, Evas_Object *obj, void *event_info)
582 DBG("Setting - ad is null");
587 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
591 _reset_popup_cb(data, obj, event_info);
593 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
595 ad->MENU_TYPE = SETTING_RESET;
598 void gear_info_cb(void *data, Evas_Object *obj, void *event_info)
600 Evas_Object* genlist = NULL;
601 Elm_Object_Item *nf_it = NULL;
606 DBG("Setting - ad is null");
611 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
615 genlist = _create_info_list(data);
618 DBG("%s", "info cb - genlist is null");
621 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
622 elm_naviframe_item_pop_cb_set(nf_it, _clear_info_cb, ad);
623 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
625 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
627 ad->MENU_TYPE = SETTING_INFO;
630 static Eina_Bool _app_ctrl_timer_cb(void *data) {
633 running_timer = NULL;
634 return ECORE_CALLBACK_CANCEL;
637 void profile_cb(void *data, Evas_Object *obj, void *event_info)
643 DBG("Setting - ad is null");
648 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
653 _create_profile(data, obj, event_info);
657 ecore_timer_del(running_timer);
658 running_timer = NULL;
660 running_timer = ecore_timer_add(0.5, (Ecore_Task_Cb)_app_ctrl_timer_cb, NULL);
662 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
665 static void _quit_cb(void *data, Evas_Object *obj, void *ei)
668 //To make your application go to background,
669 //Call the elm_win_lower() instead
670 Evas_Object *win = (Evas_Object *) data;
676 static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
678 // Stop timer and task
681 ecore_timer_del(running_timer);
682 running_timer = NULL;
687 if (ad && ad->win_main)
689 elm_win_lower(ad->win_main);
695 static Evas_Object* _create_bg(Evas_Object *parent)
699 if (parent == NULL) return NULL;
701 bg = elm_bg_add(parent);
702 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
703 elm_win_resize_object_add(parent, bg);
704 evas_object_show(bg);
709 static Evas_Object* _create_conform(Evas_Object *parent)
711 Evas_Object *conform;
713 if (parent == NULL) return NULL;
715 conform = elm_conformant_add(parent);
716 evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
717 elm_win_resize_object_add(parent, conform);
718 evas_object_show(conform);
723 static Evas_Object* _create_layout_main(Evas_Object* parent)
727 if (parent == NULL) return NULL;
729 layout = elm_layout_add(parent);
733 DBG("Failed elm_layout_add.\n");
737 elm_layout_theme_set(layout, "layout", "application", "default");
738 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
739 elm_win_resize_object_add(parent, layout);
741 evas_object_show(layout);
746 static void _lang_changed(void *data)
749 if( ad && ad->MENU_TYPE == SETTING_LANGUAGE )
752 char *locale = vconf_get_str(VCONFKEY_LANGSET);
755 DBG("Setting - language is changed : %s", locale);
756 elm_language_set(locale);
757 elm_config_all_flush();
761 static void _window_resize_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
763 appdata *ad = (appdata *)data;
764 evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
767 static void init_values(appdata *ad)
774 ad->is_motion_smart_relay_on = 1;
775 ad->is_motion_wake_up_on = 1;
778 static int init_clocksetting(appdata *ad)
780 DBG("init_clocksetting() is called!");
785 ad->bg = _create_bg(ad->win_main);
787 // Conformant *** disable comform : lauching time issue ***
789 ad->conform = _create_conform(ad->win_main);
790 if (ad->conform == NULL)
794 ad->layout_main = _create_layout_main(ad->win_main);
795 if (ad->layout_main == NULL)
799 elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
802 ad->nf = _create_naviframe_layout(ad->layout_main);
805 _create_view_layout(ad);
809 int vibration_level = 0;
810 vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vibration_level);
812 DBG("Setting - vibration level : %d", vibration_level);
814 if( vibration_level == 2 ) // wrong value!!
816 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
817 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
822 static Evas_Object* _create_naviframe_layout(Evas_Object* parent)
824 Evas_Object *nf = NULL;
826 if (parent == NULL) return NULL;
828 nf = elm_naviframe_add(parent);
829 elm_object_part_content_set(parent, "elm.swallow.content", nf);
831 evas_object_show(nf);
836 static char* _gl_text_get(void *data, Evas_Object *obj, const char *part)
839 Item_Data *id = data;
840 int index = id->index;
844 if( index == LANGUAGE_MENU_INDEX ) {
845 if( is_connected_GM() ) {
846 strcpy(expression, "<font color=#515151>%s</font>");
848 strcpy(expression, "%s");
851 strcpy(expression, "%s");
855 snprintf(buf, sizeof(buf)-1, "%s", _(setting_emergency_menu_its[index].name));
857 snprintf(buf, sizeof(buf)-1, "%s", _(setting_menu_its[index].name));
862 static Evas_Object * _gl_icon_get(void *data, Evas_Object *obj, const char *part)
865 Item_Data *id = data;
866 int index = id->index;
868 if( index == LANGUAGE_MENU_INDEX ) {
869 if( is_connected_GM() ) {
870 snprintf(buf, sizeof(buf)-1, "%s", LANGUAGE_ICON_DISABLED);
872 snprintf(buf, sizeof(buf)-1, "%s", LANGUAGE_ICON_ENABLED);
876 snprintf(buf, sizeof(buf)-1, "%s", setting_emergency_menu_its[index].icon_name);
878 snprintf(buf, sizeof(buf)-1, "%s", setting_menu_its[index].icon_name);
881 Evas_Object *icon = elm_image_add(obj);
882 elm_image_file_set(icon, EDJE_PATH, buf);
883 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
884 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
885 evas_object_size_hint_min_set(icon, 52, 52);
890 static void _gl_del(void *data, Evas_Object *obj)
892 Item_Data *id = data;
897 static Evas_Object * _gl_indicator_get(void *data, Evas_Object *obj, const char *part)
899 Evas_Object *layout = NULL;
901 layout = elm_layout_add(obj);
902 elm_layout_file_set(layout, EDJE_PATH, "setting/indicator");
904 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
905 indicator_view_update(layout);
906 evas_object_show(layout);
907 DBG("indicator get!!!!!!!!");
912 static Evas_Object* _create_mainlist_winset(Evas_Object* parent, appdata* ad)
914 Evas_Object *genlist = NULL;
915 struct _menu_item *menu_its = NULL;
919 elm_theme_extension_add(NULL, EDJE_PATH);
920 Elm_Genlist_Item_Class *itc_tmp = elm_genlist_item_class_new();
921 itc_tmp->item_style = "setting_indicator";
922 itc_tmp->func.content_get = _gl_indicator_get;
923 itc_tmp->func.del = _gl_del;
925 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
926 itc->item_style = "1text.1icon";
927 itc->func.text_get = _gl_text_get;
928 itc->func.content_get = _gl_icon_get;
929 itc->func.del = _gl_del;
931 genlist = elm_genlist_add(ad->nf);
934 elm_genlist_item_class_free(itc);
937 elm_genlist_realization_mode_set(genlist, EINA_TRUE);
938 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
940 Item_Data *id_indi = calloc(sizeof(Item_Data), 1);
941 id_indi->index = idx;
942 id_indi->item = elm_genlist_item_append(
947 ELM_GENLIST_ITEM_NONE,
949 elm_genlist_item_select_mode_set(id_indi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
951 vconf_get_bool(VCONFKEY_SETAPPL_EMERGENCY_STATUS_BOOL, &is_emergency);
957 menu_its = setting_emergency_menu_its;
958 item_count = sizeof(setting_emergency_menu_its) / sizeof(struct _menu_item);
962 menu_its = setting_menu_its;
963 item_count = sizeof(setting_menu_its) / sizeof(struct _menu_item);
966 DBG("Setting - Main menu item count: %d", item_count);
968 //while (menu_its[ idx ].name != NULL) {
969 for( idx = 0; idx < item_count-1; idx++ )
971 Item_Data *id = calloc(sizeof(Item_Data), 1);
973 id->item = elm_genlist_item_append(
974 genlist, // genlist object
978 ELM_GENLIST_ITEM_NONE,
979 menu_its[ idx ].func,
983 if( !is_emergency && ( idx == LANGUAGE_MENU_INDEX ) )
985 lang_item = id->item;
991 elm_genlist_item_class_free(itc);
992 elm_genlist_item_class_free(itc_tmp);
994 ad->main_genlist = genlist;
996 indicator_set_vconf_changed_cb(ad);
1001 static void _update_main_menu_title( void * data )
1003 DBG("_update_main_menu_title() is called");
1005 appdata * ad = data;
1008 DBG("appdata is NULL");
1012 if( ad->main_genlist )
1014 elm_genlist_realized_items_update(ad->main_genlist);
1018 static void _naviframe_back_cb(void * data, Evas_Object * obj, void * event_info)
1020 appdata * ad = data;
1024 if(ad->MENU_TYPE == SETTING_BLUETOOTH)
1026 clear_bt_resource();
1028 else if(ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH)
1030 _clear_volume_resources();
1032 ad->MENU_TYPE = SETTING_VOLUME;
1034 else if(ad->MENU_TYPE == SETTING_SOUND_RINGTONE)
1038 ad->MENU_TYPE = SETTING_SOUND;
1040 else if(ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION)
1044 ad->MENU_TYPE = SETTING_SOUND;
1047 ea_naviframe_back_cb(data, obj, event_info);
1050 static void _create_view_layout(appdata *ad)
1052 Evas_Object *genlist = NULL;
1053 Evas_Object *btn = NULL;
1054 Elm_Object_Item *nf_it = NULL;
1056 if (ad == NULL) return;
1057 if (ad->nf == NULL) return;
1059 genlist = _create_mainlist_winset(ad->win_main, ad);
1060 ea_object_event_callback_add(ad->nf, EA_CALLBACK_BACK, _naviframe_back_cb, ad);
1061 ea_object_event_callback_add(ad->nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
1063 nf_it = elm_naviframe_item_push(ad->nf, NULL, btn, NULL, genlist, NULL);
1064 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1066 elm_naviframe_item_pop_cb_set(nf_it, _pop_cb, ad); // ad->win_main
1068 //register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL);
1071 static Evas_Object* create_win(const char *name)
1075 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
1079 elm_win_title_set(eo, name);
1080 elm_win_autodel_set(eo, EINA_TRUE);
1082 if (elm_win_wm_rotation_supported_get(eo)) {
1083 int rots[4] = { 0, 90, 180, 270 };
1084 elm_win_wm_rotation_available_rotations_set(eo, (const int*)(&rots), 4);
1087 evas_object_smart_callback_add(eo, "delete,request", _quit_cb, NULL);
1092 bool app_create(void *data)
1094 //DBG("[TIME] 3. it taked %d msec from main to setting_main_app_create ", appcore_measure_time());
1095 //appcore_measure_start();
1097 DBG("Setting - app_create");
1099 appdata *ad = (appdata *) data;
1102 DBG("app_create start.");
1104 ecore_x_window_size_get(ecore_x_window_root_first_get(), &ad->root_w, &ad->root_h);
1106 ad->win_main = create_win(PACKAGE);
1107 if (ad->win_main == NULL)
1110 evas_object_resize(ad->win_main, ad->root_w, ad->root_h);
1111 //evas_object_event_callback_add(ad->win_main, EVAS_CALLBACK_RESIZE, _window_resize_cb, ad);
1113 double scale = elm_config_scale_get();
1116 DBG("Setting - scale is more less than 1.0");
1117 elm_config_scale_set(1.0);
1120 ad->evas = evas_object_evas_get(ad->win_main);
1122 //appcore_set_i18n(PACKAGE, LOCALEDIR);
1123 //appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, _lang_changed, ad);
1125 locale = vconf_get_str(VCONFKEY_LANGSET);
1128 elm_language_set(locale);
1131 ad->is_first_launch = 1;
1133 init_clocksetting(ad);
1135 DBG("app_create finish.");
1137 DBG("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
1138 //appcore_measure_start();
1140 evas_object_show(ad->win_main);
1145 void app_terminate(void *data)
1147 DBG("Setting - app_terminate");
1151 indicator_unset_vconf_changed_cb();
1155 ad->alert_rdg = NULL;
1159 ad->datetime = NULL;
1161 if( ad->dt_genlist_item_of_date )
1163 ad->dt_genlist_item_of_date = NULL;
1165 if( ad->dt_genlist_item_of_time )
1167 ad->dt_genlist_item_of_time = NULL;
1169 if( ad->pref_arm_rdg )
1171 ad->pref_arm_rdg = NULL;
1173 if( ad->main_genlist )
1175 ad->main_genlist = NULL;
1177 if( ad->double_rdg )
1179 ad->double_rdg = NULL;
1181 if( ad->font_size_rdg )
1183 ad->font_size_rdg = NULL;
1185 if( ad->language_item )
1187 ad->language_item = NULL;
1189 if( ad->language_rdg )
1191 ad->language_rdg = NULL;
1194 /* unregister motion vconf changed callback */
1195 //unregister_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling);
1198 void app_pause(void *data)
1200 DBG("Setting - app_pause()");
1205 if( ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH )
1207 _stop_all_volume_sound();
1209 else if( ad->MENU_TYPE == SETTING_SOUND_RINGTONE ||
1210 ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION )
1212 _stop_all_sound_play();
1214 else if(ad->MENU_TYPE == SETTING_BATTERY)
1216 _clear_battery_cb(NULL, NULL, NULL, NULL);
1218 else if( ad->MENU_TYPE == SETTING_SOUND )
1220 _stop_all_sound_play();
1225 void app_resume(void *data)
1227 DBG("Setting - app_resume()");
1232 void app_reset(service_h service, void *data)
1234 DBG("Setting - app_reset()");
1238 char *operation = NULL;
1239 service_get_operation(service, &operation);
1240 DBG("operation : %s", operation);
1241 if (!ad->is_first_launch) {
1242 if (operation && !strcmp(operation, "http://tizen.org/appcontrol/operation/main")) {
1243 Elm_Object_Item *bottom = elm_naviframe_bottom_item_get(ad->nf);
1244 Elm_Object_Item *top = elm_naviframe_top_item_get(ad->nf);
1247 evas_object_del(ad->popup);
1251 while (bottom != top) {
1252 elm_object_item_del(top);
1253 top = elm_naviframe_top_item_get(ad->nf);
1256 if (ad->main_genlist) {
1257 elm_genlist_item_show(elm_genlist_first_item_get(ad->main_genlist),
1258 ELM_GENLIST_ITEM_SCROLLTO_TOP);
1262 ad->is_first_launch = 0;
1267 elm_win_activate(ad->win_main);
1270 ad->MENU_TYPE = SETTING_MAIN;
1272 /* Register language change vconf */
1273 //register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL);
1277 int main(int argc, char *argv[])
1279 DBG("%s,%d", __func__, __LINE__);
1283 app_event_callback_s event_callback;
1285 event_callback.create = app_create;
1286 event_callback.terminate = app_terminate;
1287 event_callback.pause = app_pause;
1288 event_callback.resume = app_resume;
1289 event_callback.service = app_reset;
1290 event_callback.low_memory = NULL;
1291 event_callback.low_battery = NULL;
1292 event_callback.device_orientation = NULL;
1293 event_callback.language_changed = _lang_changed;
1294 event_callback.region_format_changed = NULL;
1296 memset(&ad, 0x0, sizeof(appdata));
1298 return app_efl_main(&argc, &argv, &event_callback, &ad);
1302 int main(int argc, char *argv[])
1306 DBG("[TIME] 1. aul_launch -> main :: Setting main : %d msec ", appcore_measure_time_from("APP_START_TIME"));
1307 appcore_measure_start();
1309 struct appcore_ops ops = {
1310 .create = app_create,
1311 .terminate = app_terminate,
1313 .resume = app_resume,
1317 memset(&ad, 0x0, sizeof(appdata));
1320 ad.MENU_TYPE = SETTING_MAIN;
1322 DBG("[TIME] 2. main : %d msec ", appcore_measure_time());
1323 appcore_measure_start();
1325 return appcore_efl_main(PACKAGE, &argc, &argv, &ops);