Initialize Tizen 2.3
[apps/home/b2-clocksetting.git] / src / setting.c
1 /*
2  * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
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
18 #include <dlog.h>
19 #include <Ecore_X.h>            /* ecore_x_window_size_get */
20 #include <utilX.h>              /* KEY_END */
21 #include <vconf.h>
22 #include <vconf-keys.h>
23 #include <fcntl.h>
24 #include <appcore-efl.h>
25
26 #include "setting-sound.h"
27 #include "setting-volume.h"
28 #include "setting-clock.h"
29 #include "setting-homescreen.h"
30 #include "setting-info.h"
31 #include "setting-bluetooth.h"
32 #include "setting-motion.h"
33 #include "setting-display.h"
34 #include "setting-language.h"
35 #include "setting-reset.h"
36 #include "setting-battery.h"
37 #include "setting-privacy.h"
38 #include "setting-double.h"
39 #include "setting-safety.h"
40 #include "setting-notification.h"
41 #include "setting-profile.h"
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 #if 0
50 #ifndef FEATURE_SETTING_SDK
51 #define LANGUAGE_MENU_INDEX                     10
52 #else
53 #define LANGUAGE_MENU_INDEX                     5
54 #endif
55 #endif
56
57 #define LANGUAGE_ICON_DISABLED          "b_settings_language_disabled.png"
58 #define LANGUAGE_ICON_ENABLED           "b_settings_language.png"
59
60 static struct _menu_item setting_emergency_menu_its[] = {
61 #ifdef FEATURE_SETTING_EMUL
62         { "IDS_ST_BUTTON_CLOCK",                                                        "b_settings_change_clock.png",  clock_cb                        },
63 #endif
64         { "IDS_ST_OPT_SOUND_ABB2",                                                      "b_settings_volume.png",                        sound_cb                        },
65         { "IDS_ST_MBODY_DISPLAY_ABB",                                           "b_setting_display.png",                display_cb                      },
66 #ifndef FEATURE_SETTING_EMUL
67         { "IDS_QP_BUTTON_BLUETOOTH",                                            "b_settings_bluetooth.png",             bluetooth_cb            },
68 #endif
69 //#if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
70 #if !defined(FEATURE_SETTING_SDK)
71         { "IDS_ST_MBODY_SAFETY_ABB",                    "b_settings_safety.png",       safety_cb           },
72 #endif
73         { NULL, NULL, NULL }
74 };
75
76 static struct _menu_item setting_menu_its[] = {
77         {/*ALWAYS*/"IDS_ST_BUTTON_CLOCK",                                                       "b_settings_change_clock.png",  clock_cb                        },
78 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
79         { "IDS_ST_BODY_WALLPAPERS",                                             "b_setting_wallpaper.png",                      homescreen_cb           },
80         { "IDS_ST_BUTTON_NOTIFICATIONS",                                        "b_settings_notifications.png", notification_cb         },
81 #endif
82
83 #if !defined(FEATURE_SETTING_SDK) && !defined(FEATURE_SETTING_EMUL)
84         { "IDS_ST_OPT_SOUND_ABB2",                                                      "b_settings_volume.png",                        sound_cb                        },
85 #endif
86         {/*ALWAYS*/"IDS_ST_MBODY_DISPLAY_ABB",                                          "b_setting_display.png",                display_cb                      },
87
88         {/*ALWAYS*/"IDS_QP_BUTTON_BLUETOOTH",                                           "b_settings_bluetooth.png",             bluetooth_cb            },
89
90 #if !defined(FEATURE_SETTING_SDK)
91         { "IDS_ST_MBODY_DOUBLE_PRESS_ABB",                                      "b_setting_double-press.png",           double_pressing_cb      },
92         { "IDS_LCKSCN_BODY_PRIVACY_LOCK_ABB",                           "b_settings_lockscreen.png",    lockscreen_cb           },
93         { "IDS_HEALTH_MBODY_PROFILE",                                   "b_settings_profile.png",       profile_cb              },
94 #endif
95 #if !defined(FEATURE_SETTING_SDK)
96         { "IDS_ST_BODY_RESET_GEAR_ABB",                                         "b_settings_reset.png", reset_gear_cb           },
97 #endif
98         {/*ALWAYS*/"IDS_ST_BUTTON_GEAR_INFO",                                           "b_settings_info.png",                  gear_info_cb            },
99         { NULL, NULL, NULL }
100 };
101
102 static int is_emergency;
103 static Elm_Object_Item * lang_item = NULL;
104 static bool running = false;
105 static Ecore_Timer *running_timer = NULL;
106
107 static Evas_Object* _create_bg(Evas_Object *parent);
108 static Evas_Object* _create_conform(Evas_Object *parent);
109 static Evas_Object* _create_layout_main(Evas_Object* parent);
110 static Evas_Object* _create_naviframe_layout(Evas_Object* parent);
111 static void _create_view_layout(appdata *ad);
112 static int init_clocksetting(appdata *ad);
113
114
115 void clock_cb(void *data, Evas_Object *obj, void *event_info)
116 {
117         Evas_Object* layout = NULL;
118         Elm_Object_Item *nf_it = NULL;
119         appdata *ad = data;
120
121         if( ad == NULL )
122         {
123                 DBG("Setting - ad is null");
124                 return;
125         }
126
127         if(running){
128                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
129                 return;
130         }
131
132         if (is_running_clock) {
133                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
134                 return;
135         }
136
137         initialize_clock(data);
138
139         //genlist = _create_clock_list(data);
140         layout = _clock_type_cb(data);
141         if(layout == NULL)
142         {
143                 DBG("%s", "clock cb - layout is null");
144                 return;
145         }
146         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
147         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_clock_cb, ad);
148         //elm_naviframe_item_pop_cb_set(nf_it, _clear_clock_cb, ad);
149         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
150
151         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
152         is_running_clock = 1;
153
154         ad->MENU_TYPE = SETTING_CLOCK;
155 }
156
157 void notification_cb(void *data, Evas_Object *obj, void *event_info)
158 {
159         Evas_Object* genlist = NULL;
160         Elm_Object_Item *nf_it = NULL;
161         appdata *ad = data;
162
163         if( ad == NULL )
164         {
165                 DBG("Setting - ad is null");
166                 return;
167         }
168
169         if(running){
170                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
171                 return;
172         }
173
174         _initialize_noti();
175
176         genlist = _create_noti_list(data);
177         if(genlist == NULL)
178         {
179                 DBG("%s", "notification_cb - genlist is null");
180                 return;
181         }
182         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
183         elm_naviframe_item_pop_cb_set(nf_it, _clear_noti_cb, ad);
184         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
185
186         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
187
188         ad->MENU_TYPE = SETTING_NOTIFICATION;
189 }
190
191 void homescreen_cb(void *data, Evas_Object *obj, void *event_info)
192 {
193         Evas_Object* layout = NULL;
194         Elm_Object_Item *nf_it = NULL;
195         appdata *ad = data;
196
197         if( ad == NULL )
198         {
199                 DBG("Setting - ad is null");
200                 return;
201         }
202
203         if(running){
204                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
205                 return;
206         }
207
208         //layout = _create_homescreen_list(data);
209         layout = create_wallpaper_list(data);
210         if(layout == NULL)
211         {
212                 DBG("%s", "homescreen cb - layout is null");
213                 return;
214         }
215         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
216         //elm_naviframe_item_pop_cb_set(nf_it, _clear_homescreen_cb, ad);
217         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_homescreen_cb, ad);
218         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
219
220         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
221
222         ad->MENU_TYPE = SETTING_HOMESCREEN;
223 }
224
225
226 void sound_cb(void *data, Evas_Object *obj, void *event_info)
227 {
228         Evas_Object* genlist = NULL;
229         Elm_Object_Item *nf_it = NULL;
230         appdata *ad = data;
231
232         if( ad == NULL )
233         {
234                 DBG("Setting - ad is null");
235                 return;
236         }
237
238         if(running){
239                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
240                 return;
241         }
242
243         _initialize();
244
245         genlist = _create_sound_list(data);
246         if(genlist == NULL)
247         {
248                 DBG("%s", "sound cb - genlist is null");
249                 return;
250         }
251         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
252         elm_naviframe_item_pop_cb_set(nf_it, _clear_sound_cb, ad);
253         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
254
255         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
256
257         ad->MENU_TYPE = SETTING_SOUND;
258 }
259
260 void volume_cb(void *data, Evas_Object *obj, void *event_info)
261 {
262         Evas_Object* genlist = NULL;
263         Elm_Object_Item *nf_it = NULL;
264         appdata *ad = data;
265
266         if( ad == NULL )
267         {
268                 DBG("Setting - ad is null");
269                 return;
270         }
271
272         if(running){
273                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
274                 return;
275         }
276
277         _initialize_volume();
278
279         genlist = _create_volume_list(data);
280         if(genlist == NULL)
281         {
282                 DBG("%s", "volume cb - genlist is null");
283                 return;
284         }
285         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
286         //elm_naviframe_item_pop_cb_set(nf_it, _clear_volume_cb, ad);
287         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
288
289         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
290
291         ad->MENU_TYPE = SETTING_VOLUME;
292 }
293
294 void display_cb(void *data, Evas_Object *obj, void *event_info)
295 {
296         Evas_Object* genlist = NULL;
297         Elm_Object_Item *nf_it = NULL;
298         appdata *ad = data;
299
300         if( ad == NULL )
301         {
302                 DBG("Setting - ad is null");
303                 return;
304         }
305
306         if(running){
307                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
308                 return;
309         }
310
311         _init_display();
312
313         genlist = _create_display_list(data);
314         if(genlist == NULL)
315         {
316                 DBG("%s", "display 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_display_cb, ad);
321         evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, _clear_display_cb, ad);
322         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
323
324         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
325
326         ad->MENU_TYPE = SETTING_DISPLAY;
327 }
328
329 void battery_cb(void *data, Evas_Object *obj, void *event_info)
330 {
331         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
332
333         Evas_Object* layout = NULL;
334         Elm_Object_Item *nf_it = NULL;
335         appdata *ad = data;
336
337         if( ad == NULL )
338         {
339                 DBG("Setting - ad is null");
340                 return;
341         }
342
343         if(running){
344                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
345                 return;
346         }
347
348         _initialize_battery();
349         layout = _battery_status_cb(data);
350         if(layout == NULL)
351         {
352                 DBG("%s", "battery cb - layout is null");
353                 return;
354         }
355         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
356         //elm_naviframe_item_pop_cb_set(nf_it, _clear_battery_list_cb, ad);
357         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _clear_battery_cb, ad);
358         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
359
360         ad->MENU_TYPE = SETTING_BATTERY;
361 }
362
363 void bluetooth_cb(void *data, Evas_Object *obj, void *event_info)
364 {
365         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
366
367         Evas_Object* genlist = NULL;
368         Elm_Object_Item *nf_it = NULL;
369         appdata *ad = data;
370
371         if( ad == NULL )
372         {
373                 DBG("Setting - ad is null");
374                 return;
375         }
376
377         if(running){
378                 return;
379         }
380
381         initialize_bt();
382
383         genlist = _create_bt_list(data);
384         if(genlist == NULL)
385         {
386                 DBG("%s", "bluetooth cb - genlist is null");
387                 return;
388         }
389         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
390         //elm_naviframe_item_pop_cb_set(nf_it, _clear_bluetooth_cb, ad);
391         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
392
393         ad->MENU_TYPE = SETTING_BLUETOOTH;
394 }
395
396 void motion_cb(void *data, Evas_Object *obj, void *event_info)
397 {
398         Evas_Object* genlist = NULL;
399         Elm_Object_Item *nf_it = NULL;
400         appdata *ad = data;
401
402         if( ad == NULL )
403         {
404                 DBG("Setting - ad is null");
405                 return;
406         }
407
408         if(running){
409                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
410                 return;
411         }
412
413         _initialize_motion();
414         genlist = _create_motion_list(data);
415         if(genlist == NULL)
416         {
417                 DBG("%s", "motion cb - genlist is null");
418                 return;
419         }
420         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
421         elm_naviframe_item_pop_cb_set(nf_it, _clear_motion_cb, ad);
422         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
423
424         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
425 }
426
427 void lockscreen_cb(void *data, Evas_Object *obj, void *event_info)
428 {
429         Evas_Object* layout = NULL;
430         Elm_Object_Item *nf_it = NULL;
431
432         appdata* ad = data;
433
434         if( ad == NULL )
435         {
436                 DBG("Setting - ad is null");
437                 return;
438         }
439
440         if(running){
441                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
442                 return;
443         }
444
445         layout = create_privacy_list(data);
446         if(layout == NULL)
447         {
448                 DBG("%s", "lockscreen cb - genlist is null");
449                 return;
450         }
451
452         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
453         elm_naviframe_item_pop_cb_set(nf_it, clear_privacy_cb, ad);
454         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
455
456         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
457
458         ad->MENU_TYPE = SETTING_SCREEN_LOCK;
459 }
460
461 void double_pressing_cb(void *data, Evas_Object *obj, void *event_info)
462 {
463         Evas_Object* layout = NULL;
464         Elm_Object_Item *nf_it = NULL;
465
466         appdata* ad = data;
467
468         if( ad == NULL )
469         {
470                 DBG("Setting - ad is null");
471                 return;
472         }
473
474         if(running){
475                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
476                 return;
477         }
478
479         init_double_pressing(ad);
480
481         layout = create_double_app_list(data);
482         if(layout == NULL)
483         {
484                 DBG("%s", "double cb - genlist is null");
485                 return;
486         }
487
488         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
489         evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, clear_double_app_cb, ad);
490         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
491
492         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
493
494         ad->MENU_TYPE = SETTING_DOUBLE_PRESSING;
495 }
496
497 void language_cb(void *data, Evas_Object *obj, void *event_info)
498 {
499         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
500
501         Evas_Object* genlist = NULL;
502         Elm_Object_Item *nf_it = NULL;
503         appdata *ad = data;
504
505         if( ad == NULL )
506         {
507                 DBG("Setting - ad is null");
508                 return;
509         }
510
511         if(running){
512                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
513                 return;
514         }
515
516         if( is_connected_GM() )
517         {
518                 DBG("Setting - language can not change!!");
519
520                 // automatic freed!!
521                 struct _toast_data * toast = _create_toast(ad, _("IDS_ST_TPOP_CHANGE_LANGUAGE_ON_MOBILE_DEVICE"));
522                 if( toast ) {
523                         _show_toast(ad, toast);
524                 }
525                 return;
526         }
527
528         _initialize_language(ad);
529         _set_launguage_update_cb(_update_main_menu_title);
530
531         genlist = _create_lang_list(data);
532         if(genlist == NULL)
533         {
534                 DBG("%s", "language cb - genlist is null");
535                 return;
536         }
537         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
538         elm_naviframe_item_pop_cb_set(nf_it, _clear_lang_cb, ad);
539         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
540
541         ad->MENU_TYPE = SETTING_LANGUAGE;
542 }
543
544 void safety_cb(void *data, Evas_Object *obj, void *event_info)
545 {
546         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
547
548         appdata *ad = data;
549         if( ad == NULL )
550         {
551                 DBG("Setting - ad is null");
552                 return;
553         }
554
555         if(running){
556                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
557                 return;
558         }
559
560         Evas_Object* layout = NULL;
561         Elm_Object_Item *nf_it = NULL;
562
563         layout = create_safety_list(ad);
564         if( layout == NULL )
565         {
566                 DBG("%s", "safety cb - genlist is null");
567                 return;
568         }
569
570         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
571         elm_naviframe_item_pop_cb_set(nf_it, clear_safety_cb, ad);
572         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
573
574         ad->MENU_TYPE = SETTING_SAFETY;
575 }
576
577 void reset_gear_cb(void *data, Evas_Object *obj, void *event_info)
578 {
579         appdata * ad = data;
580         if( ad == NULL )
581         {
582                 DBG("Setting - ad is null");
583                 return;
584         }
585
586         if(running){
587                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
588                 return;
589         }
590
591         _reset_popup_cb(data, obj, event_info);
592
593         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
594
595         ad->MENU_TYPE = SETTING_RESET;
596 }
597
598 void gear_info_cb(void *data, Evas_Object *obj, void *event_info)
599 {
600         Evas_Object* genlist = NULL;
601         Elm_Object_Item *nf_it = NULL;
602         appdata *ad = data;
603
604         if( ad == NULL )
605         {
606                 DBG("Setting - ad is null");
607                 return;
608         }
609
610         if(running){
611                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
612                 return;
613         }
614
615         genlist = _create_info_list(data);
616         if(genlist == NULL)
617         {
618                 DBG("%s", "info cb - genlist is null");
619                 return;
620         }
621         nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, genlist, NULL);
622         elm_naviframe_item_pop_cb_set(nf_it, _clear_info_cb, ad);
623         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
624
625         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
626
627         ad->MENU_TYPE = SETTING_INFO;
628 }
629
630 static Eina_Bool _app_ctrl_timer_cb(void *data) {
631         DBG("reset flag");
632         running = false;
633         running_timer = NULL;
634         return ECORE_CALLBACK_CANCEL;
635 }
636
637 void profile_cb(void *data, Evas_Object *obj, void *event_info)
638 {
639         DBG("profile cb");
640         appdata * ad = data;
641         if( ad == NULL )
642         {
643                 DBG("Setting - ad is null");
644                 return;
645         }
646
647         if(running){
648                 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
649                 return;
650         }
651
652         if(!running){
653                 _create_profile(data, obj, event_info);
654                 running = true;
655
656                 if(running_timer) {
657                         ecore_timer_del(running_timer);
658                         running_timer = NULL;
659                 }
660                 running_timer = ecore_timer_add(0.5, (Ecore_Task_Cb)_app_ctrl_timer_cb, NULL);
661         }
662         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
663 }
664
665 static void _quit_cb(void *data, Evas_Object *obj, void *ei)
666 {
667         /*
668         //To make your application go to background,
669         //Call the elm_win_lower() instead
670         Evas_Object *win = (Evas_Object *) data;
671         elm_win_lower(win);
672         */
673         elm_exit();
674 }
675
676 static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
677 {
678         // Stop timer and task
679         appdata * ad = data;
680         if(running_timer) {
681                 ecore_timer_del(running_timer);
682                 running_timer = NULL;
683         }
684         if(running)
685                 running = false;
686
687         if (ad && ad->win_main)
688         {
689                 elm_win_lower(ad->win_main);
690         }
691
692         return EINA_FALSE;
693 }
694
695 static Evas_Object* _create_bg(Evas_Object *parent)
696 {
697         Evas_Object *bg;
698
699         if (parent == NULL) return NULL;
700
701         bg = elm_bg_add(parent);
702         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
703         elm_win_resize_object_add(parent, bg);
704         evas_object_show(bg);
705
706         return bg;
707 }
708
709 static Evas_Object* _create_conform(Evas_Object *parent)
710 {
711         Evas_Object *conform;
712
713         if (parent == NULL) return NULL;
714
715         conform = elm_conformant_add(parent);
716         evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
717         elm_win_resize_object_add(parent, conform);
718         evas_object_show(conform);
719
720         return conform;
721 }
722
723 static Evas_Object* _create_layout_main(Evas_Object* parent)
724 {
725         Evas_Object *layout;
726
727         if (parent == NULL) return NULL;
728
729         layout = elm_layout_add(parent);
730
731         if (layout == NULL)
732         {
733                 DBG("Failed elm_layout_add.\n");
734                 return NULL;
735         }
736
737         elm_layout_theme_set(layout, "layout", "application", "default");
738         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
739         elm_win_resize_object_add(parent, layout);
740
741         evas_object_show(layout);
742
743         return layout;
744 }
745
746 static void _lang_changed(void *data)
747 {
748         appdata * ad = data;
749         if( ad && ad->MENU_TYPE == SETTING_LANGUAGE )
750                 return;
751
752         char *locale = vconf_get_str(VCONFKEY_LANGSET);
753         if (locale)
754         {
755                 DBG("Setting - language is changed : %s", locale);
756                 elm_language_set(locale);
757                 elm_config_all_flush();
758         }
759 }
760
761 static void _window_resize_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
762 {
763         appdata *ad = (appdata *)data;
764         evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
765 }
766
767 static void init_values(appdata *ad)
768 {
769         if( ad == NULL )
770         {
771                 return;
772         }
773
774         ad->is_motion_smart_relay_on = 1;
775         ad->is_motion_wake_up_on = 1;
776 }
777
778 static int init_clocksetting(appdata *ad)
779 {
780         DBG("init_clocksetting() is called!");
781
782         if (ad == NULL)
783                 return EINA_FALSE;
784
785         ad->bg = _create_bg(ad->win_main);
786
787         // Conformant *** disable comform : lauching time issue ***
788 /*
789         ad->conform = _create_conform(ad->win_main);
790         if (ad->conform == NULL)
791                 return -1;
792 */
793         // Base Layout
794         ad->layout_main = _create_layout_main(ad->win_main);
795         if (ad->layout_main == NULL)
796                 return -1;
797
798         // Indicator
799         elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
800
801         // Naviframe
802         ad->nf = _create_naviframe_layout(ad->layout_main);
803
804         // Naviframe Content
805         _create_view_layout(ad);
806
807         init_values(ad);
808
809         int vibration_level = 0;
810         vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vibration_level);
811
812         DBG("Setting - vibration level : %d", vibration_level);
813
814         if( vibration_level == 2 )      // wrong value!!
815         {
816                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
817                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, VIBRATION_LEVEL_HIGH_INT);
818         }
819         return EINA_TRUE;
820 }
821
822 static Evas_Object* _create_naviframe_layout(Evas_Object* parent)
823 {
824         Evas_Object *nf = NULL;
825
826         if (parent == NULL) return NULL;
827
828         nf = elm_naviframe_add(parent);
829         elm_object_part_content_set(parent, "elm.swallow.content", nf);
830
831         evas_object_show(nf);
832
833         return nf;
834 }
835
836 static char* _gl_text_get(void *data, Evas_Object *obj, const char *part)
837 {
838         char buf[512];
839         Item_Data *id = data;
840         int index = id->index;
841         /*
842         char expression[32];
843
844         if( index == LANGUAGE_MENU_INDEX ) {
845                 if( is_connected_GM() ) {
846                         strcpy(expression, "<font color=#515151>%s</font>");
847                 } else {
848                         strcpy(expression, "%s");
849                 }
850         } else {
851                 strcpy(expression, "%s");
852         }*/
853
854         if(is_emergency)
855                 snprintf(buf, sizeof(buf)-1, "%s", _(setting_emergency_menu_its[index].name));
856         else
857                 snprintf(buf, sizeof(buf)-1, "%s", _(setting_menu_its[index].name));
858
859         return strdup(buf);
860 }
861
862 static Evas_Object * _gl_icon_get(void *data, Evas_Object *obj, const char *part)
863 {
864         char buf[1024];
865         Item_Data *id = data;
866         int index = id->index;
867 /*
868         if( index == LANGUAGE_MENU_INDEX ) {
869                 if( is_connected_GM() ) {
870                         snprintf(buf, sizeof(buf)-1, "%s", LANGUAGE_ICON_DISABLED);
871                 } else {
872                         snprintf(buf, sizeof(buf)-1, "%s", LANGUAGE_ICON_ENABLED);
873                 }
874         } else {*/
875                 if(is_emergency)
876                         snprintf(buf, sizeof(buf)-1, "%s", setting_emergency_menu_its[index].icon_name);
877                 else
878                         snprintf(buf, sizeof(buf)-1, "%s", setting_menu_its[index].icon_name);
879 //      }
880
881         Evas_Object *icon = elm_image_add(obj);
882         elm_image_file_set(icon, EDJE_PATH, buf);
883         evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
884         evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
885         evas_object_size_hint_min_set(icon, 52, 52);
886
887         return icon;
888 }
889
890 static void _gl_del(void *data, Evas_Object *obj)
891 {
892         Item_Data *id = data;
893         if (id)
894                 free(id);
895 }
896
897 static Evas_Object * _gl_indicator_get(void *data, Evas_Object *obj, const char *part)
898 {
899         Evas_Object *layout = NULL;
900
901         layout = elm_layout_add(obj);
902         elm_layout_file_set(layout, EDJE_PATH, "setting/indicator");
903
904         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
905         indicator_view_update(layout);
906         evas_object_show(layout);
907         DBG("indicator get!!!!!!!!");
908
909         return layout;
910 }
911
912 static Evas_Object* _create_mainlist_winset(Evas_Object* parent, appdata* ad)
913 {
914         Evas_Object *genlist = NULL;
915         struct _menu_item *menu_its = NULL;
916         int idx = 0;
917
918         // Create item class
919         elm_theme_extension_add(NULL, EDJE_PATH);
920         Elm_Genlist_Item_Class *itc_tmp = elm_genlist_item_class_new();
921         itc_tmp->item_style = "setting_indicator";
922         itc_tmp->func.content_get = _gl_indicator_get;
923         itc_tmp->func.del = _gl_del;
924
925         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
926         itc->item_style = "1text.1icon";
927         itc->func.text_get = _gl_text_get;
928         itc->func.content_get = _gl_icon_get;
929         itc->func.del = _gl_del;
930
931         genlist = elm_genlist_add(ad->nf);
932         if(genlist == NULL)
933         {
934                 elm_genlist_item_class_free(itc);
935                 return NULL;
936         }
937         elm_genlist_realization_mode_set(genlist, EINA_TRUE);
938         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
939
940         Item_Data *id_indi = calloc(sizeof(Item_Data), 1);
941         id_indi->index = idx;
942         id_indi->item = elm_genlist_item_append(
943                         genlist,
944                         itc_tmp,
945                         id_indi,
946                         NULL,
947                         ELM_GENLIST_ITEM_NONE,
948                         NULL, NULL);
949         elm_genlist_item_select_mode_set(id_indi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
950
951         vconf_get_bool(VCONFKEY_SETAPPL_EMERGENCY_STATUS_BOOL, &is_emergency);
952
953         int item_count = 0;
954
955         if(is_emergency)
956         {
957                 menu_its = setting_emergency_menu_its;
958                 item_count = sizeof(setting_emergency_menu_its) / sizeof(struct _menu_item);
959         }
960         else
961         {
962                 menu_its = setting_menu_its;
963                 item_count = sizeof(setting_menu_its) / sizeof(struct _menu_item);
964         }
965
966         DBG("Setting - Main menu item count: %d", item_count);
967
968         //while (menu_its[ idx ].name != NULL) {
969         for( idx = 0; idx < item_count-1; idx++ )
970         {
971                 Item_Data *id = calloc(sizeof(Item_Data), 1);
972                 id->index = idx;
973                 id->item = elm_genlist_item_append(
974                                 genlist,                        // genlist object
975                                 itc,                            // item class
976                                 id,                     // data
977                                 NULL,
978                                 ELM_GENLIST_ITEM_NONE,
979                                 menu_its[ idx ].func,
980                                 ad);
981
982                 /*
983                 if( !is_emergency && ( idx == LANGUAGE_MENU_INDEX ) )
984                 {
985                         lang_item = id->item;
986                 }
987                 */
988
989                 //++idx;
990         }
991         elm_genlist_item_class_free(itc);
992         elm_genlist_item_class_free(itc_tmp);
993
994         ad->main_genlist = genlist;
995
996         indicator_set_vconf_changed_cb(ad);
997
998         return genlist;
999 }
1000
1001 static void _update_main_menu_title( void * data )
1002 {
1003         DBG("_update_main_menu_title() is called");
1004
1005         appdata * ad = data;
1006         if( ad == NULL )
1007         {
1008                 DBG("appdata is NULL");
1009                 return;
1010         }
1011
1012         if( ad->main_genlist )
1013         {
1014                 elm_genlist_realized_items_update(ad->main_genlist);
1015         }
1016 }
1017
1018 static void _naviframe_back_cb(void * data, Evas_Object * obj, void * event_info)
1019 {
1020         appdata * ad = data;
1021         if( ad == NULL )
1022                 return;
1023
1024         if(ad->MENU_TYPE == SETTING_BLUETOOTH)
1025         {
1026                 clear_bt_resource();
1027         }
1028         else if(ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH)
1029         {
1030                 _clear_volume_resources();
1031
1032                 ad->MENU_TYPE = SETTING_VOLUME;
1033         }
1034         else if(ad->MENU_TYPE == SETTING_SOUND_RINGTONE)
1035         {
1036                 _stop_player();
1037
1038                 ad->MENU_TYPE = SETTING_SOUND;
1039         }
1040         else if(ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION)
1041         {
1042                 _stop_wav_player();
1043
1044                 ad->MENU_TYPE = SETTING_SOUND;
1045         }
1046
1047         ea_naviframe_back_cb(data, obj, event_info);
1048 }
1049
1050 static void _create_view_layout(appdata *ad)
1051 {
1052         Evas_Object *genlist = NULL;
1053         Evas_Object *btn  = NULL;
1054         Elm_Object_Item *nf_it = NULL;
1055
1056         if (ad == NULL) return;
1057         if (ad->nf == NULL) return;
1058
1059         genlist = _create_mainlist_winset(ad->win_main, ad);
1060         ea_object_event_callback_add(ad->nf, EA_CALLBACK_BACK, _naviframe_back_cb, ad);
1061         ea_object_event_callback_add(ad->nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
1062
1063         nf_it = elm_naviframe_item_push(ad->nf, NULL, btn, NULL, genlist, NULL);
1064         elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
1065
1066         elm_naviframe_item_pop_cb_set(nf_it, _pop_cb, ad); // ad->win_main
1067
1068         //register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL);
1069 }
1070
1071 static Evas_Object* create_win(const char *name)
1072 {
1073         Evas_Object *eo;
1074
1075         eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
1076         if (!eo)
1077                 return NULL;
1078
1079         elm_win_title_set(eo, name);
1080         elm_win_autodel_set(eo, EINA_TRUE);
1081
1082         if (elm_win_wm_rotation_supported_get(eo)) {
1083                 int rots[4] = { 0, 90, 180, 270 };
1084                 elm_win_wm_rotation_available_rotations_set(eo, (const int*)(&rots), 4);
1085         }
1086
1087         evas_object_smart_callback_add(eo, "delete,request", _quit_cb, NULL);
1088
1089         return eo;
1090 }
1091
1092 bool app_create(void *data)
1093 {
1094         //DBG("[TIME] 3. it taked %d msec from main to setting_main_app_create ", appcore_measure_time());
1095         //appcore_measure_start();
1096
1097         DBG("Setting - app_create");
1098
1099         appdata *ad = (appdata *) data;
1100         char *locale;
1101
1102         DBG("app_create start.");
1103
1104         ecore_x_window_size_get(ecore_x_window_root_first_get(), &ad->root_w, &ad->root_h);
1105
1106         ad->win_main = create_win(PACKAGE);
1107         if (ad->win_main == NULL)
1108                 return false;
1109
1110         evas_object_resize(ad->win_main, ad->root_w, ad->root_h);
1111         //evas_object_event_callback_add(ad->win_main, EVAS_CALLBACK_RESIZE, _window_resize_cb, ad);
1112
1113         double scale = elm_config_scale_get();
1114         if(scale < 1.0)
1115         {
1116                 DBG("Setting - scale is more less than 1.0");
1117                 elm_config_scale_set(1.0);
1118         }
1119
1120         ad->evas = evas_object_evas_get(ad->win_main);
1121
1122         //appcore_set_i18n(PACKAGE, LOCALEDIR);
1123         //appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, _lang_changed, ad);
1124
1125         locale = vconf_get_str(VCONFKEY_LANGSET);
1126         if (locale)
1127         {
1128                 elm_language_set(locale);
1129         }
1130
1131         ad->is_first_launch = 1;
1132
1133         init_clocksetting(ad);
1134
1135         DBG("app_create finish.");
1136
1137         DBG("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
1138         //appcore_measure_start();
1139
1140         evas_object_show(ad->win_main);
1141
1142         return true;
1143 }
1144
1145 void app_terminate(void *data)
1146 {
1147         DBG("Setting - app_terminate");
1148
1149         appdata *ad = data;
1150
1151         indicator_unset_vconf_changed_cb();
1152
1153         if( ad->alert_rdg )
1154         {
1155                 ad->alert_rdg = NULL;
1156         }
1157         if( ad->datetime )
1158         {
1159                 ad->datetime = NULL;
1160         }
1161         if( ad->dt_genlist_item_of_date )
1162         {
1163                 ad->dt_genlist_item_of_date = NULL;
1164         }
1165         if( ad->dt_genlist_item_of_time )
1166         {
1167                 ad->dt_genlist_item_of_time = NULL;
1168         }
1169         if( ad->pref_arm_rdg )
1170         {
1171                 ad->pref_arm_rdg = NULL;
1172         }
1173         if( ad->main_genlist )
1174         {
1175                 ad->main_genlist = NULL;
1176         }
1177         if( ad->double_rdg )
1178         {
1179                 ad->double_rdg = NULL;
1180         }
1181         if( ad->font_size_rdg )
1182         {
1183                 ad->font_size_rdg = NULL;
1184         }
1185         if( ad->language_item )
1186         {
1187                 ad->language_item = NULL;
1188         }
1189         if( ad->language_rdg )
1190         {
1191                 ad->language_rdg = NULL;
1192         }
1193
1194         /* unregister motion vconf changed callback */
1195         //unregister_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling);
1196 }
1197
1198 void app_pause(void *data)
1199 {
1200         DBG("Setting - app_pause()");
1201
1202         appdata *ad = data;
1203         if( ad )
1204         {
1205                 if( ad->MENU_TYPE == SETTING_VOLUME_2_DEPTH )
1206                 {
1207                         _stop_all_volume_sound();
1208                 }
1209                 else if( ad->MENU_TYPE == SETTING_SOUND_RINGTONE ||
1210                                  ad->MENU_TYPE == SETTING_SOUND_NOTIFICATION )
1211                 {
1212                         _stop_all_sound_play();
1213                 }
1214                 else if(ad->MENU_TYPE == SETTING_BATTERY)
1215                 {
1216                         _clear_battery_cb(NULL, NULL, NULL, NULL);
1217                 }
1218                 else if( ad->MENU_TYPE == SETTING_SOUND )
1219                 {
1220                         _stop_all_sound_play();
1221                 }
1222         }
1223 }
1224
1225 void app_resume(void *data)
1226 {
1227         DBG("Setting - app_resume()");
1228         if(running)
1229                 running = false;
1230 }
1231
1232 void app_reset(service_h service, void *data)
1233 {
1234         DBG("Setting - app_reset()");
1235
1236         appdata *ad = data;
1237
1238         char *operation = NULL;
1239         service_get_operation(service, &operation);
1240         DBG("operation : %s", operation);
1241         if (!ad->is_first_launch) {
1242                 if (operation && !strcmp(operation, "http://tizen.org/appcontrol/operation/main")) {
1243                         Elm_Object_Item *bottom = elm_naviframe_bottom_item_get(ad->nf);
1244                         Elm_Object_Item *top = elm_naviframe_top_item_get(ad->nf);
1245
1246                         if( ad->popup ) {
1247                                 evas_object_del(ad->popup);
1248                                 ad->popup = NULL;
1249                         }
1250
1251                         while (bottom != top) {
1252                                 elm_object_item_del(top);
1253                                 top = elm_naviframe_top_item_get(ad->nf);
1254                         }
1255
1256                         if (ad->main_genlist) {
1257                                 elm_genlist_item_show(elm_genlist_first_item_get(ad->main_genlist),
1258                                                 ELM_GENLIST_ITEM_SCROLLTO_TOP);
1259                         }
1260                 }
1261         } else {
1262                 ad->is_first_launch = 0;
1263         }
1264
1265         if (ad->win_main)
1266         {
1267                 elm_win_activate(ad->win_main);
1268         }
1269
1270         ad->MENU_TYPE = SETTING_MAIN;
1271
1272         /* Register language change vconf */
1273         //register_vconf_changing(VCONFKEY_WMS_WMANAGER_CONNECTED, change_language_enabling, NULL);
1274         //return TRUE;
1275 }
1276
1277 int main(int argc, char *argv[])
1278 {
1279         DBG("%s,%d", __func__, __LINE__);
1280
1281         appdata ad;
1282
1283         app_event_callback_s event_callback;
1284
1285         event_callback.create = app_create;
1286         event_callback.terminate = app_terminate;
1287         event_callback.pause = app_pause;
1288         event_callback.resume = app_resume;
1289         event_callback.service = app_reset;
1290         event_callback.low_memory = NULL;
1291         event_callback.low_battery = NULL;
1292         event_callback.device_orientation = NULL;
1293         event_callback.language_changed = _lang_changed;
1294         event_callback.region_format_changed = NULL;
1295
1296         memset(&ad, 0x0, sizeof(appdata));
1297
1298         return app_efl_main(&argc, &argv, &event_callback, &ad);
1299 }
1300
1301 #if 0
1302 int main(int argc, char *argv[])
1303 {
1304         appdata ad;
1305
1306         DBG("[TIME] 1. aul_launch -> main :: Setting main : %d msec ", appcore_measure_time_from("APP_START_TIME"));
1307         appcore_measure_start();
1308
1309         struct appcore_ops ops = {
1310                 .create = app_create,
1311                 .terminate = app_terminate,
1312                 .pause = app_pause,
1313                 .resume = app_resume,
1314                 .reset = app_reset,
1315         };
1316
1317         memset(&ad, 0x0, sizeof(appdata));
1318         ops.data = &ad;
1319
1320         ad.MENU_TYPE = SETTING_MAIN;
1321
1322         DBG("[TIME] 2. main : %d msec ", appcore_measure_time());
1323         appcore_measure_start();
1324
1325         return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
1326 }
1327 #endif