9ce78f83c3666ac72c2bf515c31e30b2f74f3210
[apps/native/ug-wifi-efl.git] / ui-gadget / view_advanced.c
1 /*
2  * Wi-Fi
3  *
4  * Copyright 2012 Samsung Electronics Co., Ltd
5  *
6  * Licensed under the Flora License, Version 1.1 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.tizenopensource.org/license
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <vconf.h>
21 #include <vconf-keys.h>
22 #include <app_control_internal.h>
23 #include <efl_extension.h>
24
25 #include "ug_wifi.h"
26 #include "view_advanced.h"
27 #include "i18nmanager.h"
28 #include "viewer_manager.h"
29 #include "winset_popup.h"
30 #include "common_utils.h"
31
32 #define VCONF_SLEEP_POLICY "file/private/wifi/sleep_policy"
33 #define VCONF_SMART_SWITCHING "file/private/wifi/smart_switching"
34 #define VCONF_SMART_SWITCH_CB "file/private/wifi/smart_switch_checkbox"
35
36 typedef enum {
37         VCONF_SMART_SWITCH_OFF = 0x00,
38         VCONF_SMART_SWITCH_ON,
39 } VCONF_SMART_SWITCH_OPTIONS;
40
41 struct _private_data {
42         Evas_Object *list;
43         Elm_Object_Item *item_smart_switch;
44         Evas_Object *smart_popup;
45         Elm_Object_Item *item_network_noti;
46         Elm_Object_Item *item_keep_wifi_switch;
47         Evas_Object *keep_wifi_radio_group;
48         Evas_Object *keep_wifi_popup;
49
50         Elm_Object_Item *item_sort_by;
51         Evas_Object *sort_by_radio_group;
52         Evas_Object *sort_by_popup;
53
54         Elm_Object_Item *item_install_cert;
55 };
56
57 static struct _private_data g_pd;
58 extern genlist_info_t g_genlist_info[WIFI_GENLIST_STYLE_MAX];
59 extern content_size_info_t g_content_size_info;
60
61 /* Prototype */
62 static char *_gl_network_notification_text_get(void *data, Evas_Object *obj,    const char *part);
63 static char *_gl_sort_by_text_get(void *data, Evas_Object *obj, const char *part);
64 static char *_gl_sort_by_sub_text_get(void *data, Evas_Object *obj, const char *part);
65 static Evas_Object *_gl_content_get_network_noti(void *data, Evas_Object *obj, const char *part);
66 static Evas_Object *_gl_content_get_sort_by_sub(void *data,     Evas_Object *obj, const char *part);
67 static char *_gl_install_certificate_text_get(void *data, Evas_Object *obj, const char *part);
68 #if TIZEN_SLEEP_POLICY
69 static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
70 static char *_gl_never_text_get(void *data, Evas_Object *obj, const char *part);
71 static char *_gl_keep_wifi_on_during_sleep_text_get(void *data, Evas_Object *obj, const char *part);
72 static Evas_Object *_gl_content_get_keep_wifi_sub(void *data, Evas_Object *obj, const char *part);
73 #endif
74
75 /* Global variables for elm_genlist itc */
76 static Elm_Genlist_Item_Class itc_network_noti = {
77                 .item_style = NULL,
78                 .func.text_get = _gl_network_notification_text_get,
79                 .func.content_get = _gl_content_get_network_noti
80 };
81
82 #if TIZEN_SLEEP_POLICY
83 static Elm_Genlist_Item_Class itc_keep_wifi = {
84 //              .item_style = g_genlist_info[WIFI_GENLIST_1LINE_STYLE].style_name,
85                 .item_style = GENLIST_STYLE_TYPE1,
86                 .func.text_get = _gl_keep_wifi_on_during_sleep_text_get,
87 };
88
89 static Elm_Genlist_Item_Class itc_keep_wifi_sub = {
90 //              .item_style = g_genlist_info[WIFI_GENLIST_1LINE_STYLE].style_name,
91                 .item_style = GENLIST_STYLE_TYPE1,
92                 .func.text_get = _gl_text_get,
93                 .func.content_get = _gl_content_get_keep_wifi_sub,
94 };
95
96 static Elm_Genlist_Item_Class itc_keep_wifi_sub_never = {
97 //              .item_style = g_genlist_info[WIFI_GENLIST_1LINE_STYLE].style_name,
98                 .item_style = GENLIST_STYLE_TYPE1,
99                 .func.text_get = _gl_never_text_get,
100                 .func.content_get = _gl_content_get_keep_wifi_sub,
101 };
102 #endif
103
104 static Elm_Genlist_Item_Class itc_sort_by = {
105                 .item_style = NULL,
106                 .func.text_get = _gl_sort_by_text_get,
107 };
108
109 static Elm_Genlist_Item_Class itc_sort_by_sub = {
110                 .item_style = NULL,
111                 .func.text_get = _gl_sort_by_sub_text_get,
112                 .func.content_get = _gl_content_get_sort_by_sub,
113 };
114
115 static Elm_Genlist_Item_Class itc_install_cert = {
116                 .item_style = NULL,
117                 .func.text_get = _gl_install_certificate_text_get,
118 };
119
120 static char *_gl_install_certificate_text_get(void *data, Evas_Object *obj,
121                 const char *part)
122 {
123         char buf[1024];
124
125         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].text_part, part)) {
126                 snprintf(buf, 1023, "%s", sc(PACKAGE, I18N_TYPE_Install_certificate));
127                 return strdup(buf);
128         }
129         return NULL;
130 }
131
132 static void _launch_cert_select_app(void)
133 {
134         int ret = APP_CONTROL_ERROR_NONE;
135         app_control_h app_control;
136
137         app_control_create(&app_control);
138         app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
139         app_control_set_launch_mode(app_control, APP_CONTROL_LAUNCH_MODE_GROUP);
140         app_control_set_app_id(app_control, "setting-manage-certificates-efl");
141
142         ret = app_control_send_launch_request(app_control, NULL, NULL);
143         if (ret == APP_CONTROL_ERROR_NONE)
144                 INFO_LOG(UG_NAME_NORMAL, "Launch Cert Success");
145         else
146                 ERROR_LOG(UG_NAME_NORMAL, "Fail to launch Cert");
147
148         app_control_destroy(app_control);
149 }
150
151 static void _gl_cert_sel_cb(void *data, Evas_Object *obj, void *event_info)
152 {
153         _launch_cert_select_app();
154
155         elm_genlist_item_selected_set(g_pd.item_install_cert, EINA_FALSE);
156 }
157
158 #if TIZEN_SLEEP_POLICY
159 static int _convert_wifi_keep_value_to_vconf(int i18n_key)
160 {
161         switch (i18n_key) {
162         case I18N_TYPE_Always:
163                 return 0;
164
165         case I18N_TYPE_Plugged:
166                 return 1;
167
168         case I18N_TYPE_Donot_Use:
169                 return 2;
170         }
171
172         return -1;
173 }
174
175 static int _convert_vconf_to_wifi_keep_value(int vconf_value)
176 {
177         switch (vconf_value) {
178         case 0:
179                 return I18N_TYPE_Always;
180
181         case 1:
182                 return I18N_TYPE_Plugged;
183
184         case 2:
185                 return I18N_TYPE_Donot_Use;
186         }
187
188         return -1;
189 }
190 #endif
191
192 int _convert_sort_by_value_to_vconf(int i18n_key)
193 {
194         switch (i18n_key) {
195         case I18N_TYPE_Alphabetical:
196                 return 0;
197
198         case I18N_TYPE_Signal_Strength:
199                 return 1;
200         }
201
202         return -1;
203 }
204
205 int _convert_vconf_to_sort_by_value(int vconf_value)
206 {
207         switch (vconf_value) {
208         case 0:
209                 return I18N_TYPE_Alphabetical;
210
211         case 1:
212                 return I18N_TYPE_Signal_Strength;
213         }
214
215         return -1;
216 }
217
218 static void _gl_realized(void *data, Evas_Object *obj, void *event_info)
219 {
220     if (!obj || !event_info)
221         return;
222
223     Evas_Object *genlist = obj;
224     Elm_Object_Item *item = (Elm_Object_Item *)event_info;
225     int index = 0;
226     int count = 0;
227
228     count = elm_genlist_items_count(genlist);
229     index = elm_genlist_item_index_get(item);
230
231     if (index == 1)
232         elm_object_item_signal_emit(item, "elm,state,group,top", "elm");
233     else if (index == count)
234         elm_object_item_signal_emit(item, "elm,state,group,bottom", "elm");
235     else
236         elm_object_item_signal_emit(item, "elm,state,group,middle", "elm");
237 }
238
239 static char *_gl_sort_by_text_get(void *data, Evas_Object *obj,
240                 const char *part)
241 {
242         char buf[1024];
243         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].text_part, part)) {
244                 int i18type = GPOINTER_TO_INT(data);
245                 if (i18type != 0) {
246                         snprintf(buf, 1023, "%s", sc(PACKAGE, i18type));
247                         return strdup(buf);
248                 }
249         } else if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].sub_text_part, part)) {
250                 int value;
251
252                 value = _convert_vconf_to_sort_by_value(
253                                 common_util_get_system_registry(VCONF_SORT_BY));
254                 if (value >= 0) {
255                         snprintf(buf, 1023, "%s", sc(PACKAGE, value));
256                         return strdup(buf);
257                 }
258         }
259
260         return NULL;
261 }
262
263 static char *_gl_sort_by_sub_text_get(void *data, Evas_Object *obj, const char *part)
264 {
265         char buf[1024];
266         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].text_part, part)) {
267                 int i18type = GPOINTER_TO_INT(data);
268                 if (i18type != 0) {
269                         snprintf(buf, 1023, "%s", sc(PACKAGE, i18type));
270                         return strdup(buf);
271                 }
272         }
273         return NULL;
274 }
275
276 static char *_gl_network_notification_text_get(void *data, Evas_Object *obj, const char *part)
277 {
278         char buf[1024];
279
280         if (!strcmp(g_genlist_info[WIFI_GENLIST_MULTILINE_STYLE].text_part, part)) {
281                 snprintf(buf, 1023, "%s", sc(PACKAGE, I18N_TYPE_Network_notification));
282                 return strdup(buf);
283         } else if (!strcmp(g_genlist_info[WIFI_GENLIST_MULTILINE_STYLE].sub_text_part, part)) {
284                 snprintf(buf, 1023, "<font_size=%d>%s</font_size>",
285                                 g_content_size_info.small_font,
286                                 sc(PACKAGE, I18N_TYPE_Network_notify_me_later));
287                 return strdup(buf);
288         }
289         return NULL;
290 }
291
292 #if TIZEN_SLEEP_POLICY
293 static char *_gl_text_get(void *data, Evas_Object *obj,
294                 const char *part)
295 {
296         char buf[1024];
297         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].text_part, part)) {
298                 int i18type = GPOINTER_TO_INT(data);
299                 if (i18type != 0) {
300                         snprintf(buf, 1023, "%s", sc(PACKAGE, i18type));
301                         return strdup(buf);
302                 }
303         }
304
305         return NULL;
306 }
307
308 static char *_gl_keep_wifi_on_during_sleep_text_get(void *data, Evas_Object *obj, const char *part)
309 {
310         char buf[1024];
311
312         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].text_part, part)) {
313                 snprintf(buf, 1023, "%s", sc(PACKAGE, I18N_TYPE_Keep_WIFI_on_during_sleep));
314                 return strdup(buf);
315         } else if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].sub_text_part, part)) {
316                 int value;
317                 value = _convert_vconf_to_wifi_keep_value(
318                                 common_util_get_system_registry(VCONF_SLEEP_POLICY));
319                 if (value >= 0) {
320                         if (value == I18N_TYPE_Donot_Use) {
321                                 snprintf(buf, 1023, "%s", sc(PACKAGE, I18N_TYPE_Donot_Use));
322                                 return strdup(buf);
323                         } else {
324                                 snprintf(buf, 1023, "%s", sc(PACKAGE, value));
325                                 return strdup(buf);
326                         }
327                 }
328         }
329         return NULL;
330 }
331
332 static char *_gl_never_text_get(void *data, Evas_Object *obj,
333                 const char *part)
334 {
335         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].text_part, part))
336                 return g_strdup(sc(PACKAGE, I18N_TYPE_Donot_Use));
337         else if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].sub_text_part, part))
338                 return g_strdup(sc(PACKAGE, I18N_TYPE_Increases_Data_Usage));
339
340         return NULL;
341 }
342 #endif
343
344 static void _gl_changed_network_noti(void *data, Evas_Object *obj,
345                 void *event_info)
346 {
347         int value;
348         const char *object_type;
349
350         __COMMON_FUNC_ENTER__;
351
352         object_type = evas_object_type_get(obj);
353         if (!object_type) {
354                 INFO_LOG(UG_NAME_SCAN, "object_type is NULL");
355                 return;
356         }
357
358         value = common_util_get_system_registry(VCONFKEY_WIFI_ENABLE_QS);
359
360         if (g_strcmp0(object_type, "elm_check") == 0) {
361                 Eina_Bool check_enable = elm_check_state_get(obj);
362
363                 if (check_enable == TRUE)
364                         value = VCONFKEY_WIFI_QS_ENABLE;
365                 else
366                         value = VCONFKEY_WIFI_QS_DISABLE;
367         } else if (g_strcmp0(object_type, "elm_genlist") == 0) {
368                 if (value == VCONFKEY_WIFI_QS_ENABLE)
369                         value = VCONFKEY_WIFI_QS_DISABLE;
370                 else
371                         value = VCONFKEY_WIFI_QS_ENABLE;
372         }
373
374         common_util_set_system_registry(VCONFKEY_WIFI_ENABLE_QS, value);
375
376         if (g_pd.item_network_noti != NULL)
377                 elm_genlist_item_update(g_pd.item_network_noti);
378         elm_genlist_item_selected_set(g_pd.item_network_noti, EINA_FALSE);
379
380         __COMMON_FUNC_EXIT__;
381 }
382
383 static Evas_Object *_gl_content_get_network_noti(void *data,
384                 Evas_Object *obj, const char *part)
385 {
386         Evas_Object *toggle_btn = NULL;
387         int ret;
388
389         if (!strcmp(g_genlist_info[WIFI_GENLIST_MULTILINE_STYLE].sub_content_part, part)) {
390                 toggle_btn = elm_check_add(obj);
391                 evas_object_size_hint_align_set(toggle_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
392                 evas_object_size_hint_weight_set(toggle_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
393
394                 elm_object_style_set(toggle_btn, "on&off");
395                 evas_object_propagate_events_set(toggle_btn, EINA_FALSE);
396 #ifdef ACCESSIBLITY_FEATURE
397                 Evas_Object *ao = NULL;
398                 char buf[100];
399                 ao = elm_object_item_access_object_get(g_pd.item_network_noti);
400                 if (ao) {
401                         g_snprintf(buf, sizeof(buf), "%s%s%s",
402                                         sc(PACKAGE, I18N_TYPE_On),
403                                         sc(PACKAGE, I18N_TYPE_Off),
404                                         sc(PACKAGE, I18N_TYPE_Button));
405                         elm_access_info_set(ao, ELM_ACCESS_TYPE, buf);
406                 }
407 #endif
408                 ret = common_util_get_system_registry(VCONFKEY_WIFI_ENABLE_QS);
409                 switch (ret) {
410                 case 1:
411 #ifdef ACCESSIBLITY_FEATURE
412                         if (ao)
413                                 elm_access_info_set(ao, ELM_ACCESS_STATE,
414                                                 sc(PACKAGE, I18N_TYPE_On));
415 #endif
416                         elm_check_state_set(toggle_btn, EINA_TRUE);
417                         evas_object_smart_callback_add(toggle_btn, "changed",
418                                         _gl_changed_network_noti, NULL);
419                         break;
420                 case 0:
421 #ifdef ACCESSIBLITY_FEATURE
422                         if (ao)
423                                 elm_access_info_set(ao, ELM_ACCESS_STATE,
424                                                 sc(PACKAGE, I18N_TYPE_Off));
425 #endif
426                         elm_check_state_set(toggle_btn, EINA_FALSE);
427                         evas_object_smart_callback_add(toggle_btn, "changed",
428                                         _gl_changed_network_noti, NULL);
429                         break;
430                 default:
431                         ERROR_LOG(COMMON_NAME_ERR, "Setting fail!!");
432                         break;
433                 }
434         }
435         return toggle_btn;
436 }
437
438 #if TIZEN_SLEEP_POLICY
439 static void _gl_changed_keep_wifi_sub(void *data, Evas_Object *obj,
440                 void *event_info)
441 {
442         Elm_Object_Item *item;
443         const char *object_type;
444         int value;
445         Elm_Object_Item *parent = NULL;
446
447         __COMMON_FUNC_ENTER__;
448
449         item = (Elm_Object_Item *) event_info;
450         object_type = evas_object_type_get(obj);
451         if (!object_type) {
452                 INFO_LOG(UG_NAME_SCAN, "object_type is NULL");
453                 return;
454         }
455
456         value = _convert_wifi_keep_value_to_vconf(GPOINTER_TO_INT(data));
457
458         if (value >= 0)
459                 common_util_set_system_registry(VCONF_SLEEP_POLICY, value);
460
461         if (g_strcmp0(object_type, "elm_genlist") == 0)
462                 elm_radio_value_set(g_pd.keep_wifi_radio_group, GPOINTER_TO_INT(data));
463
464         if (item != NULL) {
465                 elm_genlist_item_update(item);
466                 elm_genlist_item_selected_set(item, EINA_FALSE);
467
468                 parent = elm_genlist_item_parent_get(item);
469                 if (parent != NULL)
470                         elm_genlist_item_update(parent);
471         }
472
473         if (g_pd.item_keep_wifi_switch != NULL)
474                 elm_genlist_item_update(g_pd.item_keep_wifi_switch);
475
476         evas_object_del(g_pd.keep_wifi_popup);
477         __COMMON_FUNC_EXIT__;
478 }
479
480 static Evas_Object *_gl_content_get_keep_wifi_sub(void *data,
481                 Evas_Object *obj, const char *part)
482 {
483         __COMMON_FUNC_ENTER__;
484         Evas_Object *radio;
485         int value;
486         Evas_Object *content = NULL;
487
488         if (!g_pd.keep_wifi_radio_group) {
489                 g_pd.keep_wifi_radio_group = elm_radio_add(obj);
490                 elm_radio_state_value_set(g_pd.keep_wifi_radio_group, -1);
491         }
492
493         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].sub_content_part, part)) {
494                 content = elm_layout_add(obj);
495
496                 elm_layout_theme_set(content, "layout", "list/C/type.2", "default");
497                 radio = elm_radio_add(content);
498 #ifdef ACCESSIBLITY_FEATURE
499                 elm_access_object_unregister(radio);
500 #endif
501                 elm_radio_state_value_set(radio, GPOINTER_TO_INT(data));
502                 elm_radio_group_add(radio, g_pd.keep_wifi_radio_group);
503
504                 elm_layout_content_set(content, "elm.swallow.content", radio);
505
506                 value = _convert_vconf_to_wifi_keep_value(
507                                 common_util_get_system_registry(VCONF_SLEEP_POLICY));
508                 if (value == GPOINTER_TO_INT(data))
509                         elm_radio_value_set(g_pd.keep_wifi_radio_group, GPOINTER_TO_INT(data));
510
511                 evas_object_smart_callback_add(radio, "changed", _gl_changed_keep_wifi_sub, data);
512         }
513
514         __COMMON_FUNC_EXIT__;
515         return content;
516 }
517 #endif
518
519 static void _gl_changed_sort_by_sub(void *data, Evas_Object *obj,
520                 void *event_info)
521 {
522         Elm_Object_Item *item;
523         const char *object_type;
524         int value;
525         Elm_Object_Item *parent = NULL;
526
527         __COMMON_FUNC_ENTER__;
528
529         item = (Elm_Object_Item *) event_info;
530         object_type = evas_object_type_get(obj);
531         if (!object_type) {
532                 INFO_LOG(UG_NAME_SCAN, "object_type is NULL");
533                 return;
534         }
535
536         value = _convert_sort_by_value_to_vconf(GPOINTER_TO_INT(data));
537         if (value >= 0)
538                 common_util_set_system_registry(VCONF_SORT_BY, value);
539
540         if (g_strcmp0(object_type, "elm_genlist") == 0)
541                 elm_radio_value_set(g_pd.sort_by_radio_group, GPOINTER_TO_INT(data));
542
543         if (item != NULL) {
544                 elm_genlist_item_update(item);
545                 elm_genlist_item_selected_set(item, EINA_FALSE);
546
547                 parent = elm_genlist_item_parent_get(item);
548                 if (parent != NULL)
549                         elm_genlist_item_update(parent);
550         }
551
552         if (g_pd.item_sort_by != NULL)
553                 elm_genlist_item_update(g_pd.item_sort_by);
554
555         evas_object_del(g_pd.sort_by_popup);
556
557         __COMMON_FUNC_EXIT__;
558 }
559
560 static Evas_Object *_gl_content_get_sort_by_sub(void *data,
561                 Evas_Object *obj, const char *part)
562 {
563         __COMMON_FUNC_ENTER__;
564
565         Evas_Object *radio;
566         int value;
567         Evas_Object *content = NULL;
568
569         if (!g_pd.sort_by_radio_group) {
570                 g_pd.sort_by_radio_group = elm_radio_add(obj);
571                 elm_radio_state_value_set(g_pd.sort_by_radio_group, -1);
572         }
573
574         if (!strcmp(g_genlist_info[WIFI_GENLIST_1LINE_STYLE].sub_content_part, part)) {
575                 content = elm_layout_add(obj);
576
577                 elm_layout_theme_set(content, "layout", "list/C/type.2", "default");
578                 radio = elm_radio_add(content);
579 #ifdef ACCESSIBLITY_FEATURE
580                 elm_access_object_unregister(radio);
581 #endif
582                 elm_radio_state_value_set(radio, GPOINTER_TO_INT(data));
583                 elm_radio_group_add(radio, g_pd.sort_by_radio_group);
584
585                 elm_layout_content_set(content, "elm.swallow.content", radio);
586
587                 value = _convert_vconf_to_sort_by_value(
588                                 common_util_get_system_registry(VCONF_SORT_BY));
589
590                 if (value == GPOINTER_TO_INT(data))
591                         elm_radio_value_set(g_pd.sort_by_radio_group, GPOINTER_TO_INT(data));
592
593                 evas_object_smart_callback_add(radio, "changed",
594                                 _gl_changed_sort_by_sub, data);
595         }
596
597         __COMMON_FUNC_EXIT__;
598         return content;
599 }
600
601 static void _block_clicked_cb(void *data, Evas_Object *obj,
602                 void *event_info)
603 {
604         Evas_Object *popup = (Evas_Object *)data;
605
606         if (popup != NULL)
607                 evas_object_del(popup);
608 }
609
610 #if TIZEN_SLEEP_POLICY
611 static void _gl_keep_wifi(void *data, Evas_Object *obj, void *event_info)
612 {
613         __COMMON_FUNC_ENTER__;
614         Evas_Object *genlist;
615
616         g_pd.keep_wifi_popup = elm_popup_add(obj);
617         eext_object_event_callback_add(g_pd.keep_wifi_popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
618         elm_object_domain_translatable_part_text_set(g_pd.keep_wifi_popup,
619                         "title,text", PACKAGE, "IDS_ST_BODY_KEEP_WI_FI_ON_DURING_SLEEP");
620         elm_popup_align_set(g_pd.keep_wifi_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
621         evas_object_size_hint_weight_set(g_pd.keep_wifi_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
622         evas_object_smart_callback_add(g_pd.keep_wifi_popup, "block,clicked",
623                         _block_clicked_cb, g_pd.keep_wifi_popup);
624
625         /* genlist */
626         genlist = elm_genlist_add(g_pd.keep_wifi_popup);
627         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
628         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
629         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
630         elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE);
631
632         /* radio */
633         g_pd.keep_wifi_radio_group = elm_radio_add(genlist);
634         evas_object_data_set(genlist, "radio", g_pd.keep_wifi_radio_group);
635
636         elm_genlist_item_append(genlist, &itc_keep_wifi_sub,
637                         (const void *) I18N_TYPE_Always, NULL, ELM_GENLIST_ITEM_NONE,
638                         _gl_changed_keep_wifi_sub, (const void *)I18N_TYPE_Always);
639
640         elm_genlist_item_append(genlist, &itc_keep_wifi_sub,
641                         (const void *) I18N_TYPE_Plugged, NULL, ELM_GENLIST_ITEM_NONE,
642                         _gl_changed_keep_wifi_sub, (const void *)I18N_TYPE_Plugged);
643
644         elm_genlist_item_append(genlist, &itc_keep_wifi_sub_never,
645                         (const void *) I18N_TYPE_Donot_Use, NULL, ELM_GENLIST_ITEM_NONE,
646                         _gl_changed_keep_wifi_sub, (const void *)I18N_TYPE_Donot_Use);
647
648         evas_object_show(genlist);
649         elm_object_content_set(g_pd.keep_wifi_popup, genlist);
650         evas_object_show(g_pd.keep_wifi_popup);
651
652         elm_genlist_item_selected_set(g_pd.item_keep_wifi_switch, EINA_FALSE);
653         __COMMON_FUNC_EXIT__;
654 }
655 #endif
656
657 static void _gl_sort_by(void *data, Evas_Object *obj, void *event_info)
658 {
659         __COMMON_FUNC_ENTER__;
660         Evas_Object *genlist = NULL;
661
662         g_pd.sort_by_popup = elm_popup_add(obj);
663         eext_object_event_callback_add(g_pd.sort_by_popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
664         elm_object_domain_translatable_part_text_set(g_pd.sort_by_popup,
665                         "title,text", PACKAGE, "IDS_WIFI_BODY_SORT_BY");
666         elm_popup_align_set(g_pd.sort_by_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
667         evas_object_size_hint_weight_set(g_pd.sort_by_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
668         evas_object_smart_callback_add(g_pd.sort_by_popup, "block,clicked",
669                         _block_clicked_cb, g_pd.sort_by_popup);
670
671         /* genlist */
672         genlist = elm_genlist_add(g_pd.sort_by_popup);
673         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
674         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
675         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
676         elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE);
677
678         /* radio */
679         g_pd.sort_by_radio_group = elm_radio_add(genlist);
680         evas_object_data_set(genlist, "radio", g_pd.sort_by_radio_group);
681
682         itc_sort_by_sub.item_style = g_genlist_info[WIFI_GENLIST_1LINE_STYLE].style_name;
683         elm_genlist_item_append(genlist, &itc_sort_by_sub,
684                         (const void *) I18N_TYPE_Alphabetical, NULL, ELM_GENLIST_ITEM_NONE,
685                         _gl_changed_sort_by_sub, (const void *)I18N_TYPE_Alphabetical);
686
687         elm_genlist_item_append(genlist, &itc_sort_by_sub,
688                         (const void *) I18N_TYPE_Signal_Strength, NULL, ELM_GENLIST_ITEM_NONE,
689                         _gl_changed_sort_by_sub, (const void *)I18N_TYPE_Signal_Strength);
690
691         evas_object_show(genlist);
692         elm_object_content_set(g_pd.sort_by_popup, genlist);
693         evas_object_show(g_pd.sort_by_popup);
694
695         elm_genlist_item_selected_set(g_pd.item_sort_by, EINA_FALSE);
696         __COMMON_FUNC_EXIT__;
697 }
698
699 static Evas_Object *_create_list(Evas_Object *parent)
700 {
701         Evas_Object *gl;
702         int wifi_state = 0;
703
704         vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
705         INFO_LOG(UG_NAME_NORMAL, "Wi-Fi state %d", wifi_state);
706
707         gl = elm_genlist_add(parent);
708         assertm_if(NULL == gl, "NULL!!");
709
710         elm_object_style_set(gl, "dialogue");
711         elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
712
713         evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
714         evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
715
716         elm_genlist_mode_set(gl, ELM_LIST_COMPRESS);
717
718         evas_object_smart_callback_add(gl, "realized", _gl_realized, NULL);
719
720         /* Network Notification */
721         itc_network_noti.item_style = g_genlist_info[WIFI_GENLIST_MULTILINE_STYLE].style_name;
722         g_pd.item_network_noti = elm_genlist_item_append(gl, &itc_network_noti,
723                         (const void *) I18N_TYPE_Network_notification, NULL,
724                         ELM_GENLIST_ITEM_NONE, _gl_changed_network_noti, NULL);
725
726 #if TIZEN_SLEEP_POLICY
727         /* Keep WI-FI on during sleep */
728         g_pd.item_keep_wifi_switch = elm_genlist_item_append(gl, &itc_keep_wifi,
729                         (const void *) I18N_TYPE_Keep_WIFI_on_during_sleep, NULL,
730                         ELM_GENLIST_ITEM_NONE, _gl_keep_wifi, NULL);
731 #endif
732
733         /* Sort By */
734         itc_sort_by.item_style = g_genlist_info[WIFI_GENLIST_1LINE_STYLE].style_name;
735         g_pd.item_sort_by = elm_genlist_item_append(gl, &itc_sort_by,
736                         (const void *) I18N_TYPE_Sort_by, NULL,
737                         ELM_GENLIST_ITEM_NONE, _gl_sort_by, NULL);
738
739         /* Install Certificate */
740         itc_install_cert.item_style = g_genlist_info[WIFI_GENLIST_1LINE_STYLE].style_name;
741         g_pd.item_install_cert = elm_genlist_item_append(gl, &itc_install_cert,
742                         NULL, NULL, ELM_GENLIST_ITEM_NONE, _gl_cert_sel_cb, NULL);
743
744         evas_object_show(gl);
745
746         return gl;
747 }
748
749 static void __vconf_noti_change_cb(keynode_t *node, void *user_data)
750 {
751         int state = 0;
752
753         vconf_get_int(VCONFKEY_WIFI_ENABLE_QS, &state);
754         INFO_LOG(UG_NAME_NORMAL, "New notification option - %d", state);
755
756         if (g_pd.item_network_noti != NULL)
757                 elm_genlist_item_update(g_pd.item_network_noti);
758 }
759
760 static void __vconf_sleep_change_cb(keynode_t *node, void *user_data)
761 {
762         int state = 0;
763
764         vconf_get_int(VCONF_SLEEP_POLICY, &state);
765         INFO_LOG(UG_NAME_NORMAL, "New sleep policy - %d", state);
766
767         if (g_pd.item_keep_wifi_switch != NULL)
768                 elm_genlist_item_update(g_pd.item_keep_wifi_switch);
769 }
770
771 static void __vconf_sort_change_cb(keynode_t *node, void *user_data)
772 {
773         int state = 0;
774
775         vconf_get_int(VCONF_SORT_BY, &state);
776         INFO_LOG(UG_NAME_NORMAL, "New sort by option - %d", state);
777
778         if (g_pd.item_sort_by != NULL)
779                 elm_genlist_item_update(g_pd.item_sort_by);
780 }
781
782 static void __vconf_smart_switch_change_cb(keynode_t *node, void *user_data)
783 {
784         int state = 0;
785
786         vconf_get_int(VCONF_SMART_SWITCHING, &state);
787         INFO_LOG(UG_NAME_NORMAL, "New smart switch option - %d", state);
788
789         if (g_pd.item_smart_switch != NULL)
790                 elm_genlist_item_update(g_pd.item_smart_switch);
791 }
792
793 static Eina_Bool __back_key_cb(void *data, Elm_Object_Item *it)
794 {
795         __COMMON_FUNC_ENTER__;
796
797         /* Delete vconf listeners for the different options */
798         vconf_ignore_key_changed(VCONFKEY_WIFI_ENABLE_QS, __vconf_noti_change_cb);
799         vconf_ignore_key_changed(VCONF_SLEEP_POLICY, __vconf_sleep_change_cb);
800         vconf_ignore_key_changed(VCONF_SORT_BY, __vconf_sort_change_cb);
801         vconf_ignore_key_changed(VCONF_SMART_SWITCHING,
802                         __vconf_smart_switch_change_cb);
803
804         __COMMON_FUNC_EXIT__;
805
806         return EINA_TRUE;
807 }
808
809 static void __back_btn_cb(void *data, Evas_Object *obj, void *event_info)
810 {
811         Evas_Object *navi_frame = (Evas_Object *)data;
812         if (!navi_frame)
813                 return;
814
815         elm_naviframe_item_pop(navi_frame);
816 }
817
818 void view_advanced(void)
819 {
820         Evas_Object *layout = NULL;
821         Evas_Object *navi_frame = NULL;
822         Elm_Object_Item *navi_it = NULL;
823         Evas_Object *back_btn = NULL;
824         char title[100];
825
826         __COMMON_FUNC_ENTER__;
827
828         memset(&g_pd, 0, sizeof(struct _private_data));
829
830         navi_frame = viewer_manager_get_naviframe();
831         if (navi_frame == NULL) {
832                 ERROR_LOG(UG_NAME_NORMAL, "Failed to get naviframe");
833                 return;
834         }
835
836         layout = common_utils_create_layout(navi_frame);
837         evas_object_show(layout);
838
839         back_btn = elm_button_add(navi_frame);
840         elm_object_style_set(back_btn, "naviframe/back_btn/default");
841         evas_object_smart_callback_add(back_btn, "clicked", __back_btn_cb, navi_frame);
842         elm_object_focus_allow_set(back_btn, EINA_FALSE);
843
844         g_pd.list = _create_list(layout);
845         assertm_if(NULL == g_pd.list, "_create_list failed");
846
847         elm_object_part_content_set(layout, "elm.swallow.content", g_pd.list);
848
849         g_strlcpy(title, "IDS_WIFI_BODY_ADVANCED_SETTINGS", sizeof(title));
850         navi_it = elm_naviframe_item_push(navi_frame, title, back_btn, NULL,
851                         layout, NULL);
852         elm_object_item_domain_text_translatable_set(navi_it, PACKAGE, EINA_TRUE);
853
854         evas_object_data_set(navi_frame, SCREEN_TYPE_ID_KEY,
855                         (void *) VIEW_MANAGER_VIEW_TYPE_ADVANCED);
856
857         elm_naviframe_item_pop_cb_set(navi_it, __back_key_cb, NULL);
858
859         /* Add vconf listeners for the different options */
860         vconf_notify_key_changed(VCONFKEY_WIFI_ENABLE_QS, __vconf_noti_change_cb,
861                         NULL);
862         vconf_notify_key_changed(VCONF_SLEEP_POLICY, __vconf_sleep_change_cb,
863                         NULL);
864         vconf_notify_key_changed(VCONF_SORT_BY, __vconf_sort_change_cb,
865                         NULL);
866         vconf_notify_key_changed(VCONF_SMART_SWITCHING,
867                         __vconf_smart_switch_change_cb, NULL);
868
869         __COMMON_FUNC_EXIT__;
870 }