a7b59096bed922c862822ad3959413c0c11b94d7
[apps/core/preloaded/settings.git] / setting-about / src / setting-about-main.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-cfg.h>
22 #include <setting-about-main.h>
23 #include <aul.h>
24 #include <iniparser.h>
25 #include <sys/types.h>
26 #include <sys/stat.h>
27 #include <fcntl.h>
28 #include <bluetooth-api.h>
29
30
31 #include <app_manager.h>
32 #include <system_info.h>
33
34 #define DEVNAME_BLOCK_SPACE     0
35 // #define SUPPORT_DIAG_USAGE
36
37 /** @todo : need to handle unicode encoded input characters */
38
39 #define MAX_DEVICE_NAME_LEN                     24
40 #define EMPTY_LIMITATION_STR            "IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
41 #define DIAGNOSTICS_USAGE_STR       "Diagnostics and Usage"
42 #define SOFTWARE_UPDATE_STR                     "IDS_ST_MBODY_SOFTWARE_UPDATE"
43
44
45 static int setting_about_main_create(void *cb);
46 static int setting_about_main_destroy(void *cb);
47 static int setting_about_main_update(void *cb);
48 static int setting_about_main_cleanup(void *cb);
49
50 setting_view setting_view_about_main = {
51         .create = setting_about_main_create,
52         .destroy = setting_about_main_destroy,
53         .update = setting_about_main_update,
54         .cleanup = setting_about_main_cleanup,
55 };
56 /**
57 * Do process when clicking '<-' button
58 *
59 * @param data
60 * @param obj
61 * @param event_info
62 */
63 static void setting_about_main_click_softkey_back_cb(void *data,
64                                                      Evas_Object *obj,
65                                                      void *event_info);
66
67 /**
68 * Do process when clicking on some genlist item
69 *
70 * @param data
71 * @param obj
72 * @param event_info
73 */
74 static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
75                                                         Evas_Object *obj,
76                                                         void *event_info);
77
78 static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
79                                                     Evas_Object *obj,
80                                                     void *event_info);
81
82 static void __setting_about_main_certificates_clicked(void *data);
83 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj);
84 static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj);
85 /* ***************************************************
86  *
87  *basic func
88  *
89  ***************************************************/
90 static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
91 {
92         SettingAboutUG *ad = data;
93         if (obj) {
94                 evas_object_del(obj);
95                 obj = NULL;
96         }
97         ad->popup = NULL;
98 }
99 static void __device_name_changed_cb(void *data, Evas_Object *obj)
100 {
101         retm_if(!data || !obj, "Data parameter is NULL");
102         //return if entry is not focused too
103
104         Setting_GenGroupItem_Data *list_item =
105             (Setting_GenGroupItem_Data *) data;
106         SettingAboutUG *ad = list_item->userdata;
107         retm_if(ad == NULL, "Data parameter is NULL");
108
109         const char *entry_str = elm_entry_entry_get(obj);
110         int entry_len = safeStrLen(entry_str);
111         SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
112
113 #if DEVNAME_BLOCK_SPACE
114         //block 'Space' key
115         if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
116                 SETTING_TRACE("Cannot input the 'space' key or 'enter' key");
117
118                 int i = 0;
119                 int j = 0;
120                 char *tmp = (char *)g_strdup(entry_str);
121                 for (; tmp[i];) {
122                         if (tmp[i] == ' ') {
123                                 for (j = i; tmp[j]; j++) {
124                                         tmp[j] = tmp[j + 1];
125                                 }
126                         } else {
127                                 i++;
128                         }
129                 }
130                 G_FREE(list_item->sub_desc);
131                 list_item->sub_desc = (char *)g_strdup(tmp);
132                 G_FREE(tmp);
133                 SETTING_TRACE("sub_desc:[%s]", list_item->sub_desc);
134
135                 elm_entry_entry_set(obj, list_item->sub_desc);
136                 elm_entry_cursor_end_set(obj);
137         }
138 #endif
139         //for genlist update
140         G_FREE(list_item->sub_desc);//release first
141         list_item->sub_desc = (char *)g_strdup(entry_str);
142
143         if (NULL == entry_str || 0 == entry_len) {
144                 if (!ad->empty_flag)
145                 {
146                         ad->empty_flag = TRUE;
147                         elm_entry_context_menu_disabled_set(obj, TRUE); //disable the copy&paste&search popup
148                         elm_entry_magnifier_disabled_set(obj, TRUE);
149                         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
150                         if (navi_it)
151                         {
152                                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
153                                 setting_disable_evas_object(back_btn);
154                                 setting_dim_evas_object(back_btn, TRUE);
155
156                                 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
157                                 if(top_r_btn)
158                                 {
159                                         setting_disable_evas_object(top_r_btn);
160                                         setting_dim_evas_object(top_r_btn, TRUE);
161                                 }
162                         }
163                 }
164         } else {
165                 if (ad->empty_flag)
166                 {
167                         ad->empty_flag = FALSE;
168                         elm_entry_context_menu_disabled_set(obj, FALSE); //enable the copy&paste&search popup
169                         elm_entry_magnifier_disabled_set(obj, FALSE);
170                         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
171                         if (navi_it)
172                         {
173                                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
174                                 setting_enable_evas_object(back_btn);
175                                 setting_undo_dim_evas_object(back_btn, TRUE);
176
177                                 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
178                                 if(top_r_btn)
179                                 {
180                                         setting_enable_evas_object(top_r_btn);
181                                         setting_undo_dim_evas_object(top_r_btn, TRUE);
182                                 }
183                         }
184                 }
185         }
186
187 }
188
189 static void
190 __setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
191                                        void *event_info)
192 {
193         __device_name_changed_cb(data, obj);
194 }
195
196
197 /**
198  *      Model Name:
199  *              - No ini: Unavailable
200  *              - I9500 @ target: GT-I9500
201  *              - I9500 @ emul: SDK
202  *              - SLP   @ target: GT-SLP
203  *              - SLP   @ emul: SDK
204  */
205 void setting_about_main_get_phone_model_name(char* szStr, int nSize)
206 {
207         retm_if(szStr == NULL, "szStr parameter is NULL");
208
209         char *value = NULL;
210         int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value);
211         SETTING_TRACE("value : %s", value);
212         if (ret != SYSTEM_INFO_ERROR_NONE) {
213                 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
214                 FREE(value);
215                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
216                 return;
217         }
218
219         if (value) {
220                 snprintf(szStr, nSize, "%s", value);
221         } else {
222                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
223         }
224
225         FREE(value);
226 }
227
228 void setting_about_main_get_sw_version(char* szStr, int nSize)
229 {
230         retm_if(szStr == NULL, "szStr parameter is NULL");
231
232         dictionary* dic = iniparser_load(SETTING_ABOUT_INFO_PATH);
233         if (dic == NULL) {
234                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
235         } else {
236                 char* szBinVer =
237                         g_strdup((char*)iniparser_getstr(dic, "Version:Build"));
238                 char* szVerMaj =
239                         g_strdup((char*)iniparser_getstr(dic, "Version:Major"));
240                 char* szVerMin =
241                         g_strdup((char*)iniparser_getstr(dic, "Version:Minor"));
242
243                 if (szBinVer) {
244                         char* pPos = szBinVer;
245                         while(*pPos++) {
246                                 if ('.' == *pPos) *pPos = '\0';
247                         }
248                 }
249                 else {
250                         szBinVer = g_strdup(_("IDS_ST_HEADER_UNAVAILABLE"));
251                 }
252                 if (!szVerMaj) {
253                         szVerMaj = g_strdup("-");
254                 }
255                 if (!szVerMin) {
256                         szVerMin = g_strdup("-");
257                 }
258
259                 snprintf(szStr, nSize, "SLP%s.%s (%s)", szVerMaj, szVerMin, szBinVer);
260                 G_FREE(szBinVer);
261                 G_FREE(szVerMaj);
262                 G_FREE(szVerMin);
263         }
264
265         if (dic) {
266                 iniparser_freedict(dic);
267                 dic = NULL;
268         }
269 }
270
271 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
272 {
273         setting_retm_if(str == NULL, "str parameter is NULL");
274         setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN+1, "size parameter is wrong");
275
276         FILE *p = fopen(SETTING_ABOUT_MACINFO_PATH, "r");
277
278         if (p) {
279                 int size = fread(str, sizeof(char), SETTING_ABOUT_WIFI_MAC_STR_LEN, p);
280                 if (size != SETTING_ABOUT_WIFI_MAC_STR_LEN) {
281                         SETTING_TRACE_ERROR("fail to call fread");
282                 }
283                 fclose(p);
284                 p = NULL;
285         } else {
286                 perror("open failed!");
287         }
288
289         SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
290
291         int wifi_state = VCONFKEY_WIFI_OFF;
292         vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
293
294         if((safeStrLen(str) == 0) || (wifi_state == VCONFKEY_WIFI_OFF))
295                 snprintf(str, size, "%s  (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
296 }
297
298 void setting_about_main_get_battery_string(char *str, int size)
299 {
300         setting_retm_if(str == NULL, "str parameter is NULL");
301
302         int val = -1;
303         char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
304         snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
305                  "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
306
307         char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
308         int fd = 0;
309         int r = 0;
310
311         fd = open(file, O_RDONLY);
312         if (fd != -1) {
313                 r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
314                 if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
315                         buf[r] = '\0';
316                         val = atoi(buf);
317                         snprintf(str, size, "%d%s", val, "\%");
318                 } else {
319                         SETTING_TRACE_ERROR("read file fail");
320                         snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
321                 }
322
323                 close(fd);
324         } else {
325                 SETTING_TRACE_ERROR("open file fail");
326                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
327         }
328 }
329
330 void setting_about_main_get_bluetooth_address_string(char *str, int size)
331 {
332         setting_retm_if(str == NULL, "str parameter is NULL");
333
334         bluetooth_device_address_t local_address;
335         memset(&local_address, 0x0, sizeof(local_address));
336         int ret = 0;
337
338         /* for fixing BS of dbus signal */
339         bluetooth_register_callback(NULL, NULL);
340
341         ret = bluetooth_get_local_address(&local_address);
342
343         /* for fixing BS of dbus signal */
344         bluetooth_unregister_callback();
345
346         if (ret < 0) {
347                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
348         } else {
349                 snprintf(str, size, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
350                         local_address.addr[0], local_address.addr[1], local_address.addr[2],
351                         local_address.addr[3], local_address.addr[4], local_address.addr[5]);
352         }
353         SETTING_TRACE_DEBUG("bt address : %s", str);
354 }
355
356 int __stat_get_cpuinfo(float *usr_pct, float *sys_pct)
357 {
358         setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
359         setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
360
361         /*  default value */
362         *usr_pct = 0.0;
363         *sys_pct = 0.0;
364         static unsigned long long usr_time = 0, nice_time = 0, sys_time = 0;
365         static unsigned long long old_usr = 0, old_nice = 0, old_sys = 0;
366         static struct timeval old_tv, cur_tv;
367         unsigned long long elapsed_tick;
368         long tick_per_sec;
369         long cpu_num;
370         FILE *fp = NULL;
371         int ret = 0;
372
373         tick_per_sec = sysconf(_SC_CLK_TCK);
374         cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
375
376         if (cpu_num < 1)
377                 cpu_num = 1;
378
379         gettimeofday(&cur_tv, NULL);
380         fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
381         if (fp == NULL) {
382                 SETTING_TRACE_ERROR("fp == NULL");
383                 return -ENOENT;
384         }
385
386         char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
387         char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
388
389                 if(cpu_info_p == NULL) {
390                         SETTING_TRACE_ERROR("fgets failed");
391                         fclose(fp);   // free - code
392                         return -ENOENT;
393                 }
394
395         char *substr = NULL;
396         unsigned long long tmp_long = 0;
397         int i = 0;
398         /* split cpu_info, get 3 numbers headmost*/
399         while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
400                 char* endptr = NULL;
401                 tmp_long = strtoull(substr, &endptr, 10);
402                 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
403                         switch (i) {
404                         case 0:
405                                 usr_time = tmp_long;
406                                 break;
407                         case 1:
408                                 nice_time = tmp_long;
409                                 break;
410                         case 2:
411                                 sys_time = tmp_long;
412                                 break;
413                         default:
414                                 break;
415                         }
416                         i++;
417                 }
418                 if (i >= 3) {
419                         break;
420                 }
421         }
422
423         fclose(fp);
424         fp = NULL;
425         if (old_usr == 0) {
426                 ret = -EAGAIN;
427                 SETTING_TRACE_ERROR("old_usr == 0");
428                 goto out;
429         }
430
431         elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
432             ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
433
434         /* REMOVE BS */
435         if (elapsed_tick != 0)
436                 *usr_pct =
437                     ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
438                     cpu_num;
439         else
440                 *usr_pct = 0;
441         /* REMOVE BS */
442         if (elapsed_tick != 0)
443                 *sys_pct =
444                     ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
445                     cpu_num;
446         else
447                 *sys_pct = 0;
448
449  out:
450         old_usr = usr_time;
451         old_nice = nice_time;
452         old_sys = sys_time;
453         old_tv = cur_tv;
454
455         return ret;
456 }
457
458 static Eina_Bool __timer_update_cb(const void *data)
459 {
460         retv_if(data == NULL, TRUE);
461         SettingAboutUG *ad = (SettingAboutUG *) data;
462
463         char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
464         if (ad->item_data_cpu) {
465                 float usr, sys;
466                 int ret = __stat_get_cpuinfo(&usr, &sys);
467                 if (ret == -ENOENT) {
468                         SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
469                         snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
470                 } else {
471                         snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
472                 }
473
474                 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
475                 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
476                 elm_genlist_item_update(ad->item_data_cpu->item);
477         }
478
479         if (ad->item_data_battery) {
480                 setting_about_main_get_battery_string(str, sizeof(str));
481                 /*SETTING_TRACE("str:%s", str);*/
482                 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
483                 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
484                 elm_genlist_item_update(ad->item_data_battery->item);
485         }
486         return TRUE;
487 }
488
489 static void
490 __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
491 {
492         ret_if(!data);
493         SettingAboutUG *ad = (SettingAboutUG *) data;
494         retm_if(event == NULL, "Invalid argument: event info is NULL");
495         Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
496
497         if (ad->item_dev_name) {
498                 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
499                 if (ad->item_dev_name->item == selected_item)//do nothing..
500                         return;
501
502                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
503         }
504 }
505
506 static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
507 {
508         SETTING_TRACE_BEGIN;
509         retm_if(!data || !obj, "Data parameter is NULL");
510
511         Evas_Object *entry_container = elm_object_parent_widget_get(obj);
512         if (entry_container) {
513                 //whe entry unfocused, its guidetext will becomes "Input here"
514                 elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
515                 if (elm_entry_is_empty(obj))
516                         elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
517                 elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
518         }
519
520         //Setting_GenGroupItem_Data *list_item = data;
521         const char *entry_str = elm_entry_entry_get(obj);
522         char *entry_str_utf8 = NULL;
523         entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
524         //int len = safeStrLen(entry_str_utf8);
525         SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
526
527         //ecore_idler_add(__check_on_idler, ad);
528         Setting_GenGroupItem_Data *item_dev_name = data;
529         SettingAboutUG *ad = item_dev_name->userdata;
530         __device_name_changed_cb(item_dev_name, item_dev_name->eo_check);
531         //after unfocus,need updating..
532         elm_object_item_data_set(item_dev_name->item, item_dev_name);
533         elm_genlist_item_update(item_dev_name->item);
534
535
536         if(ad->navi_item
537            && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
538                 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
539                 evas_object_del(btn);
540         }
541         setting_hide_input_pannel_cb(item_dev_name->eo_check);
542         if (item_dev_name) {
543                 if (ad->empty_flag) {
544                         if (ad->popup) {
545                                 evas_object_del(ad->popup);
546                                 ad->popup = NULL;
547                         }
548                         ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
549                                              __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
550                         return;
551                 } else {
552                 }
553         }
554
555
556         if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
557                 SETTING_TRACE_ERROR("Set vconf[%s] failed",
558                                     VCONFKEY_SETAPPL_DEVICE_NAME_STR);
559         }
560
561         FREE(entry_str_utf8);
562
563 }
564
565 static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
566 {
567         ret_if(data == NULL);
568         SettingAboutUG *ad = (SettingAboutUG*)data;
569         Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
570         SETTING_TRACE_DEBUG("ev->key : %s", ev->key);
571
572         SETTING_TRACE("ad->item_dev_name->eo_check:%p", ad->item_dev_name->eo_check);
573         SETTING_TRACE("obj:%p, %s", obj, elm_entry_entry_get(obj));
574         if(safeStrCmp(ev->key, "Return") == 0)
575         {
576                 // if entry has 1 char at list, hide ime.
577                 if(safeStrLen(elm_entry_entry_get(obj)) > 0)
578                 {
579                         ecore_imf_context_input_panel_hide((Ecore_IMF_Context*)elm_entry_imf_context_get(obj));
580                 }
581                 else
582                 {
583                         if (ad->popup) {
584                                 evas_object_del(ad->popup);
585                                 ad->popup = NULL;
586                         }
587                         ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
588                                              __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
589                 }
590         } else {
591                 Evas_Object *entry_container = elm_object_parent_widget_get(obj);
592                 if(safeStrLen(elm_entry_entry_get(obj)) > 0) {
593                         elm_object_signal_emit(entry_container, "elm,state,guidetext,hide", "elm");
594                 } else {
595                         //elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
596                         elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
597                 }
598         }
599 }
600
601
602 int setting_about_generate_genlist(void *data)
603 {
604         SETTING_TRACE_BEGIN;
605         /* error check */
606         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
607
608         SettingAboutUG *ad = (SettingAboutUG *) data;
609         bool is_emul_bin = isEmulBin();
610
611         Evas_Object *scroller = ad->genlsit;
612         Elm_Object_Item *item = NULL;
613         Setting_GenGroupItem_Data *item_data = NULL;
614         char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
615         (void)setting_create_Gendial_field_titleItem(scroller,
616                                                      &(ad->itc_group_item),
617                                                      SETTING_ABOUT_DEVICE_INFO_STR, NULL);
618         /* Device name */
619         char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
620         char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
621         FREE(name_value);
622
623         ad->empty_flag = FALSE;
624         if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0])
625         {
626                 ad->empty_flag = TRUE;
627                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
628                 if (navi_it)
629                 {
630                         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
631                         setting_disable_evas_object(back_btn);
632                         setting_dim_evas_object(back_btn, TRUE);
633                 }
634         }
635
636
637         // [UI] Device name
638         char *app_name = NULL;
639         int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm-ui", &app_name);
640         if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
641         {
642                 SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
643                 ad->item_dev_name = NULL;
644         } else {
645
646                 ad->item_dev_name =
647                         setting_create_Gendial_field_def(scroller, &(ad->itc_1icon),
648                                                                  setting_about_main_mouse_up_Gendial_list_cb,
649                                                          ad, SWALLOW_Type_LAYOUT_ENTRY,
650                                                          NULL, NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc,
651                                                          __setting_about_device_name_changed_cb);
652                 if (ad->item_dev_name) {
653                         ad->item_dev_name->userdata = ad;
654                         ad->item_dev_name->isSinglelineFlag = 1;
655                         ad->item_dev_name->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
656                         ad->item_dev_name->stop_change_cb = __entry_unfocus_cb;
657                         ad->item_dev_name->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
658
659                         if (ad->item_dev_name->limit_filter_data) {
660                                 //max byte len is 31 not 31+1
661                                 //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
662                                 ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
663                                 ad->item_dev_name->win_main = ad->win_get;
664                         }
665                         //ad->item_dev_name->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBER;
666                         ad->item_dev_name->input_panel_disable_flag = EINA_TRUE;
667                 } else {
668                                 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
669                 }
670                 FREE(pa_sub_desc);
671         }
672
673         // [UI] My number
674         int err;
675         char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
676         setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
677
678         if (ad->my_numbers.count == 1) {
679                 item_data =
680                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
681                                              NULL,
682                                              ad, SWALLOW_Type_INVALID, NULL,
683                                              NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
684                                              sel_num, NULL);
685                 if (item_data) {
686                         elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
687                 } else {
688                         SETTING_TRACE_ERROR("item_data is NULL");
689                 }
690         } else if (ad->my_numbers.count > 1){
691                 setting_enable_expandable_genlist(scroller, ad,
692                                           setting_about_main_exp_cb, NULL);
693                 item_data = setting_create_Gendial_exp_parent_field(scroller,
694                                                     &(ad->itc_2text_3_parent),
695                                                     NULL, NULL,
696                                                     SWALLOW_Type_INVALID,
697                                                     SETTING_ABOUT_MY_NUMBER_STR,
698                                                     sel_num);
699                 if (item_data) {
700                         item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
701                 } else {
702                         SETTING_TRACE_ERROR("ad->data_wap is NULL");
703                 }
704
705         } else {
706                 SETTING_TRACE_ERROR("don't have my number");
707         }
708
709         // [UI] Phone model
710         memset(str, 0x00, sizeof(str));
711         setting_about_main_get_phone_model_name(str, sizeof(str));
712         item_data =
713             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
714                                              NULL, SWALLOW_Type_INVALID, NULL,
715                                              NULL, 0, SETTING_ABOUT_MODEL_STR, str, NULL);
716         if (item_data) {
717                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
718         } else {
719                 SETTING_TRACE_ERROR("item_data is NULL");
720         }
721
722         // [UI] SW version
723         memset(str, 0x00, sizeof(str));
724         setting_about_main_get_sw_version(str, sizeof(str));
725         item_data =
726             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
727                                              NULL, SWALLOW_Type_INVALID, NULL,
728                                              NULL, 0, SETTING_ABOUT_VERSION_STR, str, NULL);
729         if (item_data) {
730                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
731         } else {
732                 SETTING_TRACE_ERROR("item_data is NULL");
733         }
734
735         // [UI] Bluetooth address
736         if ( ! is_emul_bin) { // requested by DI Kim due to BT BS on 11/26
737                 memset(str, 0x00, sizeof(str));
738                 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
739                 ad->item_data_bt =
740                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
741                                                          NULL, SWALLOW_Type_INVALID, NULL,
742                                                          NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
743                 if (ad->item_data_bt) {
744                         elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
745                 } else {
746                                 SETTING_TRACE_ERROR("item_data is NULL");
747                 }
748         }
749
750         // [UI] MAC address
751         memset(str, 0x00, sizeof(str));
752         setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
753
754         SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
755
756         ad->item_data_wifi =
757             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
758                                              NULL, SWALLOW_Type_INVALID, NULL,
759                                              NULL, 0, SETTING_ABOUT_WIFI_STR, str, NULL);
760         if (ad->item_data_wifi) {
761                 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
762         } else {
763                 SETTING_TRACE_ERROR("item_data is NULL");
764         }
765
766         // [UI] Battery
767         memset(str, 0x00, sizeof(str));
768         setting_about_main_get_battery_string(str, sizeof(str));
769         item_data =
770             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
771                                              NULL, SWALLOW_Type_INVALID, NULL,
772                                              NULL, 0, SETTING_ABOUT_BATTERY_STR, str, NULL);
773         if (item_data) {
774                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
775                 ad->item_data_battery = item_data;
776         } else {
777                 SETTING_TRACE_ERROR("item_data is NULL");
778         }
779
780         // [UI] CPU Info
781         memset(str, 0x00, sizeof(str));
782         float usr, sys;
783         int ret = __stat_get_cpuinfo(&usr, &sys);
784         if (ret == -ENOENT) {
785                 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
786                 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
787         } else {
788                 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
789         }
790
791         ad->item_data_cpu = item_data =
792             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
793                                              NULL, SWALLOW_Type_INVALID, NULL,
794                                              NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
795         if (item_data) {
796                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
797         } else {
798                 SETTING_TRACE_ERROR("item_data is NULL");
799         }
800
801         // [UI] separator
802         item =
803             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
804                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
805         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
806
807 #ifdef SUPPORT_DIAG_USAGE
808         // [UI] Diagnostics and Usage
809         if (!is_emul_bin) {
810                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
811                                          setting_about_main_mouse_up_Gendial_list_cb,
812                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
813                                          0, DIAGNOSTICS_USAGE_STR,
814                                          NULL, NULL);
815         }
816 #endif
817
818 #ifdef SUPPORT_FOTA
819         // [UI] Software update
820         if (!is_emul_bin) {
821                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
822                                          setting_about_main_mouse_up_Gendial_list_cb,
823                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
824                                          0, SOFTWARE_UPDATE_STR,
825                                          NULL, NULL);
826         }
827 #endif
828         // [UI] Certificates
829         // implementation is in progress.
830         if (is_ug_installed_by_ug_args("setting-manage-applications-efl"))
831         {
832                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
833                                                  setting_about_main_mouse_up_Gendial_list_cb,
834                                                  ad, SWALLOW_Type_INVALID, NULL, NULL,
835                                                  0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
836
837                 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
838                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
839                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
840         }
841
842
843         ad->update_timer =
844             ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
845
846         return SETTING_RETURN_SUCCESS;
847 }
848
849 static int setting_about_main_create(void *cb)
850 {
851         SETTING_TRACE_BEGIN;
852         /* error check */
853         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
854
855         SettingAboutUG *ad = (SettingAboutUG *) cb;
856
857         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
858         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
859                  "Cannot set scroller object  as contento of layout");
860         elm_object_style_set(scroller, "dialogue");
861         elm_genlist_clear(scroller);    /* first to clear list */
862
863         /*  Enabling illume notification property for window */
864         elm_win_conformant_set(ad->win_main_layout, 1);
865         Evas_Object *conformant = elm_conformant_add(ad->win_main_layout);
866         elm_object_style_set(conformant, "internal_layout");    /*  By Kollus. 2011-01-04 */
867         evas_object_show(conformant);
868         elm_object_content_set(conformant, scroller);
869         ad->genlsit = scroller;
870
871         ad->ly_main =
872             setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
873                                            _(KeyStr_AboutPhone),
874                                            _("IDS_COM_BODY_BACK"), NULL, NULL,
875                                            setting_about_main_click_softkey_back_cb,
876                                            NULL, NULL, ad, conformant,
877                                            &ad->navi_bar, NULL);
878
879         evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
880                                        __about_main_gl_mouse_up, ad);
881
882         ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
883
884         setting_about_generate_genlist((void *)ad);
885
886         setting_view_about_main.is_create = 1;
887         SETTING_TRACE_END;
888         return SETTING_RETURN_SUCCESS;
889 }
890
891 static int setting_about_main_destroy(void *cb)
892 {
893         SETTING_TRACE_BEGIN;
894         /* error check */
895         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
896
897         SettingAboutUG *ad = (SettingAboutUG *) cb;
898
899         if (ad->update_timer) {
900                 ecore_timer_del(ad->update_timer);
901                 ad->update_timer = NULL;
902         }
903         if (ad->popup) {
904                 evas_object_del(ad->popup);
905                 ad->popup = NULL;
906         }
907
908         if (ad->ly_main != NULL) {
909                 evas_object_del(ad->ly_main);
910                 ad->ly_main = NULL;
911         }
912
913         setting_view_about_main.is_create = 0;
914         return SETTING_RETURN_SUCCESS;
915 }
916
917 static int setting_about_main_update(void *cb)
918 {
919         SETTING_TRACE_BEGIN;
920         /* error check */
921         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
922
923         SettingAboutUG *ad = (SettingAboutUG *) cb;
924
925         if (ad->ly_main != NULL) {
926                 evas_object_show(ad->ly_main);
927         }
928
929         return SETTING_RETURN_SUCCESS;
930 }
931
932 static int setting_about_main_cleanup(void *cb)
933 {
934         SETTING_TRACE_BEGIN;
935         /* error check */
936         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
937
938         SettingAboutUG *ad = (SettingAboutUG *) cb;
939
940         if (ad->ly_main != NULL) {
941                 /*  evas_object_hide(ad->ly_main); */
942         }
943
944         return SETTING_RETURN_SUCCESS;
945 }
946
947 /* ***************************************************
948  *
949  *general func
950  *
951  ***************************************************/
952
953 /* ***************************************************
954  *
955  *call back func
956  *
957  ***************************************************/
958
959 static void
960 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
961                                          void *event_info)
962 {
963         SETTING_TRACE_BEGIN;
964         /* error check */
965         setting_retm_if(data == NULL, "Data parameter is NULL");
966
967         SettingAboutUG *ad = (SettingAboutUG *) data;
968         if (ad->empty_flag) {
969                 if (ad->popup) {
970                         evas_object_del(ad->popup);
971                         ad->popup = NULL;
972                 }
973                 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
974                                      __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
975                 if (ad->item_dev_name) {
976                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
977                 }
978                 return;
979         }
980
981         /* Send destroy request */
982         ug_destroy_me(ad->ug);
983         //imf must be hided before view is destroyed.
984         //Following code is just to improve the hiding speed. If not add these code,
985         //the input pannel will also be hided with the view destroyed,but it works too slow.
986         if (ad->item_dev_name) {
987                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
988                 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
989         }
990
991         SETTING_TRACE_END;
992 }
993
994 /**
995 * @brief
996 *
997 * @param data
998 * @param obj
999 * @param event_info
1000 */
1001 static void
1002 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1003                                             void *event_info)
1004 {
1005         SETTING_TRACE_BEGIN;
1006         /* error check */
1007         setting_retm_if(data == NULL, "Data parameter is NULL");
1008
1009         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1010         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1011         elm_genlist_item_selected_set(item, 0);
1012         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1013
1014         /* SettingAboutUG *ad = (SettingAboutUG *) data; */
1015
1016         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1017         if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
1018
1019                 //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
1020
1021         } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
1022                 __setting_about_main_certificates_clicked(data);
1023         } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1024                 __setting_about_main_device_name_clicked(data, list_item->eo_check);
1025         } else if (!safeStrCmp(DIAGNOSTICS_USAGE_STR, list_item->keyStr)) {
1026                 __setting_about_main_diagnostics_usage_clicked(data, list_item->eo_check);
1027         } else if (!safeStrCmp(SOFTWARE_UPDATE_STR, list_item->keyStr)) {
1028 #ifdef SUPPORT_FOTA
1029                 if(aul_app_is_running("com.samsung.oma-dm-ui"))
1030                 {
1031                         SETTING_TRACE_DEBUG("oma-dm-ui is already launched. ");
1032                         aul_open_app("com.samsung.oma-dm-ui");
1033                 }
1034                 else
1035                 {
1036                         SETTING_TRACE_DEBUG("oma-dm-ui will be launched. ");
1037                         aul_launch_app("com.samsung.oma-dm-ui", NULL);
1038                 }
1039 #endif
1040         }
1041 }
1042
1043 static void __destroy_certificates_ug_cb(ui_gadget_h ug, void *priv)
1044 {
1045         SETTING_TRACE_BEGIN;
1046
1047         /* restore the '<-' button on the navigate bar */
1048         ret_if(!priv);
1049         SettingAboutUG *ad = (SettingAboutUG *) priv;   /* ad is point to priv */
1050
1051         if (ug) {
1052                 ug_destroy(ug);
1053                 ad->ug_loading = NULL;
1054         }
1055
1056 }
1057
1058 static void __setting_about_main_certificates_clicked(void *data)
1059 {
1060         SETTING_TRACE_BEGIN;
1061         retm_if(data == NULL, "Data parameter is NULL");
1062         SettingAboutUG *ad = (SettingAboutUG *)data;
1063
1064         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1065         if (!cbs) {
1066                 return;
1067         }
1068
1069         cbs->layout_cb = setting_about_layout_ug_cb;
1070         cbs->result_cb = NULL;
1071         cbs->destroy_cb = __destroy_certificates_ug_cb;
1072         cbs->priv = (void *)ad;
1073
1074         ad->ug_loading =
1075             ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1076
1077         if (NULL == ad->ug_loading) {   /* error handling */
1078                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1079         }
1080         FREE(cbs);
1081 }
1082
1083 static void __top_back_cb(void *data, Evas_Object *obj,
1084                                          void *event_info)
1085 {
1086         SETTING_TRACE_BEGIN;
1087         /* error check */
1088         setting_retm_if(data == NULL, "Data parameter is NULL");
1089
1090         SettingAboutUG *ad = (SettingAboutUG *) data;
1091
1092         if (ad->item_dev_name)
1093                 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1094
1095         SETTING_TRACE_END;
1096 }
1097
1098 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1099 {
1100         SETTING_TRACE_BEGIN;
1101         retm_if(data == NULL, "Data parameter is NULL");
1102         retm_if(ctx == NULL, "obj parameter is NULL");
1103
1104         SettingAboutUG *ad = (SettingAboutUG *)data;
1105
1106         if(value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
1107         {
1108                 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1109                 if(ad->navi_item && !elm_object_item_part_content_get(ad->navi_item, "title_right_btn"))
1110                 {
1111                         Evas_Object *r_button = setting_create_button(ad->navi_bar,
1112                                                                         dgettext("sys_string", "IDS_COM_BODY_BACK"),
1113                                                                         NAVI_BACK_BUTTON_STYLE,
1114                                                                         __top_back_cb,
1115                                                                         ad);
1116                         elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);
1117                 }
1118         }
1119         else if(value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
1120         {
1121                 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1122                 if(ad->navi_item && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
1123                         Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
1124                         evas_object_del(btn);
1125                 }
1126
1127                 if (ad->item_dev_name) {
1128                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1129                 }
1130         }
1131 }
1132
1133 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj)
1134 {
1135         SETTING_TRACE_BEGIN;
1136         retm_if(data == NULL, "Data parameter is NULL");
1137         retm_if(obj == NULL, "obj parameter is NULL");
1138         SettingAboutUG *ad = (SettingAboutUG *)data;
1139
1140         int mobile_ap_status = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
1141         int err = -1;
1142         int ret = setting_get_int_slp_key(INT_SLP_SETTING_MOBILE_AP_STATUS, &mobile_ap_status, &err);
1143         //setting_retm_if(ret == SETTING_RETURN_FAIL, "Get vconf failed");
1144
1145         if (!elm_object_focus_get(obj)) {
1146                 elm_object_focus_set(obj, EINA_TRUE);
1147         }
1148
1149         if ((mobile_ap_status & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) && !ad->popup_showed_flag) {
1150                 if (ad->popup) {
1151                         evas_object_del(ad->popup);
1152                         ad->popup = NULL;
1153                 }
1154                 ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
1155                                          NULL, _(SETTING_ABOUT_MOBILE_AP_TURNED_OFF),
1156                                          __setting_about_main_mobile_ap_turn_off_ask_resp_cb, 0,
1157                                          1, _("IDS_COM_SK_OK"));
1158         } else {
1159                 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(obj);
1160                 setting_retm_if(imf_context == NULL, "imf_context is NULL");
1161                 ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_cb, ad);
1162                 ecore_imf_context_input_panel_show(imf_context);
1163         }
1164 }
1165
1166
1167 static void __destroy_diagnostics_usage_ug_cb(ui_gadget_h ug, void *priv)
1168 {
1169         SETTING_TRACE_BEGIN;
1170
1171         /* restore the '<-' button on the navigate bar */
1172         ret_if(!priv);
1173         SettingAboutUG *ad = (SettingAboutUG *) priv;   /* ad is point to priv */
1174
1175         if (ug) {
1176                 ug_destroy(ug);
1177                 ad->ug_loading = NULL;
1178         }
1179
1180         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1181         ret_if(!navi_it);
1182         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1183
1184         if (back_btn != NULL) {
1185                 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1186         }
1187 }
1188
1189 static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj)
1190 {
1191         SETTING_TRACE_BEGIN;
1192         retm_if(data == NULL, "Data parameter is NULL");
1193         SettingAboutUG *ad = (SettingAboutUG *)data;
1194
1195         // create UG
1196         if (!ad)
1197                 return;         /*  do nothing if ad is NULL */
1198
1199         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1200         if (!cbs) {
1201                 return;
1202         }
1203
1204         cbs->layout_cb = setting_about_layout_ug_cb;
1205         cbs->result_cb = NULL;
1206         cbs->destroy_cb = __destroy_diagnostics_usage_ug_cb;
1207         cbs->priv = (void *)ad;
1208
1209         ad->ug_loading =
1210             ug_create(ad->ug, "setting-crash-efl", UG_MODE_FULLVIEW, NULL, cbs);
1211
1212         if (NULL == ad->ug_loading) {   /* error handling */
1213                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1214                 setting_create_simple_popup(ad, ad->win_get, NULL, _(UNSUPPORTED_FUNCTION));
1215         }
1216         FREE(cbs);
1217 }
1218
1219 static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
1220                                                     Evas_Object *obj,
1221                                                     void *event_info)
1222 {
1223         SETTING_TRACE_BEGIN;
1224         setting_retm_if(data == NULL, "Data parameter is NULL");
1225         SettingAboutUG *ad = (SettingAboutUG *)data;
1226         int response_type = btn_type(obj);
1227
1228         if (POPUP_RESPONSE_OK == response_type) {
1229                 ad->popup_showed_flag = TRUE;
1230
1231                 if (ad->item_dev_name) {
1232                         Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1233                         setting_retm_if(imf_context == NULL, "imf_context is NULL");
1234                         ecore_imf_context_input_panel_show(imf_context);
1235                 }
1236         }
1237
1238         if (ad->popup)
1239         {
1240                 evas_object_del(ad->popup);
1241                 ad->popup = NULL;
1242         }
1243 }
1244
1245