Tizen 2.4 SDK Rev5
[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
189 #ifdef _CIRCLE
190         const char* navi_title = _("IDS_ST_BUTTON_CLOCK");
191         Eina_Bool title_flag = EINA_TRUE;
192 #else
193         const char* navi_title = NULL;
194         Eina_Bool title_flag = FALSE;
195 #endif
196         nf_it = elm_naviframe_item_push(ad->nf, navi_title, NULL, NULL, layout, NULL);
197         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_clock_cb, ad);
198         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_clock_cb, ad); */
199         elm_naviframe_item_title_enabled_set(nf_it, title_flag, EINA_FALSE);
200
201         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
202         is_running_clock = 1;
203
204         ad->MENU_TYPE = SETTING_CLOCK;
205 }
206
207 void notification_cb(void *data, Evas_Object *obj, void *event_info)
208 {
209         Evas_Object *genlist = NULL;
210         Elm_Object_Item *nf_it = NULL;
211         appdata *ad = data;
212
213         if (ad == NULL) {
214                 DBG("Setting - ad is null");
215                 return;
216         }
217
218         if (running) {
219                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
220                 return;
221         }
222
223         _initialize_noti();
224
225         genlist = _create_noti_list(data);
226         if (genlist == NULL) {
227                 DBG("%s", "notification_cb - genlist is null");
228                 return;
229         }
230 #ifdef _CIRCLE
231         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
232 #else
233         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
234 #endif
235         elm_naviframe_item_pop_cb_set(nf_it, _clear_noti_cb, ad);
236         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
237
238         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
239
240         ad->MENU_TYPE = SETTING_NOTIFICATION;
241 }
242
243 void homescreen_cb(void *data, Evas_Object *obj, void *event_info)
244 {
245         Evas_Object *layout = NULL;
246         Elm_Object_Item *nf_it = NULL;
247         appdata *ad = data;
248
249         if (ad == NULL) {
250                 DBG("Setting - ad is null");
251                 return;
252         }
253
254         if (running) {
255                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
256                 return;
257         }
258
259         /*layout = _create_homescreen_list(data); */
260         layout = create_wallpaper_list(data);
261         if (layout == NULL) {
262                 DBG("%s", "homescreen cb - layout is null");
263                 return;
264         }
265 #ifdef _CIRCLE
266         const char* navi_title = _("IDS_ST_BODY_WALLPAPERS");
267         Eina_Bool title_flag = EINA_TRUE;
268 #else
269         const char* navi_title = NULL;
270         Eina_Bool title_flag = FALSE;
271 #endif
272         nf_it = elm_naviframe_item_push(ad->nf, navi_title, NULL, NULL, layout, NULL);
273         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_homescreen_cb, ad); */
274         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_homescreen_cb, ad);
275         elm_naviframe_item_title_enabled_set(nf_it, title_flag, EINA_FALSE);
276
277         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
278
279         ad->MENU_TYPE = SETTING_HOMESCREEN;
280 }
281
282
283 void sound_cb(void *data, Evas_Object *obj, void *event_info)
284 {
285         Evas_Object *genlist = NULL;
286         Elm_Object_Item *nf_it = NULL;
287         appdata *ad = data;
288
289         if (ad == NULL) {
290                 DBG("Setting - ad is null");
291                 return;
292         }
293
294         if (running) {
295                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
296                 return;
297         }
298
299         _initialize();
300
301         genlist = _create_sound_list(data);
302         if (genlist == NULL) {
303                 DBG("%s", "sound cb - genlist is null");
304                 return;
305         }
306 #ifdef _CIRCLE
307         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
308 #else
309         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
310 #endif
311         elm_naviframe_item_pop_cb_set(nf_it, _clear_sound_cb, ad);
312         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
313
314         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
315
316         ad->MENU_TYPE = SETTING_SOUND;
317 }
318
319 void volume_cb(void *data, Evas_Object *obj, void *event_info)
320 {
321         Evas_Object *genlist = NULL;
322         Elm_Object_Item *nf_it = NULL;
323         appdata *ad = data;
324
325         if (ad == NULL) {
326                 DBG("Setting - ad is null");
327                 return;
328         }
329
330         if (running) {
331                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
332                 return;
333         }
334
335         _initialize_volume();
336
337         genlist = _create_volume_list(data);
338         if (genlist == NULL) {
339                 DBG("%s", "volume cb - genlist is null");
340                 return;
341         }
342 #ifdef _CIRCLE
343         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
344 #else
345         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
346 #endif
347         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_volume_cb, ad); */
348         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
349
350         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
351
352         ad->MENU_TYPE = SETTING_VOLUME;
353 }
354
355 void display_cb(void *data, Evas_Object *obj, void *event_info)
356 {
357         Evas_Object *genlist = NULL;
358         Elm_Object_Item *nf_it = NULL;
359         appdata *ad = data;
360
361         if (ad == NULL) {
362                 DBG("Setting - ad is null");
363                 return;
364         }
365
366         if (running) {
367                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
368                 return;
369         }
370
371         _init_display();
372
373         genlist = _create_display_list(data);
374         if (genlist == NULL) {
375                 DBG("%s", "display cb - genlist is null");
376                 return;
377         }
378 #ifdef _CIRCLE
379         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
380 #else
381         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
382 #endif
383
384         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_display_cb, ad); */
385         evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, _clear_display_cb, ad);
386         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
387
388         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
389
390         ad->MENU_TYPE = SETTING_DISPLAY;
391 }
392
393 void keyboard_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         appdata *ad = data;
398
399         if (ad == NULL) {
400                 DBG("Setting - ad is null");
401                 return;
402         }
403
404         if (running) {
405                 return;
406         }
407
408         if (!running) {
409                 app_control_h service;
410                 app_control_create(&service);
411                 app_control_set_package(service, "org.tizen.w-text-input-setting");
412                 app_control_send_launch_request(service, NULL, NULL);
413                 app_control_destroy(service);
414
415                 running = true;
416
417                 if (running_timer) {
418                         ecore_timer_del(running_timer);
419                         running_timer = NULL;
420                 }
421                 running_timer = ecore_timer_add(0.5, (Ecore_Task_Cb)_app_ctrl_timer_cb, NULL);
422         }
423 }
424
425 void battery_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 *layout = 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                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
440                 return;
441         }
442
443         _initialize_battery();
444         layout = _battery_status_cb(data);
445         if (layout == NULL) {
446                 DBG("%s", "battery cb - layout is null");
447                 return;
448         }
449 #ifdef _CIRCLE
450         const char* navi_title = _("IDS_ST_BODY_BATTERY_ABB");
451         Eina_Bool title_flag = EINA_TRUE;
452 #else
453         const char* navi_title = NULL;
454         Eina_Bool title_flag = FALSE;
455 #endif
456         nf_it = elm_naviframe_item_push(ad->nf, navi_title, NULL, NULL, layout, NULL);
457         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_battery_list_cb, ad); */
458         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_battery_cb, ad);
459         elm_naviframe_item_title_enabled_set(nf_it, title_flag, EINA_FALSE);
460
461         ad->MENU_TYPE = SETTING_BATTERY;
462 }
463
464 void bluetooth_cb(void *data, Evas_Object *obj, void *event_info)
465 {
466         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
467
468         Evas_Object *genlist = NULL;
469         Elm_Object_Item *nf_it = NULL;
470         appdata *ad = data;
471
472         if (ad == NULL) {
473                 DBG("Setting - ad is null");
474                 return;
475         }
476
477         if (running) {
478                 return;
479         }
480
481         initialize_bt();
482
483         genlist = _create_bt_list(data);
484         if (genlist == NULL) {
485                 DBG("%s", "bluetooth cb - genlist is null");
486                 return;
487         }
488 #ifdef _CIRCLE
489         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
490 #else
491         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
492 #endif
493         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_bluetooth_cb, ad); */
494         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
495
496         ad->MENU_TYPE = SETTING_BLUETOOTH;
497 }
498
499 void location_cb(void *data, Evas_Object *obj, void *event_info)
500 {
501         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
502
503         Evas_Object *genlist = NULL;
504         Elm_Object_Item *nf_it = NULL;
505         appdata *ad = data;
506
507         if (ad == NULL) {
508                 DBG("Setting - ad is null");
509                 return;
510         }
511
512         if (running) {
513                 return;
514         }
515
516         genlist = _create_location_list(data);
517         if (genlist == NULL) {
518                 DBG("%s", "bluetooth cb - genlist is null");
519                 return;
520         }
521 #ifdef _CIRCLE
522         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
523 #else
524         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
525 #endif
526         /*elm_naviframe_item_pop_cb_set(nf_it, _clear_bluetooth_cb, ad); */
527         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
528
529         ad->MENU_TYPE = SETTING_LOCATION;
530 }
531
532 void motion_cb(void *data, Evas_Object *obj, void *event_info)
533 {
534         Evas_Object *genlist = NULL;
535         Elm_Object_Item *nf_it = NULL;
536         appdata *ad = data;
537
538         if (ad == NULL) {
539                 DBG("Setting - ad is null");
540                 return;
541         }
542
543         if (running) {
544                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
545                 return;
546         }
547
548         _initialize_motion();
549         genlist = _create_motion_list(data);
550         if (genlist == NULL) {
551                 DBG("%s", "motion cb - genlist is null");
552                 return;
553         }
554 #ifdef _CIRCLE
555         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
556 #else
557         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
558 #endif
559         elm_naviframe_item_pop_cb_set(nf_it, _clear_motion_cb, ad);
560         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
561
562         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
563 }
564
565 void lockscreen_cb(void *data, Evas_Object *obj, void *event_info)
566 {
567         Evas_Object *layout = NULL;
568         Elm_Object_Item *nf_it = NULL;
569
570         appdata *ad = data;
571
572         if (ad == NULL) {
573                 DBG("Setting - ad is null");
574                 return;
575         }
576
577         if (running) {
578                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
579                 return;
580         }
581
582         layout = create_privacy_list(data);
583         if (layout == NULL) {
584                 DBG("%s", "lockscreen cb - genlist is null");
585                 return;
586         }
587 #ifdef _CIRCLE
588         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, "empty");
589 #else
590         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
591 #endif
592
593         elm_naviframe_item_pop_cb_set(nf_it, clear_privacy_cb, ad);
594         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
595
596         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
597
598         ad->MENU_TYPE = SETTING_SCREEN_LOCK;
599 }
600
601 void double_pressing_cb(void *data, Evas_Object *obj, void *event_info)
602 {
603         Evas_Object *layout = NULL;
604         Elm_Object_Item *nf_it = NULL;
605
606         appdata *ad = data;
607
608         if (ad == NULL) {
609                 DBG("Setting - ad is null");
610                 return;
611         }
612
613         if (running) {
614                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
615                 return;
616         }
617
618         init_double_pressing(ad);
619
620         layout = create_double_app_list(data);
621         if (layout == NULL) {
622                 DBG("%s", "double cb - genlist is null");
623                 return;
624         }
625
626 #ifdef _CIRCLE
627         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, "empty");
628 #else
629         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
630 #endif
631         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, clear_double_app_cb, ad);
632         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
633
634         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
635
636         ad->MENU_TYPE = SETTING_DOUBLE_PRESSING;
637 }
638
639 void language_cb(void *data, Evas_Object *obj, void *event_info)
640 {
641         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
642
643         Evas_Object *genlist = NULL;
644         Elm_Object_Item *nf_it = NULL;
645         appdata *ad = data;
646
647         if (ad == NULL) {
648                 DBG("Setting - ad is null");
649                 return;
650         }
651
652         if (running) {
653                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
654                 return;
655         }
656
657         if (is_connected_GM()) {
658                 DBG("Setting - language can not change!!");
659
660                 /* automatic freed!! */
661                 struct _toast_data *toast = _create_toast(ad, _("IDS_ST_TPOP_CHANGE_LANGUAGE_ON_MOBILE_DEVICE"));
662                 if (toast) {
663                         _show_toast(ad, toast);
664                 }
665                 return;
666         }
667
668         _initialize_language(ad);
669         _set_launguage_update_cb(_update_main_menu_title);
670
671         genlist = _create_lang_list(data);
672         if (genlist == NULL) {
673                 DBG("%s", "language cb - genlist is null");
674                 return;
675         }
676 #ifdef _CIRCLE
677         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
678 #else
679         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
680 #endif
681         elm_naviframe_item_pop_cb_set(nf_it, _clear_lang_cb, ad);
682         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
683
684         ad->MENU_TYPE = SETTING_LANGUAGE;
685 }
686
687 void safety_cb(void *data, Evas_Object *obj, void *event_info)
688 {
689         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
690
691         appdata *ad = data;
692         if (ad == NULL) {
693                 DBG("Setting - ad is null");
694                 return;
695         }
696
697         if (running) {
698                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
699                 return;
700         }
701
702         Evas_Object *layout = NULL;
703         Elm_Object_Item *nf_it = NULL;
704
705         layout = create_safety_list(ad);
706         if (layout == NULL) {
707                 DBG("%s", "safety cb - genlist is null");
708                 return;
709         }
710
711 #ifdef _CIRCLE
712         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, "empty");
713 #else
714         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
715 #endif
716         elm_naviframe_item_pop_cb_set(nf_it, clear_safety_cb, ad);
717         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
718
719         ad->MENU_TYPE = SETTING_SAFETY;
720 }
721
722 void reset_gear_cb(void *data, Evas_Object *obj, void *event_info)
723 {
724         appdata *ad = data;
725         if (ad == NULL) {
726                 DBG("Setting - ad is null");
727                 return;
728         }
729
730         if (running) {
731                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
732                 return;
733         }
734
735         _reset_popup_cb(data, obj, event_info);
736
737         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
738
739         ad->MENU_TYPE = SETTING_RESET;
740 }
741
742 void gear_info_cb(void *data, Evas_Object *obj, void *event_info)
743 {
744         Evas_Object *genlist = NULL;
745         Elm_Object_Item *nf_it = NULL;
746         appdata *ad = data;
747
748         if (ad == NULL) {
749                 DBG("Setting - ad is null");
750                 return;
751         }
752
753         if (running) {
754                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
755                 return;
756         }
757
758         genlist = _create_info_list(data);
759         if (genlist == NULL) {
760                 DBG("%s", "info cb - genlist is null");
761                 return;
762         }
763 #ifdef _CIRCLE
764         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, "empty");
765 #else
766         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
767 #endif
768         elm_naviframe_item_pop_cb_set(nf_it, _clear_info_cb, ad);
769         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
770
771         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
772
773         ad->MENU_TYPE = SETTING_INFO;
774 }
775
776 static Eina_Bool _app_ctrl_timer_cb(void *data)
777 {
778         DBG("reset flag");
779         running = false;
780         running_timer = NULL;
781         return ECORE_CALLBACK_CANCEL;
782 }
783
784 static Eina_Bool _scroller_timer_cb(void *data)
785 {
786         DBG("hide scroller bar");
787
788         Evas_Object *genlist = data;
789
790         if (genlist)
791                 elm_layout_signal_emit(genlist, "do-hide-vbar", "");
792
793         return ECORE_CALLBACK_CANCEL;
794 }
795
796 static void _quit_cb(void *data, Evas_Object *obj, void *ei)
797 {
798         /*
799         //To make your application go to background,
800         //Call the elm_win_lower() instead
801         Evas_Object *win = (Evas_Object *) data;
802         elm_win_lower(win);
803         */
804         elm_exit();
805 }
806
807 static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
808 {
809         /* Stop timer and task */
810         appdata *ad = data;
811         if (running_timer) {
812                 ecore_timer_del(running_timer);
813                 running_timer = NULL;
814         }
815         if (running)
816                 running = false;
817
818         if (scrl_timer) {
819                 ecore_timer_del(scrl_timer);
820                 scrl_timer = NULL;
821         }
822
823         if (ad && ad->win_main) {
824                 elm_win_lower(ad->win_main);
825         }
826
827         return EINA_FALSE;
828 }
829
830 static Evas_Object *_create_bg(Evas_Object *parent)
831 {
832         Evas_Object *bg;
833
834         if (parent == NULL) return NULL;
835
836         bg = elm_bg_add(parent);
837         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
838         elm_win_resize_object_add(parent, bg);
839         evas_object_show(bg);
840
841         return bg;
842 }
843
844 static Evas_Object *_create_conform(Evas_Object *parent)
845 {
846         Evas_Object *conform;
847
848         if (parent == NULL) return NULL;
849
850         conform = elm_conformant_add(parent);
851         evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
852         elm_win_resize_object_add(parent, conform);
853         evas_object_show(conform);
854
855         return conform;
856 }
857
858
859 static Evas_Object *_create_layout_main(Evas_Object *parent)
860 {
861         Evas_Object *layout;
862
863         if (parent == NULL) return NULL;
864
865         layout = elm_layout_add(parent);
866
867         if (layout == NULL) {
868                 DBG("Failed elm_layout_add.\n");
869                 return NULL;
870         }
871
872         elm_layout_theme_set(layout, "layout", "application", "default");
873         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
874         elm_win_resize_object_add(parent, layout);
875
876         evas_object_show(layout);
877
878         return layout;
879 }
880
881 static void _lang_changed(app_event_info_h event_info, void *data)
882 {
883         appdata *ad = data;
884         if (ad && ad->MENU_TYPE == SETTING_LANGUAGE)
885                 return;
886
887         char *locale = vconf_get_str(VCONFKEY_LANGSET);
888         if (locale) {
889                 DBG("Setting - language is changed : %s", locale);
890                 elm_language_set(locale);
891                 elm_config_all_flush();
892         }
893 }
894
895 static void _window_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
896 {
897         appdata *ad = (appdata *)data;
898         evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
899 }
900
901 static void init_values(appdata *ad)
902 {
903         if (ad == NULL) {
904                 return;
905         }
906
907         ad->is_motion_smart_relay_on = 1;
908         ad->is_motion_wake_up_on = 1;
909 }
910
911 static int init_clocksetting(appdata *ad)
912 {
913         DBG("init_clocksetting() is called!");
914
915         if (ad == NULL)
916                 return EINA_FALSE;
917
918         ad->bg = _create_bg(ad->win_main);
919
920         /* Conformant *** disable comform : lauching time issue *** */
921         /* Base Layout */
922         ad->layout_main = _create_layout_main(ad->win_main);
923         /*ad->conform = _create_conform(ad->win_main); */
924         if (ad->layout_main == NULL)
925                 return -1;
926
927
928         /* Indicator */
929         elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
930
931         /* Naviframe */
932         ad->nf = _create_naviframe_layout(ad->layout_main);
933
934         /* Naviframe Content */
935         _create_view_layout(ad);
936
937         init_values(ad);
938
939         int vibration_level = 0;
940         vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vibration_level);
941
942         DBG("Setting - vibration level : %d", vibration_level);
943
944         if (vibration_level == 2) {     /* wrong value!! */
945                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
946                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
947         }
948         return EINA_TRUE;
949 }
950
951 static Evas_Object *_create_naviframe_layout(Evas_Object *parent)
952 {
953         Evas_Object *nf = NULL;
954
955         if (parent == NULL) return NULL;
956
957         nf = elm_naviframe_add(parent);
958         elm_object_part_content_set(parent, "elm.swallow.content", nf);
959
960         evas_object_show(nf);
961
962         return nf;
963 }
964
965 static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
966 {
967         char buf[512];
968         Item_Data *id = data;
969         int index = id->index;
970 #if 0
971         DBG("_gl_text_get : -----> part : %s ", part);
972 #endif
973         /*
974         char expression[32];
975
976         if( index == LANGUAGE_MENU_INDEX ) {
977                 if( is_connected_GM() ) {
978                         strcpy(expression, "<font color=#515151>%s</font>");
979                 } else {
980                         strcpy(expression, "%s");
981                 }
982         } else {
983                 strcpy(expression, "%s");
984         }*/
985
986         if (is_emergency)
987                 snprintf(buf, sizeof(buf) - 1, "%s", _(setting_emergency_menu_its[index].name));
988         else
989                 snprintf(buf, sizeof(buf) - 1, "%s", _(setting_menu_its[index].name));
990
991         return strdup(buf);
992 }
993
994 static Evas_Object *_gl_icon_get(void *data, Evas_Object *obj, const char *part)
995 {
996         char buf[1024];
997         Item_Data *id = data;
998         int index = id->index;
999
1000 #if 1
1001         DBG("_gl_icon_get : -----> part : %s ", part);
1002 #endif
1003         if (part && !strcmp(part, "elm.icon")) {
1004                 if (is_emergency)
1005                         snprintf(buf, sizeof(buf) - 1, "%s", setting_emergency_menu_its[index].icon_name);
1006                 else
1007                         snprintf(buf, sizeof(buf) - 1, "%s", setting_menu_its[index].icon_name);
1008
1009                 Evas_Object *icon = elm_image_add(obj);
1010                 elm_image_file_set(icon, EDJE_PATH, buf);
1011                 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
1012                 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1013                 evas_object_size_hint_min_set(icon, 52, 52);
1014
1015                 return icon;
1016         }
1017         return NULL;
1018 }
1019
1020 static void _gl_del(void *data, Evas_Object *obj)
1021 {
1022         Item_Data *id = data;
1023         if (id)
1024                 free(id);
1025 }
1026
1027 static Evas_Object *_gl_indicator_get(void *data, Evas_Object *obj, const char *part)
1028 {
1029         Evas_Object *layout = NULL;
1030
1031         layout = elm_layout_add(obj);
1032         elm_layout_file_set(layout, EDJE_PATH, "setting/indicator");
1033
1034         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1035         indicator_view_update(layout);
1036         evas_object_show(layout);
1037         DBG("indicator get!!!!!!!!");
1038
1039         return layout;
1040 }
1041
1042 #ifdef O_TYPE
1043 static char *
1044 _gl_menu_title_text_get(void *data, Evas_Object *obj, const char *part)
1045 {
1046         char buf[1024];
1047
1048         snprintf(buf, 1023, "%s", "Setting");
1049         return strdup(buf);
1050 }
1051 #endif
1052
1053 static Evas_Object *_create_mainlist_winset(Evas_Object *parent, appdata *ad)
1054 {
1055         Evas_Object *genlist = NULL;
1056         struct _menu_item *menu_its = NULL;
1057         int idx = 0;
1058
1059         /* Create item class */
1060         elm_theme_extension_add(NULL, EDJE_PATH);
1061         Elm_Genlist_Item_Class *itc_tmp = elm_genlist_item_class_new();
1062         itc_tmp->item_style = "setting_indicator";
1063         itc_tmp->func.content_get = _gl_indicator_get;
1064         itc_tmp->func.del = _gl_del;
1065
1066         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1067
1068 #ifdef O_TYPE
1069         itc->item_style = "1text";
1070 #else
1071         itc->item_style = "1text.1icon";
1072 #endif
1073         itc->func.text_get = _gl_text_get;
1074         itc->func.content_get = _gl_icon_get;
1075         itc->func.del = _gl_del;
1076
1077         genlist = elm_genlist_add(ad->nf);
1078         if (genlist == NULL) {
1079                 elm_genlist_item_class_free(itc);
1080                 elm_genlist_item_class_free(itc_tmp);
1081                 return NULL;
1082         }
1083         elm_genlist_realization_mode_set(genlist, EINA_TRUE);
1084         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1085
1086 #ifdef _CIRCLE
1087         Elm_Genlist_Item_Class *title_item = elm_genlist_item_class_new();
1088         title_item ->func.text_get = _gl_menu_title_text_get;
1089         title_item->item_style = "title";
1090         title_item->func.del = _gl_del;
1091
1092         elm_genlist_item_append(genlist, title_item, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1093
1094         elm_genlist_item_class_free(title_item);
1095 #endif
1096
1097 #ifndef _CIRCLE
1098         Item_Data *id_indi = calloc(sizeof(Item_Data), 1);
1099         if (id_indi) {
1100                 id_indi->index = idx;
1101                 id_indi->item = elm_genlist_item_append(
1102                                                         genlist,
1103                                                         itc_tmp,
1104                                                         id_indi,
1105                                                         NULL,
1106                                                         ELM_GENLIST_ITEM_NONE,
1107                                                         NULL, NULL);
1108                 elm_genlist_item_select_mode_set(id_indi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1109         }
1110 #endif
1111
1112 #if 0
1113         vconf_get_bool(VCONFKEY_SETAPPL_EMERGENCY_STATUS_BOOL, &is_emergency);
1114 #else
1115         is_emergency = 0;
1116 #endif
1117         int item_count = 0;
1118         if (is_emergency) {
1119                 menu_its = setting_emergency_menu_its;
1120                 item_count = sizeof(setting_emergency_menu_its) / sizeof(struct _menu_item);
1121         } else {
1122                 menu_its = setting_menu_its;
1123                 item_count = sizeof(setting_menu_its) / sizeof(struct _menu_item);
1124         }
1125
1126         DBG("Setting - Main menu item count: %d", item_count);
1127
1128         /*while (menu_its[idx].name != NULL) { */
1129         for (idx = 0; idx < item_count - 1; idx++) {
1130                 Item_Data *id = calloc(sizeof(Item_Data), 1);
1131                 if (id) {
1132                         id->index = idx;
1133                         id->item = elm_genlist_item_append(
1134                                                    genlist,                     /* genlist object */
1135                                                    itc,                         /* item class */
1136                                                    id,                  /* data */
1137                                                    NULL,
1138                                                    ELM_GENLIST_ITEM_NONE,
1139                                                    menu_its[idx].func,
1140                                                    ad);
1141                 }
1142         }
1143 #ifdef _CIRCLE
1144         Elm_Genlist_Item_Class *padding = elm_genlist_item_class_new();
1145         padding->item_style = "padding";
1146         padding->func.del = _gl_del;
1147
1148         elm_genlist_item_append(genlist, padding, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1149         elm_genlist_item_class_free(padding);
1150 #endif
1151
1152         elm_genlist_item_class_free(itc);
1153         elm_genlist_item_class_free(itc_tmp);
1154
1155
1156
1157         indicator_set_vconf_changed_cb(ad);
1158
1159         return genlist;
1160 }
1161
1162 static void _update_main_menu_title(void *data)
1163 {
1164         DBG("_update_main_menu_title() is called");
1165
1166         appdata *ad = data;
1167         if (ad == NULL) {
1168                 DBG("appdata is NULL");
1169                 return;
1170         }
1171
1172         if (ad->main_genlist) {
1173                 elm_genlist_realized_items_update(ad->main_genlist);
1174         }
1175 }
1176
1177 static void _naviframe_back_cb(void *data, Evas_Object *obj, void *event_info)
1178 {
1179         appdata *ad = data;
1180         if (ad == NULL)
1181                 return;
1182
1183         if (ad->MENU_TYPE == SETTING_BLUETOOTH) {
1184                 clear_bt_resource();
1185                 ad->MENU_TYPE = SETTING_MAIN;
1186         } else if (ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH) {
1187                 _clear_volume_resources();
1188
1189                 ad->MENU_TYPE = SETTING_VOLUME;
1190         } else if (ad->MENU_TYPE == SETTING_SOUND_RINGTONE) {
1191                 _stop_player();
1192
1193                 ad->MENU_TYPE = SETTING_SOUND;
1194         } else if (ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION) {
1195                 _stop_wav_player();
1196
1197                 ad->MENU_TYPE = SETTING_SOUND;
1198         }
1199
1200         ea_naviframe_back_cb(data, obj, event_info);
1201 }
1202
1203 static void _create_view_layout(appdata *ad)
1204 {
1205         Evas_Object *genlist = NULL;
1206         Evas_Object *btn  = NULL;
1207         Elm_Object_Item *nf_it = NULL;
1208
1209         if (ad == NULL) return;
1210         if (ad->nf == NULL) return;
1211
1212         genlist = _create_mainlist_winset(ad->win_main, ad);
1213         ad->main_genlist = genlist;
1214
1215 #ifdef O_TYPE
1216         Evas_Object *circle_genlist = eext_circle_object_genlist_add(genlist, ad->circle_surface);
1217         eext_circle_object_genlist_scroller_policy_set(circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1218         eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
1219 #endif
1220         ea_object_event_callback_add(ad->nf, EA_CALLBACK_BACK, _naviframe_back_cb, ad);
1221         ea_object_event_callback_add(ad->nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
1222
1223 #ifdef _CIRCLE
1224         nf_it = elm_naviframe_item_push(ad->nf, NULL, btn, NULL, genlist, "empty");
1225 #else
1226         nf_it = elm_naviframe_item_push(ad->nf, NULL, btn, NULL, genlist, NULL);
1227 #endif
1228         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1229
1230         elm_naviframe_item_pop_cb_set(nf_it, _pop_cb, ad); /* ad->win_main */
1231
1232         /*register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL); */
1233 }
1234
1235 static Evas_Object *create_win(const char *name)
1236 {
1237         Evas_Object *eo;
1238
1239
1240         eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
1241         if (!eo)
1242                 return NULL;
1243
1244         elm_win_title_set(eo, name);
1245         elm_win_autodel_set(eo, EINA_TRUE);
1246
1247         if (elm_win_wm_rotation_supported_get(eo)) {
1248                 int rots[4] = { 0, 90, 180, 270 };
1249                 elm_win_wm_rotation_available_rotations_set(eo, (const int *)(&rots), 4);
1250         }
1251
1252         evas_object_smart_callback_add(eo, "delete,request", _quit_cb, NULL);
1253
1254         return eo;
1255 }
1256 int _time_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
1257 {
1258         DBG("_time_cb");
1259         return 0;
1260 }
1261
1262 bool app_create(void *data)
1263 {
1264         /*DBG("[TIME] 3. it taked %d msec from main to setting_main_app_create ", appcore_measure_time()); */
1265         /*appcore_measure_start(); */
1266
1267         DBG("Setting - app_create");
1268
1269         appdata *ad = (appdata *) data;
1270         char *locale;
1271
1272         DBG("app_create start.");
1273
1274         ecore_x_window_size_get(ecore_x_window_root_first_get(), &ad->root_w, &ad->root_h);
1275
1276         ad->win_main = create_win(PACKAGE);
1277         if (ad->win_main == NULL)
1278                 return false;
1279
1280         ad->conform = _create_conform(ad->win_main);
1281
1282 #ifdef O_TYPE
1283         ad->circle_surface = eext_circle_surface_conformant_add(ad->conform);
1284 #endif
1285         evas_object_resize(ad->win_main, ad->root_w, ad->root_h);
1286
1287         double scale = elm_config_scale_get();
1288         if (scale < 1.0) {
1289                 DBG("Setting - scale is more less than 1.0");
1290                 elm_config_scale_set(1.0);
1291         }
1292
1293         ad->evas = evas_object_evas_get(ad->win_main);
1294
1295         locale = vconf_get_str(VCONFKEY_LANGSET);
1296         if (locale) {
1297                 elm_language_set(locale);
1298         }
1299
1300 #ifdef FEATURE_SETTING_CHANGEABLE
1301         /* set color table for changeable color */
1302         ad->color_table = _changeable_colors_set();
1303 #endif
1304
1305         ad->is_first_launch = 1;
1306
1307
1308
1309         init_clocksetting(ad);
1310
1311         DBG("app_create finish.");
1312
1313         DBG("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
1314         /*appcore_measure_start(); */
1315
1316         evas_object_show(ad->win_main);
1317
1318         int ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, _time_cb, NULL);
1319         DBG("ret = %d", ret);
1320
1321         return true;
1322 }
1323
1324 void app_terminate(void *data)
1325 {
1326         DBG("Setting - app_terminate");
1327
1328         appdata *ad = data;
1329
1330         indicator_unset_vconf_changed_cb();
1331
1332         if (ad->alert_rdg) {
1333                 ad->alert_rdg = NULL;
1334         }
1335         if (ad->datetime) {
1336                 ad->datetime = NULL;
1337         }
1338         if (ad->dt_genlist_item_of_date) {
1339                 ad->dt_genlist_item_of_date = NULL;
1340         }
1341         if (ad->dt_genlist_item_of_time) {
1342                 ad->dt_genlist_item_of_time = NULL;
1343         }
1344         if (ad->pref_arm_rdg) {
1345                 ad->pref_arm_rdg = NULL;
1346         }
1347         if (ad->main_genlist) {
1348                 ad->main_genlist = NULL;
1349         }
1350         if (ad->double_rdg) {
1351                 ad->double_rdg = NULL;
1352         }
1353         if (ad->font_size_rdg) {
1354                 ad->font_size_rdg = NULL;
1355         }
1356         if (ad->language_item) {
1357                 ad->language_item = NULL;
1358         }
1359         if (ad->language_rdg) {
1360                 ad->language_rdg = NULL;
1361         }
1362
1363         /* unregister motion vconf changed callback */
1364         /*unregister_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling); */
1365
1366 #ifdef FEATURE_SETTING_CHANGEABLE
1367         if (ad->color_table) {
1368                 _changeable_colors_free(ad->color_table);
1369                 ad->color_table = NULL;
1370         }
1371 #endif
1372         int ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE);
1373         DBG("222222ret = %d", ret);
1374 }
1375
1376 void app_pause(void *data)
1377 {
1378         DBG("Setting - app_pause()");
1379
1380         appdata *ad = data;
1381         if (ad) {
1382                 if (ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH) {
1383                         _stop_all_volume_sound();
1384                 } else if (ad->MENU_TYPE == SETTING_SOUND_RINGTONE ||
1385                                    ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION) {
1386                         _stop_all_sound_play();
1387                 } else if (ad->MENU_TYPE == SETTING_BATTERY) {
1388                         _clear_battery_cb(NULL, NULL, NULL, NULL);
1389                 } else if (ad->MENU_TYPE == SETTING_SOUND) {
1390                         _stop_all_sound_play();
1391                 }
1392         }
1393 }
1394
1395 void app_resume(void *data)
1396 {
1397         DBG("Setting - app_resume()");
1398
1399         appdata *ad = data;
1400
1401         if (running)
1402                 running = false;
1403 }
1404
1405 void app_reset(app_control_h service, void *data)
1406 {
1407         DBG("Setting - app_reset()");
1408
1409         appdata *ad = data;
1410
1411         char *operation = NULL;
1412         app_control_get_operation(service, &operation);
1413         DBG("operation : %s", operation);
1414         if (!ad->is_first_launch) {
1415                 if (operation && !strcmp(operation, "http://tizen.org/appcontrol/operation/main")) {
1416                         Elm_Object_Item *bottom = elm_naviframe_bottom_item_get(ad->nf);
1417                         Elm_Object_Item *top = elm_naviframe_top_item_get(ad->nf);
1418
1419                         if (ad->popup) {
1420                                 evas_object_del(ad->popup);
1421                                 ad->popup = NULL;
1422                         }
1423
1424                         while (bottom != top) {
1425                                 elm_object_item_del(top);
1426                                 top = elm_naviframe_top_item_get(ad->nf);
1427                         }
1428
1429                         if (ad->main_genlist) {
1430                                 elm_genlist_item_show(elm_genlist_first_item_get(ad->main_genlist),
1431                                                                           ELM_GENLIST_ITEM_SCROLLTO_TOP);
1432                                 elm_layout_signal_emit(ad->main_genlist, "do-show-vbar", "");
1433
1434                                 if (scrl_timer) {
1435                                         ecore_timer_del(scrl_timer);
1436                                         scrl_timer = NULL;
1437                                 }
1438                                 scrl_timer = ecore_timer_add(1, (Ecore_Task_Cb)_scroller_timer_cb, ad->main_genlist);
1439                         }
1440                 }
1441         } else {
1442                 ad->is_first_launch = 0;
1443         }
1444
1445         if (ad->win_main) {
1446                 elm_win_activate(ad->win_main);
1447         }
1448
1449         ad->MENU_TYPE = SETTING_MAIN;
1450
1451         /* Register language change vconf */
1452         /*register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL); */
1453         /*return TRUE; */
1454 }
1455
1456 int main(int argc, char *argv[])
1457 {
1458         DBG("%s,%d", __func__, __LINE__);
1459
1460         appdata ad;
1461
1462         ui_app_lifecycle_callback_s event_callback = {0,};
1463         app_event_handler_h handlers[5] = {NULL, };
1464
1465         int ret = 0;
1466
1467         event_callback.create = app_create;
1468         event_callback.terminate = app_terminate;
1469         event_callback.pause = app_pause;
1470         event_callback.resume = app_resume;
1471         event_callback.app_control = app_reset;
1472
1473         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, NULL, NULL);
1474         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, NULL, NULL);
1475         ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _lang_changed, NULL);
1476         ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, NULL, NULL);
1477         ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL);
1478
1479         memset(&ad, 0x0, sizeof(appdata));
1480
1481         ret = ui_app_main(argc, argv, &event_callback, &ad);
1482         if (APP_ERROR_NONE != ret) {
1483                 \
1484                 ERR("app_main() is failed. err = %d", ret);
1485         }
1486
1487         return ret;
1488 }
1489
1490 #if 0
1491 int main(int argc, char *argv[])
1492 {
1493         appdata ad;
1494
1495         DBG("[TIME] 1. aul_launch -> main :: Setting main : %d msec ", appcore_measure_time_from("APP_START_TIME"));
1496         appcore_measure_start();
1497
1498         struct appcore_ops ops = {
1499                 .create = app_create,
1500                 .terminate = app_terminate,
1501                 .pause = app_pause,
1502                 .resume = app_resume,
1503                 .reset = app_reset,
1504         };
1505
1506         memset(&ad, 0x0, sizeof(appdata));
1507         ops.data = &ad;
1508
1509         ad.MENU_TYPE = SETTING_MAIN;
1510
1511         DBG("[TIME] 2. main : %d msec ", appcore_measure_time());
1512         appcore_measure_start();
1513
1514         return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
1515 }
1516 #endif
1517
1518
1519 /*////////////////////////////////////////////////////////////////////////////////////////////// */
1520
1521
1522 typedef struct Location_Item_Data {
1523         int index;
1524         Elm_Object_Item *item;
1525         Evas_Object *check;
1526         Evas_Object *state_label;
1527 } Location_Item_Data;
1528
1529 struct _location_menu_item {
1530         char *name;
1531         int is_enable;
1532         void (*func)(void *data, Evas_Object *obj, void *event_info);
1533         Evas_Object *check;
1534 };
1535
1536
1537 static struct _location_menu_item location_menu_its[] = {
1538         { "Location",                                           DISABLE, _location_cb           },
1539         { NULL, DISABLE, NULL }
1540 };
1541
1542 static char *_gl_location_title_get(void *data, Evas_Object *obj, const char *part)
1543 {
1544         char buf[1024] = {0,};
1545         Location_Item_Data *id = data;
1546         int index = id->index;
1547         char expression[32];
1548
1549         if (!strcmp(part, "elm.text")) {
1550                 snprintf(buf, sizeof(buf) - 1, "%s", location_menu_its[index].name);
1551         }
1552         return strdup(buf);
1553 }
1554
1555 void _location_chk_changed_cb(void *data, Evas_Object *obj, void *event_info)
1556 {
1557         DBG("Setting - _location_chk_changed_cb() is called!!");
1558
1559         /*vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &sound_menu_its[2].is_enable_touch_sound); */
1560
1561         /*location_menu_its[0].is_enable = !location_menu_its[0].is_enable; */
1562
1563         /* Update touch sound enable state */
1564         /*vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, sound_menu_its[2].is_enable_touch_sound); */
1565         /*vconf_set_bool(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, sound_menu_its[2].is_enable_touch_sound); */
1566 }
1567
1568
1569 #if 0
1570 Evas_Object *_gl_sound_check_get(void *data, Evas_Object *obj, const char *part)
1571 {
1572         Evas_Object *check = NULL;
1573
1574         Sound_Item_Data *id = data;
1575         int index = id->index;
1576
1577         if (!strcmp(part, "elm.icon")) {
1578                 check = elm_check_add(obj);
1579
1580                 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &sound_menu_its[2].is_enable_touch_sound) < 0) {
1581                         sound_menu_its[2].is_enable_touch_sound = TOUCH_SOUND_ENABLE;   /*  default value of touch sounds : on */
1582                 }
1583                 elm_check_state_set(check, (sound_menu_its[2].is_enable_touch_sound) ? EINA_TRUE : EINA_FALSE);
1584                 evas_object_smart_callback_add(check, "changed", _sound_chk_changed_cb, (void *)1);
1585                 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
1586                 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1587                 evas_object_propagate_events_set(check, EINA_FALSE);
1588
1589                 id->check = check;
1590
1591                 index++;
1592         }
1593
1594         return check;
1595 }
1596 #endif
1597 static Evas_Object *_gl_location_check_get(void *data, Evas_Object *obj, const char *part)
1598 {
1599         Evas_Object *check = NULL;
1600
1601         Location_Item_Data *id = data;
1602         int index = id->index;
1603
1604         if (!strcmp(part, "elm.icon")) {
1605                 check = elm_check_add(obj);
1606                 elm_object_style_set(check, "list");
1607                 id->check = check;
1608
1609                 DBG("index = %d", index);
1610                 elm_check_state_set(check, (location_menu_its[index].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
1611
1612                 location_menu_its[index].check = check;
1613
1614                 /*evas_object_smart_callback_add(check, "changed", _location_chk_changed_cb, (void *)1); */
1615                 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
1616                 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1617                 evas_object_propagate_events_set(check, EINA_FALSE);
1618                 evas_object_repeat_events_set(check, EINA_TRUE);
1619         }
1620         return check;
1621 }
1622
1623
1624
1625
1626 static void _location_gl_del(void *data, Evas_Object *obj)
1627 {
1628         Location_Item_Data *id = data;
1629         if (id)
1630                 free(id);
1631 }
1632
1633
1634
1635 #ifdef O_TYPE
1636 static char *
1637 _gl_menu_location_title_text_get(void *data, Evas_Object *obj, const char *part)
1638 {
1639         char buf[1024];
1640
1641         snprintf(buf, 1023, "%s", _("Location"));
1642         return strdup(buf);
1643 }
1644 #endif
1645
1646 Evas_Object *_create_location_list(void *data)
1647 {
1648         appdata *ad = data;
1649         if (ad == NULL) {
1650                 DBG("%s", "_create_location_list - appdata is null");
1651                 return NULL;
1652         }
1653
1654         Evas_Object *genlist  = NULL;
1655         struct _location_menu_item *menu_its = NULL;
1656         Elm_Genlist_Item_Class *temp_itc = NULL;
1657         int idx = 0;
1658
1659         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
1660         itc->item_style = "1text.1icon.1";
1661         itc->func.text_get = _gl_location_title_get;
1662         itc->func.content_get = _gl_location_check_get;
1663         itc->func.del = _location_gl_del;
1664
1665         Evas_Object *layout = elm_layout_add(ad->nf);
1666         elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
1667         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1668
1669         genlist = elm_genlist_add(layout);
1670         elm_genlist_block_count_set(genlist, 14);
1671         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1672
1673 #ifdef _CIRCLE
1674         Elm_Genlist_Item_Class *title_item = elm_genlist_item_class_new();
1675         title_item ->func.text_get = _gl_menu_location_title_text_get;
1676         title_item->item_style = "title";
1677         title_item->func.del = _location_gl_del;
1678
1679         elm_genlist_item_append(genlist, title_item, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1680
1681         elm_genlist_item_class_free(title_item);
1682 #endif
1683
1684         menu_its = location_menu_its;
1685
1686         int location_val = 0;
1687         vconf_get_int("db/location/setting/GpsEnabled", &location_val);
1688         location_menu_its[0].is_enable = location_val;
1689
1690         Elm_Genlist_Item_Class *itc_arr[1] = { itc};
1691
1692         for (idx = 0; idx < 1; idx++) {
1693                 Location_Item_Data *id = calloc(sizeof(Location_Item_Data), 1);
1694                 if (id) {
1695                         id->index = idx;
1696                         id->item = elm_genlist_item_append(
1697                                                    genlist,                             /* genlist object */
1698                                                    itc_arr[idx],                        /* item class */
1699                                                    id,                          /* data */
1700                                                    NULL,
1701                                                    ELM_GENLIST_ITEM_NONE,
1702                                                    menu_its[idx].func,  /* call back */
1703                                                    ad);
1704                 }
1705         }
1706         elm_genlist_item_class_free(itc);
1707
1708 #ifdef _CIRCLE
1709         Elm_Genlist_Item_Class *padding = elm_genlist_item_class_new();
1710         padding->item_style = "padding";
1711         padding->func.del = _location_gl_del;
1712
1713         elm_genlist_item_append(genlist, padding, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1714         elm_genlist_item_class_free(padding);
1715 #endif
1716         location_genlist = genlist;
1717
1718         elm_object_part_content_set(layout, "elm.genlist", genlist);
1719
1720         return layout;
1721 }
1722
1723 static void _location_cb(void *data, Evas_Object *obj, void *event_info)
1724 {
1725         DBG("Setting - %s", "Setting - _location_cb is called");
1726
1727         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1728         elm_genlist_item_selected_set(it, EINA_FALSE);
1729
1730         appdata *ad = data;
1731         if (ad == NULL) {
1732                 DBG("%s", "Setting - _location_cb - ad or check is null");
1733                 return;
1734         }
1735
1736         DBG(" before %d", location_menu_its[0].is_enable);
1737         location_menu_its[0].is_enable = !location_menu_its[0].is_enable;
1738         DBG(" after %d", location_menu_its[0].is_enable);
1739         vconf_set_int("db/location/setting/GpsEnabled", location_menu_its[0].is_enable);
1740         /*location_menu_its[index].check = check; */
1741         elm_check_state_set(location_menu_its[0].check, (location_menu_its[0].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
1742 }
1743