tizen 2.3.1 release
[apps/home/b2-clocksetting.git] / src / setting.c
1 /*
2  *  Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  *  Licensed under the Flora License, Version 1.0 (the License);
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *      http://floralicense.org/license/
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an AS IS BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  */
17 #include <dlog.h>
18 #include <Ecore_X.h>            /* ecore_x_window_size_get */
19 #include <utilX.h>              /* KEY_END */
20 #include <vconf.h>
21 #include <vconf-keys.h>
22 #include <fcntl.h>
23 #include <appcore-efl.h>
24 #include <efl_assist.h>
25 #include <system_settings.h>
26
27 #include "setting-sound.h"
28 #include "setting-volume.h"
29 #include "setting-clock.h"
30 #include "setting-homescreen.h"
31 #include "setting-info.h"
32 #include "setting-bluetooth.h"
33 #include "setting-motion.h"
34 #include "setting-display.h"
35 #include "setting-language.h"
36 #include "setting-reset.h"
37 #include "setting-battery.h"
38 #include "setting-privacy.h"
39 #include "setting-double.h"
40 #include "setting-safety.h"
41 #include "setting-notification.h"
42 #include "util.h"
43 #include "setting-common-sound.h"
44 #include "setting.h"
45 #include "setting_control_bt.h"
46 #include "setting_view_toast.h"
47 #include "setting_indicator_util.h"
48
49 #define FEATURE_SETTING_CHANGEABLE
50
51 #ifdef FEATURE_SETTING_CHANGEABLE
52 #include "setting-theme.h"
53 #endif
54
55
56 Evas_Object *_create_location_list(void *data);
57 static Evas_Object *location_genlist = NULL;
58 static void _location_cb(void *data, Evas_Object *obj, void *event_info);
59
60
61 #define LANGUAGE_ICON_DISABLED          "b_settings_language_disabled.png"
62 #define LANGUAGE_ICON_ENABLED           "b_settings_language.png"
63
64 static struct _menu_item setting_emergency_menu_its[] = {
65 #ifdef FEATURE_SETTING_EMUL
66         { "IDS_ST_BUTTON_CLOCK",                                                        "b_settings_change_clock.png",  clock_cb                        },
67 #endif
68         /*#if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL) */
69         { "IDS_ST_OPT_SOUND_ABB2",                                                      "b_settings_volume.png",                        sound_cb                        },
70         /*      { "IDS_ST_OPT_VOLUME",                          "b_settings_volume.png",                volume_cb                       }, */
71         /*#endif */
72         { "IDS_ST_MBODY_DISPLAY_ABB",                                           "b_setting_display.png",                display_cb                      },
73 #ifndef FEATURE_SETTING_EMUL
74         /*      { "IDS_ST_BODY_BATTERY_ABB",                                            "b_settings_battery.png",               battery_cb                      }, */
75         { "IDS_QP_BUTTON_BLUETOOTH",                                            "b_settings_bluetooth.png",             bluetooth_cb            },
76 #endif
77 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
78         { "IDS_ST_MBODY_SAFETY_ABB",                    "b_settings_safety.png",       safety_cb           },
79 #endif
80         { NULL, NULL, NULL }
81 };
82
83 static struct _menu_item setting_menu_its[] = {
84         { "IDS_ST_BUTTON_CLOCK",                                                        "b_settings_change_clock.png",  clock_cb                        },
85 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
86         { "IDS_ST_BODY_WALLPAPERS",                                             "b_setting_wallpaper.png",                      homescreen_cb           },
87         { "IDS_ST_BUTTON_NOTIFICATIONS",                                        "b_settings_notifications.png", notification_cb         },
88 #endif
89         /*#ifndef FEATURE_SETTING_EMUL */
90         { "IDS_ST_OPT_SOUND_ABB2",                                                      "b_settings_volume.png",                        sound_cb                        },
91         /*      { "IDS_ST_OPT_VOLUME",                          "b_settings_volume.png",                volume_cb                       }, */
92         /*#endif */
93         { "IDS_ST_MBODY_DISPLAY_ABB",                                           "b_setting_display.png",                display_cb                      },
94 #if defined(_LOCATION_MENU_ON)
95         { "Location",                                           "b_settings_location.png",              location_cb             },
96 #endif
97         { "IDS_ST_MBODY_TEXT_INPUT_ABB",                                        "text_input_icon.png",                  keyboard_cb                     },
98 #ifndef FEATURE_SETTING_EMUL
99         /*      { "IDS_ST_BODY_BATTERY_ABB",                                            "b_settings_battery.png",               battery_cb                      }, */
100         { "IDS_QP_BUTTON_BLUETOOTH",                                            "b_settings_bluetooth.png",             bluetooth_cb            },
101         /*      { "IDS_WMGR_HEADER_MOTIONS",                                            "b_settings_motion.png",                motion_cb                       }, */
102 #endif
103 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
104         { "IDS_ST_MBODY_DOUBLE_PRESS_ABB",                                      "b_setting_double-press.png",           double_pressing_cb      },
105 #endif
106         /*      { "IDS_ST_BUTTON_LANGUAGE",                                             "b_settings_language.png",              language_cb             }, */
107 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
108         /*{ "Safety",                                                                           "b_settings_safety.png",                safety_cb                       }, */
109 #endif
110
111         /* factory reset is not supported in tizen_2.3 */
112 #if 0
113         { "IDS_ST_BODY_RESET_GEAR_ABB",                                         "b_settings_reset.png", reset_gear_cb           },
114 #endif
115
116 #ifndef FEATURE_SETTING_EMUL
117         { "IDS_ST_BUTTON_GEAR_INFO",                                            "b_settings_info.png",                  gear_info_cb            },
118 #endif
119         { NULL, NULL, NULL }
120 };
121
122 static int is_emergency;
123 static Elm_Object_Item *lang_item = NULL;
124 static bool running = false;
125 static Ecore_Timer *running_timer = NULL;
126 static Ecore_Timer *scrl_timer = NULL;
127
128 static Evas_Object *_create_bg(Evas_Object *parent);
129 static Evas_Object *_create_layout_main(Evas_Object *parent);
130 static Evas_Object *_create_naviframe_layout(Evas_Object *parent);
131 static void _create_view_layout(appdata *ad);
132 static int init_clocksetting(appdata *ad);
133 static Eina_Bool _app_ctrl_timer_cb(void *data);
134 static Eina_Bool _scroller_timer_cb(void *data);
135
136 #ifdef FEATURE_SETTING_CHANGEABLE
137
138 static Ea_Theme_Color_Table *_changeable_colors_set(void)
139 {
140         Ea_Theme_Color_Table *table;
141
142         /* Enable changeable UI */
143         ea_theme_changeable_ui_enabled_set(EINA_TRUE);
144
145         table = ea_theme_color_table_new(COLOR_INFO_TABLE);
146         ea_theme_colors_set(table, EA_THEME_STYLE_DEFAULT);
147
148         return table;
149 }
150
151 static void _changeable_colors_free(Ea_Theme_Color_Table *table)
152 {
153         /* when the process is killed, you don’t need to call this */
154         /*ea_theme_colors_unset(table, EA_THEME_STYLE_DEFAULT);                 // This API will be removed. */
155         ea_theme_color_table_free(table);
156 }
157 #endif
158
159 void clock_cb(void *data, Evas_Object *obj, void *event_info)
160 {
161         Evas_Object *layout = NULL;
162         Elm_Object_Item *nf_it = NULL;
163         appdata *ad = data;
164
165         if (ad == NULL) {
166                 DBG("Setting - ad is null");
167                 return;
168         }
169
170         if (running) {
171                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
172                 return;
173         }
174
175         if (is_running_clock) {
176                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
177                 return;
178         }
179
180         initialize_clock(data);
181
182         /*genlist = _create_clock_list(data); */
183         layout = _clock_type_cb(data);
184         if (layout == NULL) {
185                 DBG("%s", "clock cb - layout is null");
186                 return;
187         }
188         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
189         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_clock_cb, ad);
190         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_clock_cb, ad); */
191         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
192
193         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
194         is_running_clock = 1;
195
196         ad->MENU_TYPE = SETTING_CLOCK;
197 }
198
199 void notification_cb(void *data, Evas_Object *obj, void *event_info)
200 {
201         Evas_Object *genlist = NULL;
202         Elm_Object_Item *nf_it = NULL;
203         appdata *ad = data;
204
205         if (ad == NULL) {
206                 DBG("Setting - ad is null");
207                 return;
208         }
209
210         if (running) {
211                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
212                 return;
213         }
214
215         _initialize_noti();
216
217         genlist = _create_noti_list(data);
218         if (genlist == NULL) {
219                 DBG("%s", "notification_cb - genlist is null");
220                 return;
221         }
222         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
223         elm_naviframe_item_pop_cb_set(nf_it, _clear_noti_cb, ad);
224         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
225
226         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
227
228         ad->MENU_TYPE = SETTING_NOTIFICATION;
229 }
230
231 void homescreen_cb(void *data, Evas_Object *obj, void *event_info)
232 {
233         Evas_Object *layout = NULL;
234         Elm_Object_Item *nf_it = NULL;
235         appdata *ad = data;
236
237         if (ad == NULL) {
238                 DBG("Setting - ad is null");
239                 return;
240         }
241
242         if (running) {
243                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
244                 return;
245         }
246
247         /*layout = _create_homescreen_list(data); */
248         layout = create_wallpaper_list(data);
249         if (layout == NULL) {
250                 DBG("%s", "homescreen cb - layout is null");
251                 return;
252         }
253         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
254         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_homescreen_cb, ad); */
255         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_homescreen_cb, ad);
256         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
257
258         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
259
260         ad->MENU_TYPE = SETTING_HOMESCREEN;
261 }
262
263
264 void sound_cb(void *data, Evas_Object *obj, void *event_info)
265 {
266         Evas_Object *genlist = NULL;
267         Elm_Object_Item *nf_it = NULL;
268         appdata *ad = data;
269
270         if (ad == NULL) {
271                 DBG("Setting - ad is null");
272                 return;
273         }
274
275         if (running) {
276                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
277                 return;
278         }
279
280         _initialize();
281
282         genlist = _create_sound_list(data);
283         if (genlist == NULL) {
284                 DBG("%s", "sound cb - genlist is null");
285                 return;
286         }
287         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
288         elm_naviframe_item_pop_cb_set(nf_it, _clear_sound_cb, ad);
289         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
290
291         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
292
293         ad->MENU_TYPE = SETTING_SOUND;
294 }
295
296 void volume_cb(void *data, Evas_Object *obj, void *event_info)
297 {
298         Evas_Object *genlist = NULL;
299         Elm_Object_Item *nf_it = NULL;
300         appdata *ad = data;
301
302         if (ad == NULL) {
303                 DBG("Setting - ad is null");
304                 return;
305         }
306
307         if (running) {
308                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
309                 return;
310         }
311
312         _initialize_volume();
313
314         genlist = _create_volume_list(data);
315         if (genlist == NULL) {
316                 DBG("%s", "volume cb - genlist is null");
317                 return;
318         }
319         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
320         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_volume_cb, ad); */
321         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
322
323         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
324
325         ad->MENU_TYPE = SETTING_VOLUME;
326 }
327
328 void display_cb(void *data, Evas_Object *obj, void *event_info)
329 {
330         Evas_Object *genlist = NULL;
331         Elm_Object_Item *nf_it = NULL;
332         appdata *ad = data;
333
334         if (ad == NULL) {
335                 DBG("Setting - ad is null");
336                 return;
337         }
338
339         if (running) {
340                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
341                 return;
342         }
343
344         _init_display();
345
346         genlist = _create_display_list(data);
347         if (genlist == NULL) {
348                 DBG("%s", "display cb - genlist is null");
349                 return;
350         }
351         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
352         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_display_cb, ad); */
353         evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, _clear_display_cb, ad);
354         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
355
356         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
357
358         ad->MENU_TYPE = SETTING_DISPLAY;
359 }
360
361 void keyboard_cb(void *data, Evas_Object *obj, void *event_info)
362 {
363         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
364
365         appdata *ad = data;
366
367         if (ad == NULL) {
368                 DBG("Setting - ad is null");
369                 return;
370         }
371
372         if (running) {
373                 return;
374         }
375
376         if (!running) {
377                 app_control_h service;
378                 app_control_create(&service);
379                 app_control_set_package(service, "org.tizen.w-text-input-setting");
380                 app_control_send_launch_request(service, NULL, NULL);
381                 app_control_destroy(service);
382
383                 running = true;
384
385                 if (running_timer) {
386                         ecore_timer_del(running_timer);
387                         running_timer = NULL;
388                 }
389                 running_timer = ecore_timer_add(0.5, (Ecore_Task_Cb)_app_ctrl_timer_cb, NULL);
390         }
391 }
392
393 void battery_cb(void *data, Evas_Object *obj, void *event_info)
394 {
395         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
396
397         Evas_Object *layout = NULL;
398         Elm_Object_Item *nf_it = NULL;
399         appdata *ad = data;
400
401         if (ad == NULL) {
402                 DBG("Setting - ad is null");
403                 return;
404         }
405
406         if (running) {
407                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
408                 return;
409         }
410
411         _initialize_battery();
412         layout = _battery_status_cb(data);
413         if (layout == NULL) {
414                 DBG("%s", "battery cb - layout is null");
415                 return;
416         }
417         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
418         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_battery_list_cb, ad); */
419         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_battery_cb, ad);
420         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
421
422         ad->MENU_TYPE = SETTING_BATTERY;
423 }
424
425 void bluetooth_cb(void *data, Evas_Object *obj, void *event_info)
426 {
427         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
428
429         Evas_Object *genlist = NULL;
430         Elm_Object_Item *nf_it = NULL;
431         appdata *ad = data;
432
433         if (ad == NULL) {
434                 DBG("Setting - ad is null");
435                 return;
436         }
437
438         if (running) {
439                 return;
440         }
441
442         initialize_bt();
443
444         genlist = _create_bt_list(data);
445         if (genlist == NULL) {
446                 DBG("%s", "bluetooth cb - genlist is null");
447                 return;
448         }
449         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
450         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_bluetooth_cb, ad); */
451         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
452
453         ad->MENU_TYPE = SETTING_BLUETOOTH;
454 }
455
456 void location_cb(void *data, Evas_Object *obj, void *event_info)
457 {
458         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
459
460         Evas_Object *genlist = NULL;
461         Elm_Object_Item *nf_it = NULL;
462         appdata *ad = data;
463
464         if (ad == NULL) {
465                 DBG("Setting - ad is null");
466                 return;
467         }
468
469         if (running) {
470                 return;
471         }
472
473         genlist = _create_location_list(data);
474         if (genlist == NULL) {
475                 DBG("%s", "bluetooth cb - genlist is null");
476                 return;
477         }
478         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
479         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_bluetooth_cb, ad); */
480         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
481
482         ad->MENU_TYPE = SETTING_LOCATION;
483 }
484
485 void motion_cb(void *data, Evas_Object *obj, void *event_info)
486 {
487         Evas_Object *genlist = NULL;
488         Elm_Object_Item *nf_it = NULL;
489         appdata *ad = data;
490
491         if (ad == NULL) {
492                 DBG("Setting - ad is null");
493                 return;
494         }
495
496         if (running) {
497                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
498                 return;
499         }
500
501         _initialize_motion();
502         genlist = _create_motion_list(data);
503         if (genlist == NULL) {
504                 DBG("%s", "motion cb - genlist is null");
505                 return;
506         }
507         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
508         elm_naviframe_item_pop_cb_set(nf_it, _clear_motion_cb, ad);
509         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
510
511         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
512 }
513
514 void lockscreen_cb(void *data, Evas_Object *obj, void *event_info)
515 {
516         Evas_Object *layout = NULL;
517         Elm_Object_Item *nf_it = NULL;
518
519         appdata *ad = data;
520
521         if (ad == NULL) {
522                 DBG("Setting - ad is null");
523                 return;
524         }
525
526         if (running) {
527                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
528                 return;
529         }
530
531         layout = create_privacy_list(data);
532         if (layout == NULL) {
533                 DBG("%s", "lockscreen cb - genlist is null");
534                 return;
535         }
536
537         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
538         elm_naviframe_item_pop_cb_set(nf_it, clear_privacy_cb, ad);
539         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
540
541         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
542
543         ad->MENU_TYPE = SETTING_SCREEN_LOCK;
544 }
545
546 void double_pressing_cb(void *data, Evas_Object *obj, void *event_info)
547 {
548         Evas_Object *layout = NULL;
549         Elm_Object_Item *nf_it = NULL;
550
551         appdata *ad = data;
552
553         if (ad == NULL) {
554                 DBG("Setting - ad is null");
555                 return;
556         }
557
558         if (running) {
559                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
560                 return;
561         }
562
563         init_double_pressing(ad);
564
565         layout = create_double_app_list(data);
566         if (layout == NULL) {
567                 DBG("%s", "double cb - genlist is null");
568                 return;
569         }
570
571         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
572         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, clear_double_app_cb, ad);
573         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
574
575         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
576
577         ad->MENU_TYPE = SETTING_DOUBLE_PRESSING;
578 }
579
580 void language_cb(void *data, Evas_Object *obj, void *event_info)
581 {
582         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
583
584         Evas_Object *genlist = NULL;
585         Elm_Object_Item *nf_it = NULL;
586         appdata *ad = data;
587
588         if (ad == NULL) {
589                 DBG("Setting - ad is null");
590                 return;
591         }
592
593         if (running) {
594                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
595                 return;
596         }
597
598         if (is_connected_GM()) {
599                 DBG("Setting - language can not change!!");
600
601                 /* automatic freed!! */
602                 struct _toast_data *toast = _create_toast(ad, _("IDS_ST_TPOP_CHANGE_LANGUAGE_ON_MOBILE_DEVICE"));
603                 if (toast) {
604                         _show_toast(ad, toast);
605                 }
606                 return;
607         }
608
609         _initialize_language(ad);
610         _set_launguage_update_cb(_update_main_menu_title);
611
612         genlist = _create_lang_list(data);
613         if (genlist == NULL) {
614                 DBG("%s", "language cb - genlist is null");
615                 return;
616         }
617         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
618         elm_naviframe_item_pop_cb_set(nf_it, _clear_lang_cb, ad);
619         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
620
621         ad->MENU_TYPE = SETTING_LANGUAGE;
622 }
623
624 void safety_cb(void *data, Evas_Object *obj, void *event_info)
625 {
626         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
627
628         appdata *ad = data;
629         if (ad == NULL) {
630                 DBG("Setting - ad is null");
631                 return;
632         }
633
634         if (running) {
635                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
636                 return;
637         }
638
639         Evas_Object *layout = NULL;
640         Elm_Object_Item *nf_it = NULL;
641
642         layout = create_safety_list(ad);
643         if (layout == NULL) {
644                 DBG("%s", "safety cb - genlist is null");
645                 return;
646         }
647
648         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
649         elm_naviframe_item_pop_cb_set(nf_it, clear_safety_cb, ad);
650         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
651
652         ad->MENU_TYPE = SETTING_SAFETY;
653 }
654
655 void reset_gear_cb(void *data, Evas_Object *obj, void *event_info)
656 {
657         appdata *ad = data;
658         if (ad == NULL) {
659                 DBG("Setting - ad is null");
660                 return;
661         }
662
663         if (running) {
664                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
665                 return;
666         }
667
668         _reset_popup_cb(data, obj, event_info);
669
670         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
671
672         ad->MENU_TYPE = SETTING_RESET;
673 }
674
675 void gear_info_cb(void *data, Evas_Object *obj, void *event_info)
676 {
677         Evas_Object *genlist = NULL;
678         Elm_Object_Item *nf_it = NULL;
679         appdata *ad = data;
680
681         if (ad == NULL) {
682                 DBG("Setting - ad is null");
683                 return;
684         }
685
686         if (running) {
687                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
688                 return;
689         }
690
691         genlist = _create_info_list(data);
692         if (genlist == NULL) {
693                 DBG("%s", "info cb - genlist is null");
694                 return;
695         }
696         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
697         elm_naviframe_item_pop_cb_set(nf_it, _clear_info_cb, ad);
698         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
699
700         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
701
702         ad->MENU_TYPE = SETTING_INFO;
703 }
704
705 static Eina_Bool _app_ctrl_timer_cb(void *data)
706 {
707         DBG("reset flag");
708         running = false;
709         running_timer = NULL;
710         return ECORE_CALLBACK_CANCEL;
711 }
712
713 static Eina_Bool _scroller_timer_cb(void *data)
714 {
715         DBG("hide scroller bar");
716
717         Evas_Object *genlist = data;
718
719         if (genlist)
720                 elm_layout_signal_emit(genlist, "do-hide-vbar", "");
721
722         return ECORE_CALLBACK_CANCEL;
723 }
724
725 static void _quit_cb(void *data, Evas_Object *obj, void *ei)
726 {
727         /*
728         //To make your application go to background,
729         //Call the elm_win_lower() instead
730         Evas_Object *win = (Evas_Object *) data;
731         elm_win_lower(win);
732         */
733         elm_exit();
734 }
735
736 static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
737 {
738         /* Stop timer and task */
739         appdata *ad = data;
740         if (running_timer) {
741                 ecore_timer_del(running_timer);
742                 running_timer = NULL;
743         }
744         if (running)
745                 running = false;
746
747         if (scrl_timer) {
748                 ecore_timer_del(scrl_timer);
749                 scrl_timer = NULL;
750         }
751
752         if (ad && ad->win_main) {
753                 elm_win_lower(ad->win_main);
754         }
755
756         return EINA_FALSE;
757 }
758
759 static Evas_Object *_create_bg(Evas_Object *parent)
760 {
761         Evas_Object *bg;
762
763         if (parent == NULL) return NULL;
764
765         bg = elm_bg_add(parent);
766         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
767         elm_win_resize_object_add(parent, bg);
768         evas_object_show(bg);
769
770         return bg;
771 }
772
773 static Evas_Object *_create_conform(Evas_Object *parent)
774 {
775         Evas_Object *conform;
776
777         if (parent == NULL) return NULL;
778
779         conform = elm_conformant_add(parent);
780         evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
781         elm_win_resize_object_add(parent, conform);
782         evas_object_show(conform);
783
784         return conform;
785 }
786
787
788 static Evas_Object *_create_layout_main(Evas_Object *parent)
789 {
790         Evas_Object *layout;
791
792         if (parent == NULL) return NULL;
793
794         layout = elm_layout_add(parent);
795
796         if (layout == NULL) {
797                 DBG("Failed elm_layout_add.\n");
798                 return NULL;
799         }
800
801         elm_layout_theme_set(layout, "layout", "application", "default");
802         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
803         elm_win_resize_object_add(parent, layout);
804
805         evas_object_show(layout);
806
807         return layout;
808 }
809
810 static void _lang_changed(app_event_info_h event_info, void *data)
811 {
812         appdata *ad = data;
813         if (ad && ad->MENU_TYPE == SETTING_LANGUAGE)
814                 return;
815
816         char *locale = vconf_get_str(VCONFKEY_LANGSET);
817         if (locale) {
818                 DBG("Setting - language is changed : %s", locale);
819                 elm_language_set(locale);
820                 elm_config_all_flush();
821         }
822 }
823
824 static void _window_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
825 {
826         appdata *ad = (appdata *)data;
827         evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
828 }
829
830 static void init_values(appdata *ad)
831 {
832         if (ad == NULL) {
833                 return;
834         }
835
836         ad->is_motion_smart_relay_on = 1;
837         ad->is_motion_wake_up_on = 1;
838 }
839
840 static int init_clocksetting(appdata *ad)
841 {
842         DBG("init_clocksetting() is called!");
843
844         if (ad == NULL)
845                 return EINA_FALSE;
846
847         ad->bg = _create_bg(ad->win_main);
848
849         /* Conformant *** disable comform : lauching time issue *** */
850         /* Base Layout */
851         ad->layout_main = _create_layout_main(ad->win_main);
852         /*ad->conform = _create_conform(ad->win_main); */
853         if (ad->layout_main == NULL)
854                 return -1;
855
856
857         /* Indicator */
858         elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
859
860         /* Naviframe */
861         ad->nf = _create_naviframe_layout(ad->layout_main);
862
863         /* Naviframe Content */
864         _create_view_layout(ad);
865
866         init_values(ad);
867
868         int vibration_level = 0;
869         vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vibration_level);
870
871         DBG("Setting - vibration level : %d", vibration_level);
872
873         if (vibration_level == 2) {     /* wrong value!! */
874                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
875                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
876         }
877         return EINA_TRUE;
878 }
879
880 static Evas_Object *_create_naviframe_layout(Evas_Object *parent)
881 {
882         Evas_Object *nf = NULL;
883
884         if (parent == NULL) return NULL;
885
886         nf = elm_naviframe_add(parent);
887         elm_object_part_content_set(parent, "elm.swallow.content", nf);
888
889         evas_object_show(nf);
890
891         return nf;
892 }
893
894 static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
895 {
896         char buf[512];
897         Item_Data *id = data;
898         int index = id->index;
899 #if 0
900         DBG("_gl_text_get : -----> part : %s ", part);
901 #endif
902         /*
903         char expression[32];
904
905         if( index == LANGUAGE_MENU_INDEX ) {
906                 if( is_connected_GM() ) {
907                         strcpy(expression, "<font color=#515151>%s</font>");
908                 } else {
909                         strcpy(expression, "%s");
910                 }
911         } else {
912                 strcpy(expression, "%s");
913         }*/
914
915         if (is_emergency)
916                 snprintf(buf, sizeof(buf) - 1, "%s", _(setting_emergency_menu_its[index].name));
917         else
918                 snprintf(buf, sizeof(buf) - 1, "%s", _(setting_menu_its[index].name));
919
920         return strdup(buf);
921 }
922
923 static Evas_Object *_gl_icon_get(void *data, Evas_Object *obj, const char *part)
924 {
925         char buf[1024];
926         Item_Data *id = data;
927         int index = id->index;
928
929 #if 1
930         DBG("_gl_icon_get : -----> part : %s ", part);
931 #endif
932         if (part && !strcmp(part, "elm.icon")) {
933                 if (is_emergency)
934                         snprintf(buf, sizeof(buf) - 1, "%s", setting_emergency_menu_its[index].icon_name);
935                 else
936                         snprintf(buf, sizeof(buf) - 1, "%s", setting_menu_its[index].icon_name);
937
938                 Evas_Object *icon = elm_image_add(obj);
939                 elm_image_file_set(icon, EDJE_PATH, buf);
940                 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
941                 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
942                 evas_object_size_hint_min_set(icon, 52, 52);
943
944                 return icon;
945         }
946         return NULL;
947 }
948
949 static void _gl_del(void *data, Evas_Object *obj)
950 {
951         Item_Data *id = data;
952         if (id)
953                 free(id);
954 }
955
956 static Evas_Object *_gl_indicator_get(void *data, Evas_Object *obj, const char *part)
957 {
958         Evas_Object *layout = NULL;
959
960         layout = elm_layout_add(obj);
961         elm_layout_file_set(layout, EDJE_PATH, "setting/indicator");
962
963         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
964         indicator_view_update(layout);
965         evas_object_show(layout);
966         DBG("indicator get!!!!!!!!");
967
968         return layout;
969 }
970
971 static Evas_Object *_create_mainlist_winset(Evas_Object *parent, appdata *ad)
972 {
973         Evas_Object *genlist = NULL;
974         struct _menu_item *menu_its = NULL;
975         int idx = 0;
976
977         /* Create item class */
978         elm_theme_extension_add(NULL, EDJE_PATH);
979         Elm_Genlist_Item_Class *itc_tmp = elm_genlist_item_class_new();
980         itc_tmp->item_style = "setting_indicator";
981         itc_tmp->func.content_get = _gl_indicator_get;
982         itc_tmp->func.del = _gl_del;
983
984         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
985
986 #ifdef O_TYPE
987         itc->item_style = "1text";
988 #else
989         itc->item_style = "1text.1icon";
990 #endif
991         itc->func.text_get = _gl_text_get;
992         itc->func.content_get = _gl_icon_get;
993         itc->func.del = _gl_del;
994
995         genlist = elm_genlist_add(ad->nf);
996         if (genlist == NULL) {
997                 elm_genlist_item_class_free(itc);
998                 elm_genlist_item_class_free(itc_tmp);
999                 return NULL;
1000         }
1001         elm_genlist_realization_mode_set(genlist, EINA_TRUE);
1002         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1003
1004         Item_Data *id_indi = calloc(sizeof(Item_Data), 1);
1005         if (id_indi) {
1006                 id_indi->index = idx;
1007                 id_indi->item = elm_genlist_item_append(
1008                                                         genlist,
1009                                                         itc_tmp,
1010                                                         id_indi,
1011                                                         NULL,
1012                                                         ELM_GENLIST_ITEM_NONE,
1013                                                         NULL, NULL);
1014                 elm_genlist_item_select_mode_set(id_indi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1015         }
1016
1017 #if 0
1018         vconf_get_bool(VCONFKEY_SETAPPL_EMERGENCY_STATUS_BOOL, &is_emergency);
1019 #else
1020         is_emergency = 0;
1021 #endif
1022         int item_count = 0;
1023         if (is_emergency) {
1024                 menu_its = setting_emergency_menu_its;
1025                 item_count = sizeof(setting_emergency_menu_its) / sizeof(struct _menu_item);
1026         } else {
1027                 menu_its = setting_menu_its;
1028                 item_count = sizeof(setting_menu_its) / sizeof(struct _menu_item);
1029         }
1030
1031         DBG("Setting - Main menu item count: %d", item_count);
1032
1033         /*while (menu_its[idx].name != NULL) { */
1034         for (idx = 0; idx < item_count - 1; idx++) {
1035                 Item_Data *id = calloc(sizeof(Item_Data), 1);
1036                 if (id) {
1037                         id->index = idx;
1038                         id->item = elm_genlist_item_append(
1039                                                    genlist,                     /* genlist object */
1040                                                    itc,                         /* item class */
1041                                                    id,                  /* data */
1042                                                    NULL,
1043                                                    ELM_GENLIST_ITEM_NONE,
1044                                                    menu_its[idx].func,
1045                                                    ad);
1046                 }
1047         }
1048         elm_genlist_item_class_free(itc);
1049         elm_genlist_item_class_free(itc_tmp);
1050
1051
1052
1053         indicator_set_vconf_changed_cb(ad);
1054
1055         return genlist;
1056 }
1057
1058 static void _update_main_menu_title(void *data)
1059 {
1060         DBG("_update_main_menu_title() is called");
1061
1062         appdata *ad = data;
1063         if (ad == NULL) {
1064                 DBG("appdata is NULL");
1065                 return;
1066         }
1067
1068         if (ad->main_genlist) {
1069                 elm_genlist_realized_items_update(ad->main_genlist);
1070         }
1071 }
1072
1073 static void _naviframe_back_cb(void *data, Evas_Object *obj, void *event_info)
1074 {
1075         appdata *ad = data;
1076         if (ad == NULL)
1077                 return;
1078
1079         if (ad->MENU_TYPE == SETTING_BLUETOOTH) {
1080                 clear_bt_resource();
1081                 ad->MENU_TYPE = SETTING_MAIN;
1082         } else if (ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH) {
1083                 _clear_volume_resources();
1084
1085                 ad->MENU_TYPE = SETTING_VOLUME;
1086         } else if (ad->MENU_TYPE == SETTING_SOUND_RINGTONE) {
1087                 _stop_player();
1088
1089                 ad->MENU_TYPE = SETTING_SOUND;
1090         } else if (ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION) {
1091                 _stop_wav_player();
1092
1093                 ad->MENU_TYPE = SETTING_SOUND;
1094         }
1095
1096         ea_naviframe_back_cb(data, obj, event_info);
1097 }
1098
1099 static void _create_view_layout(appdata *ad)
1100 {
1101         Evas_Object *genlist = NULL;
1102         Evas_Object *btn  = NULL;
1103         Elm_Object_Item *nf_it = NULL;
1104
1105         if (ad == NULL) return;
1106         if (ad->nf == NULL) return;
1107
1108         genlist = _create_mainlist_winset(ad->win_main, ad);
1109         ad->main_genlist = genlist;
1110
1111 #ifdef O_TYPE
1112         Evas_Object *circle_genlist = eext_circle_object_genlist_add(genlist, ad->circle_surface);
1113         eext_circle_object_genlist_scroller_policy_set(circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1114         eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
1115 #endif
1116         ea_object_event_callback_add(ad->nf, EA_CALLBACK_BACK, _naviframe_back_cb, ad);
1117         ea_object_event_callback_add(ad->nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
1118
1119         nf_it = elm_naviframe_item_push(ad->nf, NULL, btn, NULL, genlist, NULL);
1120         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1121
1122         elm_naviframe_item_pop_cb_set(nf_it, _pop_cb, ad); /* ad->win_main */
1123
1124         /*register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL); */
1125 }
1126
1127 static Evas_Object *create_win(const char *name)
1128 {
1129         Evas_Object *eo;
1130
1131
1132         eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
1133         if (!eo)
1134                 return NULL;
1135
1136         elm_win_title_set(eo, name);
1137         elm_win_autodel_set(eo, EINA_TRUE);
1138
1139         if (elm_win_wm_rotation_supported_get(eo)) {
1140                 int rots[4] = { 0, 90, 180, 270 };
1141                 elm_win_wm_rotation_available_rotations_set(eo, (const int *)(&rots), 4);
1142         }
1143
1144         evas_object_smart_callback_add(eo, "delete,request", _quit_cb, NULL);
1145
1146         return eo;
1147 }
1148 int _time_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
1149 {
1150         DBG("_time_cb");
1151         return 0;
1152 }
1153
1154 bool app_create(void *data)
1155 {
1156         /*DBG("[TIME] 3. it taked %d msec from main to setting_main_app_create ", appcore_measure_time()); */
1157         /*appcore_measure_start(); */
1158
1159         DBG("Setting - app_create");
1160
1161         appdata *ad = (appdata *) data;
1162         char *locale;
1163
1164         DBG("app_create start.");
1165
1166         ecore_x_window_size_get(ecore_x_window_root_first_get(), &ad->root_w, &ad->root_h);
1167
1168         ad->win_main = create_win(PACKAGE);
1169         if (ad->win_main == NULL)
1170                 return false;
1171
1172         ad->conform = _create_conform(ad->win_main);
1173
1174 #ifdef O_TYPE
1175         ad->circle_surface = eext_circle_surface_conformant_add(ad->conform);
1176 #endif
1177         evas_object_resize(ad->win_main, ad->root_w, ad->root_h);
1178
1179         double scale = elm_config_scale_get();
1180         if (scale < 1.0) {
1181                 DBG("Setting - scale is more less than 1.0");
1182                 elm_config_scale_set(1.0);
1183         }
1184
1185         ad->evas = evas_object_evas_get(ad->win_main);
1186
1187         locale = vconf_get_str(VCONFKEY_LANGSET);
1188         if (locale) {
1189                 elm_language_set(locale);
1190         }
1191
1192 #ifdef FEATURE_SETTING_CHANGEABLE
1193         /* set color table for changeable color */
1194         ad->color_table = _changeable_colors_set();
1195 #endif
1196
1197         ad->is_first_launch = 1;
1198
1199
1200
1201         init_clocksetting(ad);
1202
1203         DBG("app_create finish.");
1204
1205         DBG("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
1206         /*appcore_measure_start(); */
1207
1208         evas_object_show(ad->win_main);
1209
1210         int ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, _time_cb, NULL);
1211         DBG("ret = %d", ret);
1212
1213         return true;
1214 }
1215
1216 void app_terminate(void *data)
1217 {
1218         DBG("Setting - app_terminate");
1219
1220         appdata *ad = data;
1221
1222         indicator_unset_vconf_changed_cb();
1223
1224         if (ad->alert_rdg) {
1225                 ad->alert_rdg = NULL;
1226         }
1227         if (ad->datetime) {
1228                 ad->datetime = NULL;
1229         }
1230         if (ad->dt_genlist_item_of_date) {
1231                 ad->dt_genlist_item_of_date = NULL;
1232         }
1233         if (ad->dt_genlist_item_of_time) {
1234                 ad->dt_genlist_item_of_time = NULL;
1235         }
1236         if (ad->pref_arm_rdg) {
1237                 ad->pref_arm_rdg = NULL;
1238         }
1239         if (ad->main_genlist) {
1240                 ad->main_genlist = NULL;
1241         }
1242         if (ad->double_rdg) {
1243                 ad->double_rdg = NULL;
1244         }
1245         if (ad->font_size_rdg) {
1246                 ad->font_size_rdg = NULL;
1247         }
1248         if (ad->language_item) {
1249                 ad->language_item = NULL;
1250         }
1251         if (ad->language_rdg) {
1252                 ad->language_rdg = NULL;
1253         }
1254
1255         /* unregister motion vconf changed callback */
1256         /*unregister_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling); */
1257
1258 #ifdef FEATURE_SETTING_CHANGEABLE
1259         if (ad->color_table) {
1260                 _changeable_colors_free(ad->color_table);
1261                 ad->color_table = NULL;
1262         }
1263 #endif
1264         int ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE);
1265         DBG("222222ret = %d", ret);
1266 }
1267
1268 void app_pause(void *data)
1269 {
1270         DBG("Setting - app_pause()");
1271
1272         appdata *ad = data;
1273         if (ad) {
1274                 if (ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH) {
1275                         _stop_all_volume_sound();
1276                 } else if (ad->MENU_TYPE == SETTING_SOUND_RINGTONE ||
1277                                    ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION) {
1278                         _stop_all_sound_play();
1279                 } else if (ad->MENU_TYPE == SETTING_BATTERY) {
1280                         _clear_battery_cb(NULL, NULL, NULL, NULL);
1281                 } else if (ad->MENU_TYPE == SETTING_SOUND) {
1282                         _stop_all_sound_play();
1283                 }
1284         }
1285 }
1286
1287 void app_resume(void *data)
1288 {
1289         DBG("Setting - app_resume()");
1290
1291         appdata *ad = data;
1292
1293         if (running)
1294                 running = false;
1295 }
1296
1297 void app_reset(app_control_h service, void *data)
1298 {
1299         DBG("Setting - app_reset()");
1300
1301         appdata *ad = data;
1302
1303         char *operation = NULL;
1304         app_control_get_operation(service, &operation);
1305         DBG("operation : %s", operation);
1306         if (!ad->is_first_launch) {
1307                 if (operation && !strcmp(operation, "http://tizen.org/appcontrol/operation/main")) {
1308                         Elm_Object_Item *bottom = elm_naviframe_bottom_item_get(ad->nf);
1309                         Elm_Object_Item *top = elm_naviframe_top_item_get(ad->nf);
1310
1311                         if (ad->popup) {
1312                                 evas_object_del(ad->popup);
1313                                 ad->popup = NULL;
1314                         }
1315
1316                         while (bottom != top) {
1317                                 elm_object_item_del(top);
1318                                 top = elm_naviframe_top_item_get(ad->nf);
1319                         }
1320
1321                         if (ad->main_genlist) {
1322                                 elm_genlist_item_show(elm_genlist_first_item_get(ad->main_genlist),
1323                                                                           ELM_GENLIST_ITEM_SCROLLTO_TOP);
1324                                 elm_layout_signal_emit(ad->main_genlist, "do-show-vbar", "");
1325
1326                                 if (scrl_timer) {
1327                                         ecore_timer_del(scrl_timer);
1328                                         scrl_timer = NULL;
1329                                 }
1330                                 scrl_timer = ecore_timer_add(1, (Ecore_Task_Cb)_scroller_timer_cb, ad->main_genlist);
1331                         }
1332                 }
1333         } else {
1334                 ad->is_first_launch = 0;
1335         }
1336
1337         if (ad->win_main) {
1338                 elm_win_activate(ad->win_main);
1339         }
1340
1341         ad->MENU_TYPE = SETTING_MAIN;
1342
1343         /* Register language change vconf */
1344         /*register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL); */
1345         /*return TRUE; */
1346 }
1347
1348 int main(int argc, char *argv[])
1349 {
1350         DBG("%s,%d", __func__, __LINE__);
1351
1352         appdata ad;
1353
1354         ui_app_lifecycle_callback_s event_callback = {0,};
1355         app_event_handler_h handlers[5] = {NULL, };
1356
1357         int ret = 0;
1358
1359         event_callback.create = app_create;
1360         event_callback.terminate = app_terminate;
1361         event_callback.pause = app_pause;
1362         event_callback.resume = app_resume;
1363         event_callback.app_control = app_reset;
1364
1365         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, NULL, NULL);
1366         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, NULL, NULL);
1367         ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _lang_changed, NULL);
1368         ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, NULL, NULL);
1369         ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL);
1370
1371         memset(&ad, 0x0, sizeof(appdata));
1372
1373         ret = ui_app_main(argc, argv, &event_callback, &ad);
1374         if (APP_ERROR_NONE != ret) {
1375                 \
1376                 ERR("app_main() is failed. err = %d", ret);
1377         }
1378
1379         return ret;
1380 }
1381
1382 #if 0
1383 int main(int argc, char *argv[])
1384 {
1385         appdata ad;
1386
1387         DBG("[TIME] 1. aul_launch -> main :: Setting main : %d msec ", appcore_measure_time_from("APP_START_TIME"));
1388         appcore_measure_start();
1389
1390         struct appcore_ops ops = {
1391                 .create = app_create,
1392                 .terminate = app_terminate,
1393                 .pause = app_pause,
1394                 .resume = app_resume,
1395                 .reset = app_reset,
1396         };
1397
1398         memset(&ad, 0x0, sizeof(appdata));
1399         ops.data = &ad;
1400
1401         ad.MENU_TYPE = SETTING_MAIN;
1402
1403         DBG("[TIME] 2. main : %d msec ", appcore_measure_time());
1404         appcore_measure_start();
1405
1406         return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
1407 }
1408 #endif
1409
1410
1411 /*////////////////////////////////////////////////////////////////////////////////////////////// */
1412
1413
1414 typedef struct Location_Item_Data {
1415         int index;
1416         Elm_Object_Item *item;
1417         Evas_Object *check;
1418         Evas_Object *state_label;
1419 } Location_Item_Data;
1420
1421 struct _location_menu_item {
1422         char *name;
1423         int is_enable;
1424         void (*func)(void *data, Evas_Object *obj, void *event_info);
1425         Evas_Object *check;
1426 };
1427
1428
1429 static struct _location_menu_item location_menu_its[] = {
1430         { "Location",                                           DISABLE, _location_cb           },
1431         { NULL, DISABLE, NULL }
1432 };
1433
1434 static char *_gl_location_title_get(void *data, Evas_Object *obj, const char *part)
1435 {
1436         char buf[1024] = {0,};
1437         Location_Item_Data *id = data;
1438         int index = id->index;
1439         char expression[32];
1440
1441         if (!strcmp(part, "elm.text")) {
1442                 snprintf(buf, sizeof(buf) - 1, "%s", location_menu_its[index].name);
1443         }
1444         return strdup(buf);
1445 }
1446
1447 void _location_chk_changed_cb(void *data, Evas_Object *obj, void *event_info)
1448 {
1449         DBG("Setting - _location_chk_changed_cb() is called!!");
1450
1451         /*vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &sound_menu_its[2].is_enable_touch_sound); */
1452
1453         /*location_menu_its[0].is_enable = !location_menu_its[0].is_enable; */
1454
1455         /* Update touch sound enable state */
1456         /*vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, sound_menu_its[2].is_enable_touch_sound); */
1457         /*vconf_set_bool(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, sound_menu_its[2].is_enable_touch_sound); */
1458 }
1459
1460
1461 #if 0
1462 Evas_Object *_gl_sound_check_get(void *data, Evas_Object *obj, const char *part)
1463 {
1464         Evas_Object *check = NULL;
1465
1466         Sound_Item_Data *id = data;
1467         int index = id->index;
1468
1469         if (!strcmp(part, "elm.icon")) {
1470                 check = elm_check_add(obj);
1471
1472                 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &sound_menu_its[2].is_enable_touch_sound) < 0) {
1473                         sound_menu_its[2].is_enable_touch_sound = TOUCH_SOUND_ENABLE;   /*  default value of touch sounds : on */
1474                 }
1475                 elm_check_state_set(check, (sound_menu_its[2].is_enable_touch_sound) ? EINA_TRUE : EINA_FALSE);
1476                 evas_object_smart_callback_add(check, "changed", _sound_chk_changed_cb, (void *)1);
1477                 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
1478                 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1479                 evas_object_propagate_events_set(check, EINA_FALSE);
1480
1481                 id->check = check;
1482
1483                 index++;
1484         }
1485
1486         return check;
1487 }
1488 #endif
1489 static Evas_Object *_gl_location_check_get(void *data, Evas_Object *obj, const char *part)
1490 {
1491         Evas_Object *check = NULL;
1492
1493         Location_Item_Data *id = data;
1494         int index = id->index;
1495
1496         if (!strcmp(part, "elm.icon")) {
1497                 check = elm_check_add(obj);
1498                 elm_object_style_set(check, "list");
1499                 id->check = check;
1500
1501                 DBG("index = %d", index);
1502                 elm_check_state_set(check, (location_menu_its[index].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
1503
1504                 location_menu_its[index].check = check;
1505
1506                 /*evas_object_smart_callback_add(check, "changed", _location_chk_changed_cb, (void *)1); */
1507                 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
1508                 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1509                 evas_object_propagate_events_set(check, EINA_FALSE);
1510                 evas_object_repeat_events_set(check, EINA_TRUE);
1511         }
1512         return check;
1513 }
1514
1515
1516
1517
1518 static void _location_gl_del(void *data, Evas_Object *obj)
1519 {
1520         Location_Item_Data *id = data;
1521         if (id)
1522                 free(id);
1523 }
1524
1525
1526
1527
1528 Evas_Object *_create_location_list(void *data)
1529 {
1530         appdata *ad = data;
1531         if (ad == NULL) {
1532                 DBG("%s", "_create_location_list - appdata is null");
1533                 return NULL;
1534         }
1535
1536         Evas_Object *genlist  = NULL;
1537         struct _location_menu_item *menu_its = NULL;
1538         Elm_Genlist_Item_Class *temp_itc = NULL;
1539         int idx = 0;
1540
1541         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1542         itc->item_style = "1text.1icon.1";
1543         itc->func.text_get = _gl_location_title_get;
1544         itc->func.content_get = _gl_location_check_get;
1545         itc->func.del = _location_gl_del;
1546
1547         Evas_Object *layout = elm_layout_add(ad->nf);
1548         elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1549         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1550
1551         genlist = elm_genlist_add(layout);
1552         elm_genlist_block_count_set(genlist, 14);
1553         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1554
1555 #ifdef _CIRCLE
1556         Elm_Genlist_Item_Class *padding = elm_genlist_item_class_new();
1557         padding->item_style = "padding";
1558         padding->func.del = _location_gl_del;
1559
1560         elm_genlist_item_append(genlist, padding, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1561 #endif
1562
1563         menu_its = location_menu_its;
1564
1565         int location_val = 0;
1566         vconf_get_int("db/location/setting/GpsEnabled", &location_val);
1567         location_menu_its[0].is_enable = location_val;
1568
1569         Elm_Genlist_Item_Class *itc_arr[1] = { itc};
1570
1571         for (idx = 0; idx < 1; idx++) {
1572                 Location_Item_Data *id = calloc(sizeof(Location_Item_Data), 1);
1573                 if (id) {
1574                         id->index = idx;
1575                         id->item = elm_genlist_item_append(
1576                                                    genlist,                             /* genlist object */
1577                                                    itc_arr[idx],                        /* item class */
1578                                                    id,                          /* data */
1579                                                    NULL,
1580                                                    ELM_GENLIST_ITEM_NONE,
1581                                                    menu_its[idx].func,  /* call back */
1582                                                    ad);
1583                 }
1584         }
1585         elm_genlist_item_class_free(itc);
1586
1587         location_genlist = genlist;
1588
1589         elm_object_part_content_set(layout, "elm.genlist", genlist);
1590
1591         return layout;
1592 }
1593
1594 static void _location_cb(void *data, Evas_Object *obj, void *event_info)
1595 {
1596         DBG("Setting - %s", "Setting - _location_cb is called");
1597
1598         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1599         elm_genlist_item_selected_set(it, EINA_FALSE);
1600
1601         appdata *ad = data;
1602         if (ad == NULL) {
1603                 DBG("%s", "Setting - _location_cb - ad or check is null");
1604                 return;
1605         }
1606
1607         DBG(" before %d", location_menu_its[0].is_enable);
1608         location_menu_its[0].is_enable = !location_menu_its[0].is_enable;
1609         DBG(" after %d", location_menu_its[0].is_enable);
1610         vconf_set_int("db/location/setting/GpsEnabled", location_menu_its[0].is_enable);
1611         /*location_menu_its[index].check = check; */
1612         elm_check_state_set(location_menu_its[0].check, (location_menu_its[0].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
1613 }
1614