apply FSL license
[apps/home/settings.git] / setting-phone / src / setting-phone.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   *
4   * Licensed under the Flora License, Version 1.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *     http://www.tizenopensource.org/license
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16
17
18 #include <setting-phone.h>
19
20 #ifndef UG_MODULE_API
21 #define UG_MODULE_API __attribute__ ((visibility("default")))
22 #endif
23
24 setting_view *__get_phone_view_to_load(bundle *data)
25 {
26         SETTING_TRACE_BEGIN;
27         setting_retvm_if(NULL == data, NULL, "NULL == data");
28         const char *viewtype = bundle_get_val(data, "viewtype");
29         SETTING_TRACE("viewtype:%s", viewtype);
30
31         if (!safeStrCmp(viewtype, "language")) {
32                 const char *caller = (const char *)bundle_get_val(data, "caller");
33                 if (caller) {
34                         setting_view_node_table_register(&setting_view_phone_display_language, NULL);
35                         return &setting_view_phone_display_language;
36                 } else {
37                         setting_view_node_table_register(&setting_view_phone_language_region, NULL);
38                         setting_view_node_table_register(&setting_view_phone_display_language,
39                                                          &setting_view_phone_language_region);
40                         setting_view_node_table_register(&setting_view_phone_region_format,
41                                                          &setting_view_phone_language_region);
42
43                         return &setting_view_phone_language_region;
44                 }
45         } else if (!safeStrCmp(viewtype, "license")) {
46                 setting_view_node_table_register(&setting_view_phone_license_main, NULL);
47                 setting_view_node_table_register(&setting_view_phone_license_divx_main,
48                                                  &setting_view_phone_license_main);
49                 setting_view_node_table_register(&setting_view_phone_license_divx_mode,
50                                                  &setting_view_phone_license_divx_main);
51         
52                 return &setting_view_phone_license_main;
53         } else if (!safeStrCmp(viewtype, "notification")) {
54                 setting_view_node_table_register(&setting_view_phone_ticker_notification, NULL);
55         
56                 return &setting_view_phone_ticker_notification;
57         } else {
58                 return NULL;    /* &setting_view_phone_main; */
59         }
60
61 }
62
63 Evas_Object *__get_phone_layout_to_return(bundle *data, void *priv)
64 {
65         SETTING_TRACE_BEGIN;
66         SettingPhoneUG *phoneUG = priv;
67         const char *viewtype = bundle_get_val(data, "viewtype");
68         SETTING_TRACE("viewtype:%s", viewtype);
69
70         if (!safeStrCmp(viewtype, "language")) {
71                 return phoneUG->ly_language;
72         } else if (!safeStrCmp(viewtype, "license")) {
73                 return phoneUG->ly_license;
74         } else if (!safeStrCmp(viewtype, "notification")) {
75                 return phoneUG->ly_ticker;
76         } else {
77                 return NULL;    /* &setting_view_phone_main; */
78         }
79
80 }
81
82 const char *get_language_by_mobile_country_code(int mcc)
83 {
84         const char *simLanguage = NULL;
85
86         setting_lang_entry* table = setting_get_language_table();
87         
88         switch (mcc) {
89         case 262:               /* GERMAN */
90                 simLanguage = table[SETTING_LANG_GERMAN].locale;
91                 break;
92         case 204:               /* DUTCH */
93                 simLanguage = table[SETTING_LANG_DUTCH].locale;
94                 break;
95         case 214:               /* SPAINISH */
96                 simLanguage = table[SETTING_LANG_SPAINISH].locale;
97                 break;
98         case 268:               /* PORTUGUESE */
99                 simLanguage = table[SETTING_LANG_PORTUGUESE].locale;
100                 break;
101         case 202:               /* GREEK */
102                 simLanguage = table[SETTING_LANG_GREEK].locale;
103                 break;
104         case 222:               /* ITALIAN */
105                 simLanguage = table[SETTING_LANG_ITALIAN].locale;
106                 break;
107         case 208:               /* FRENCH */
108                 simLanguage = table[SETTING_LANG_FRENCH].locale;
109                 break;
110         case 286:               /* TURKISH */
111                 simLanguage = table[SETTING_LANG_TURKISH].locale;
112                 break;
113         case 450:               /* KOREAN */
114                 simLanguage = table[SETTING_LANG_KOREA].locale;
115                 break;
116         case 440:               /* JAPAN */
117                 simLanguage = table[SETTING_LANG_JAPAN].locale;
118                 break;
119         case 460:               /* CHINA */
120                 simLanguage = table[SETTING_LANG_CHINA].locale;
121                 break;
122         case 454:               /* CANTONESE */
123                 simLanguage = table[SETTING_LANG_CANTONESE].locale;
124                 break;
125         case 466:               /* TAIWAN */
126                 simLanguage = table[SETTING_LANG_TAIWAN].locale;
127                 break;
128         case 250:               /* RUSSIAN */
129                 simLanguage = table[SETTING_LANG_RUSSIAN].locale;
130                 break;
131         default:                /* get value from db/menu_widget/language at vconf */
132                 simLanguage = table[SETTING_LANG_ENGLISH].locale;
133                 break;
134         }
135         return simLanguage;
136
137 }
138
139 int app_terminate_func(const aul_app_info *info, void *data)
140 {
141         setting_retvm_if(info == NULL, -1, "info parameter is NULL");
142
143         SETTING_TRACE(" ===== ITERFUNC: PID=%d , PATH=%s , PKG_NAME=%s ",
144                       (int)(info->pid), info->app_path, info->pkg_name);
145         
146         /* temp pid check for org.tizen.setting*/
147         if (getpid() == info->pid) {
148                 SETTING_TRACE("Skip Setting(itself) process by PID check");
149                 return 0;
150         }
151         
152         /*  @todo re-implement killing code. */
153         if (!safeStrCmp(info->pkg_name, "org.tizen.menu-screen")
154             || !safeStrCmp(info->pkg_name, "org.tizen.setting")
155             || !safeStrCmp(info->pkg_name, "org.tizen.live-magazine")
156             || !safeStrCmp(info->pkg_name, "org.tizen.live-data-provider")
157             || !safeStrCmp(info->pkg_name, "org.tizen.pwlock")
158             || !safeStrCmp(info->pkg_name, "org.tizen.quickpanel")
159             || !safeStrCmp(info->pkg_name, "org.tizen.vtmain")
160             || !safeStrCmp(info->pkg_name, "org.tizen.call")
161             ) {
162                 return 0;
163         }
164
165         int ret = aul_terminate_pid(info->pid);
166         if (ret == 0) {
167                 SETTING_TRACE("===== aul_termniated_pid successed.");
168                 if (data) {                     
169                         SettingPhoneUG *ad = (SettingPhoneUG *) data;
170                         SETTING_TRACE("Add pid [%d] to eina_list", info->pid);
171                         ad->killed_pid_list =
172                                     eina_list_append(ad->killed_pid_list, 
173                                                         (void *)info->pid);
174                 }
175         }
176         return 0;
177 }
178
179 int app_terminate_dead_cb(int pid, void *data)
180 {
181         SETTING_TRACE_BEGIN;
182         setting_retvm_if(data == NULL, -1, "Data parameter is NULL");
183         SettingPhoneUG *ad = (SettingPhoneUG *)data;
184
185         SETTING_TRACE("pid:%d", pid);
186         if (ad->killed_pid_list) {
187                 SETTING_TRACE_DEBUG("remove process[%d] from killed_pid_list", pid);
188                 ad->killed_pid_list = 
189                                 eina_list_remove(ad->killed_pid_list, (void *)pid);
190         }
191         SETTING_TRACE("eina_list_count(ad->killed_pid_list):%d", eina_list_count(ad->killed_pid_list));
192         if (0 == eina_list_count(ad->killed_pid_list)) {
193                 SETTING_TRACE_DEBUG("All the process nhad been killed");
194                 if (ad->pop_progress) {
195                         evas_object_del(ad->pop_progress);
196                         ad->pop_progress = NULL;
197                 }
198         }
199         return 0;
200 }
201
202 static void setting_phone_update_item(void *data)
203 {
204         setting_retm_if(data == NULL, "data is NULL");
205         SettingPhoneUG *ad = (SettingPhoneUG *) data;
206         
207         if (ad->data_display_language) {
208                 ad->data_display_language->sub_desc = get_pa_display_language_str();
209                 elm_object_item_data_set(ad->data_display_language->item, ad->data_display_language);
210                 elm_genlist_item_update(ad->data_display_language->item);
211         }
212
213         char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
214         if (pa_region == NULL) {
215                 SETTING_TRACE_ERROR
216                     ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
217                 return;
218         }
219         if (ad->data_region_fmt) {
220                 ad->data_region_fmt->sub_desc = setting_phone_lang_get_region_str(pa_region);
221                 elm_object_item_data_set(ad->data_region_fmt->item, ad->data_region_fmt);
222                 elm_genlist_item_update(ad->data_region_fmt->item);
223         }
224
225         if (ad->data_region_fmt_example) {
226                 char *example_desc =
227                     setting_phone_lang_get_example_desc(pa_region, ad);
228                 ad->data_region_fmt_example->keyStr =
229                     (char *)g_strdup(example_desc);
230                 FREE(example_desc);
231                 elm_object_item_data_set(ad->data_region_fmt_example->item, ad->data_region_fmt_example);
232                 elm_genlist_item_update(ad->data_region_fmt_example->item);
233         }       
234 }
235
236 char *setting_phone_lang_get_region_str(const char *region)
237 {
238         SETTING_TRACE_BEGIN;
239         setting_retvm_if(region == NULL, NULL, "region parameter is NULL");
240         const char *localeID = NULL;
241         UChar displayname[SETTING_STR_SLP_LEN] = { 0, };
242         UErrorCode status = U_ZERO_ERROR;
243         char *ret_str = NULL;
244
245         localeID = uloc_getDefault();
246         uloc_getDisplayName(region, localeID, displayname, SETTING_STR_SLP_LEN,
247                             &status);
248
249         char *str_displayname = setting_phone_lang_str_to_utf8(displayname);
250         ret_str = (char *)g_strdup(str_displayname);
251
252         if (str_displayname) {
253                 FREE(str_displayname);
254         }
255         return ret_str;
256 }
257
258 /**
259 * Change language string to UTF8 format, the invoker need to free the return string
260 *
261 * @param unichars The source string will be translated.
262 *
263 * @return UTF8 format string.
264 */
265 char *setting_phone_lang_str_to_utf8(const UChar *unichars)
266 {
267         retv_if(unichars == NULL, NULL);
268         int len = 0;
269         int len_str = 0;
270         int len_utf8 = 0;
271         char *str = NULL;
272         UErrorCode status = U_ZERO_ERROR;
273
274         len = u_strlen(unichars);
275         len_str = sizeof(char) *4 * (len + 1);
276         str = (char *)calloc(1, len_str);
277         if (!str)
278                 return NULL;
279
280         u_strToUTF8(str, len_str, &len_utf8, unichars, len, &status);
281         return str;
282 }
283
284 char *setting_phone_lang_get_by_pattern(const char *locale,
285                                                const char *skeleton, void *data)
286 {
287         setting_retvm_if(!locale, NULL, "locale parameter is NULL");
288         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
289
290         SettingPhoneUG *ad = (SettingPhoneUG *) data;
291
292         char *ret_str = NULL;
293         UChar customSkeleton[SETTING_STR_SLP_LEN] = { 0, };
294         UErrorCode status = U_ZERO_ERROR;
295         UDateFormat *formatter = NULL;
296
297         UChar bestPattern[SETTING_STR_SLP_LEN] = { 0, };
298         UChar formatted[SETTING_STR_SLP_LEN] = { 0, };
299
300         char bestPatternString[SETTING_STR_SLP_LEN] = { 0, };
301         char formattedString[SETTING_STR_SLP_LEN] = { 0, };
302
303         u_uastrncpy(customSkeleton, skeleton, safeStrLen(skeleton));
304
305         if (ad->pattern_generator == NULL
306             || safeStrCmp(locale, ad->prev_locale) != 0) {
307                 if (ad->pattern_generator != NULL) {
308                         udatpg_close(ad->pattern_generator);
309                         ad->pattern_generator = NULL;
310                 }
311                 ad->pattern_generator = udatpg_open(locale, &status);
312         }
313
314         int32_t bestPatternCapacity =
315             (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0]));
316         (void)udatpg_getBestPattern(ad->pattern_generator, customSkeleton,
317                                     u_strlen(customSkeleton), bestPattern,
318                                     bestPatternCapacity, &status);
319
320         u_austrcpy(bestPatternString, bestPattern);
321         SETTING_TRACE("BestPattern is %s", bestPatternString);
322
323         UDate date = ucal_getNow();
324         formatter =
325             udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern,
326                       -1, &status);
327         int32_t formattedCapacity =
328             (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
329         (void)udat_format(formatter, date, formatted, formattedCapacity, NULL,
330                           &status);
331         u_austrcpy(formattedString, formatted);
332         SETTING_TRACE("DATE & TIME is %s", formattedString);
333
334         udat_close(formatter);
335
336         ret_str = g_strdup(formattedString);
337         return ret_str;
338 }
339
340 char *setting_phone_lang_get_example_desc(const char *region, void *data)
341 {
342         setting_retvm_if(region == NULL, NULL, "region parameter is NULL");
343         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
344         char *date = setting_phone_lang_get_by_pattern(region,
345                                                        UDAT_YEAR_MONTH_WEEKDAY_DAY,
346                                                        data);
347
348         enum appcore_time_format timeformat = APPCORE_TIME_FORMAT_12;
349         int ret = appcore_get_timeformat(&timeformat);
350         if (ret == -1) {
351                 SETTING_TRACE_ERROR("call appcore_get_timeformat fail.");
352                 timeformat = APPCORE_TIME_FORMAT_12;
353         }
354
355         char *time_skeleton = "hhmm";
356         if (timeformat == APPCORE_TIME_FORMAT_24) {
357                 time_skeleton = "HHmm";
358         }
359
360         char *time = setting_phone_lang_get_by_pattern(region, time_skeleton, data);
361
362         Eina_Strbuf *temp_str = eina_strbuf_new();
363         char *r_str_text = NULL;
364         eina_strbuf_append_printf(temp_str,
365                                   "<b>%s %s</b>", _("IDS_ST_BODY_REGION"), _("IDS_EMAIL_BODY_EXAMPLE"));
366         eina_strbuf_append_printf(temp_str, "<br>%s : %s", _("IDS_COM_POP_DATE"), date);
367         eina_strbuf_append_printf(temp_str, "<br>%s : %s", _("IDS_COM_BODY_DETAILS_TIME"), time);
368
369         r_str_text = eina_strbuf_string_steal(temp_str);
370         eina_strbuf_free(temp_str);
371         G_FREE(date);
372         G_FREE(time);
373         return r_str_text;      /* will be freed in calling place */
374 }
375
376
377 static void setting_phone_ug_cb_resize(void *data, Evas *e, Evas_Object *obj,
378                                        void *event_info)
379 {
380         SettingPhoneUG *ad = (SettingPhoneUG *) data;
381         setting_view_update(ad->view_to_load, ad);
382 }
383
384 static void *setting_phone_ug_on_create(struct ui_gadget *ug, enum ug_mode mode,
385                                         bundle *data, void *priv)
386 {
387         setting_retvm_if((!ug || !priv), NULL, "!ug || !priv");
388         SETTING_TRACE_BEGIN;
389         SettingPhoneUG *phoneUG = priv;
390         phoneUG->ug = ug;
391
392         phoneUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
393         phoneUG->win_get = (Evas_Object *) ug_get_window();
394         evas_object_show(phoneUG->win_main_layout);
395         phoneUG->evas = evas_object_evas_get(phoneUG->win_main_layout);
396
397         setting_retvm_if(phoneUG->win_main_layout == NULL, NULL,
398                          "cannot get main window ");
399
400         /* --------------------------------------------------------- */
401         char *pa_path = NULL;;
402
403         pa_path = vconf_get_str(VCONFKEY_LANGSET);
404         if (!pa_path) {
405                 SETTING_TRACE
406                     ("%s*** language setting has no proper value (nil) ***%s",
407                      SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
408                 return NULL;
409         }
410         /* set launguage */
411         setlocale(LC_ALL, "");
412         bindtextdomain(SETTING_PACKAGE, SETTING_LOCALEDIR);
413         textdomain(SETTING_PACKAGE);
414         FREE(pa_path);
415         /* ---------------------------------------------------------     */
416         if (TAPI_API_SUCCESS != tel_init()) {
417                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_init. ***%s",
418                                     SETTING_FONT_RED, SETTING_FONT_BLACK);
419         }
420
421         memset(&(phoneUG->imsi), 0, sizeof(TelSimImsiInfo_t));
422         
423         /** @todo once Telephony part supports new method to get language from SIM, this code should be replaced */
424         int ret = tel_get_sim_imsi(&(phoneUG->imsi));
425         if (TAPI_API_SUCCESS == ret) {
426                 SETTING_TRACE("********************************************");
427                 SETTING_TRACE("imsi.bValid: [%d]", phoneUG->imsi.bValid);
428                 SETTING_TRACE("imsi.szMcc: [%s]", phoneUG->imsi.szMcc);
429                 SETTING_TRACE("imsi.szMnc: [%s]", phoneUG->imsi.szMnc);
430                 SETTING_TRACE("imsi.szMsin: [%s]", phoneUG->imsi.szMsin);
431                 SETTING_TRACE("********************************************");
432
433                 phoneUG->sim_lang = get_language_by_mobile_country_code(atoi(phoneUG->imsi.szMcc));     
434         } else {
435                 SETTING_TRACE("TAPI API FAIL: Error Code ret : %d ", ret);
436
437                 /* if CSC has updated configuration for setting, initial vconf value changes. */
438                 phoneUG->sim_lang = vconf_get_str(VCONFKEY_LANGSET); /* allocated */
439         }
440         SETTING_TRACE("sim_lang: [%s]", phoneUG->sim_lang);
441
442         /* register view node table */
443         setting_view_node_table_intialize();
444
445         setting_create_Gendial_itc("dialogue/1text.1icon.2",
446                                    &(phoneUG->itc_1text_1icon_2));
447         setting_create_Gendial_itc("dialogue/1text.1icon",
448                                    &(phoneUG->itc_1text_1icon));
449         setting_create_Gendial_itc("dialogue/1text", &(phoneUG->itc_1text));
450         setting_create_Gendial_itc("dialogue/2text.3/expandable",
451                                    &(phoneUG->itc_2text_3_parent));
452         setting_create_Gendial_itc("dialogue/1text.1icon/expandable2",
453                                    &(phoneUG->itc_1icon_1text_sub));
454
455         phoneUG->itc_seperator.item_style = "dialogue/separator/21/with_line";
456         phoneUG->itc_seperator.func.text_get = NULL;
457         phoneUG->itc_seperator.func.content_get = NULL;
458         phoneUG->itc_seperator.func.state_get = NULL;
459         phoneUG->itc_seperator.func.del = NULL;
460
461         setting_create_Gendial_itc("dialogue/2text.3", &(phoneUG->itc_2text_2));
462         setting_create_Gendial_itc("multiline/1text",
463                                    &(phoneUG->itc_bg_1icon));
464         phoneUG->pattern_generator = NULL;
465         phoneUG->prev_locale = NULL;
466         /*  creating a view. */
467         phoneUG->bundle_data = data;
468         phoneUG->view_to_load = __get_phone_view_to_load(data);
469         setting_retvm_if(NULL == phoneUG->view_to_load, NULL,
470                          "NULL == phoneUG->view_to_load");
471         setting_view_node_set_cur_view(phoneUG->view_to_load);
472         setting_view_create(phoneUG->view_to_load, (void *)phoneUG);
473         evas_object_event_callback_add(phoneUG->win_main_layout,
474                                        EVAS_CALLBACK_RESIZE,
475                                        setting_phone_ug_cb_resize, phoneUG);
476         return __get_phone_layout_to_return(data, phoneUG);
477 }
478
479 static void setting_phone_ug_on_start(struct ui_gadget *ug, bundle *data,
480                                       void *priv)
481 {
482 }
483
484 static void setting_phone_ug_on_pause(struct ui_gadget *ug, bundle *data,
485                                       void *priv)
486 {
487 }
488
489 static void setting_phone_ug_on_resume(struct ui_gadget *ug, bundle *data,
490                                        void *priv)
491 {
492 }
493
494 static void setting_phone_ug_on_destroy(struct ui_gadget *ug, bundle *data,
495                                         void *priv)
496 {
497         SETTING_TRACE_BEGIN;
498         setting_retm_if((!ug || !priv), "!ug || !priv");
499         SettingPhoneUG *phoneUG = priv;
500
501         evas_object_event_callback_del(phoneUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_phone_ug_cb_resize);     /* fix flash issue for gallery */
502         phoneUG->ug = ug;
503
504         if (tel_deinit() != TAPI_API_SUCCESS) {
505                 SETTING_TRACE_ERROR("tel_deinit failed");
506         }
507         /*  called when this shared gadget is terminated. similar with app_exit */
508         if (&setting_view_phone_language_region == phoneUG->view_to_load) {
509                 setting_view_destroy(&setting_view_phone_display_language,
510                                      phoneUG);
511                 setting_view_destroy(&setting_view_phone_region_format,
512                                      phoneUG);
513                 setting_view_destroy(&setting_view_phone_language_region, phoneUG);
514         } else if (&setting_view_phone_ticker_notification ==
515                    phoneUG->view_to_load) {
516                 setting_view_destroy(&setting_view_phone_ticker_notification,
517                                      phoneUG);
518         } else if (&setting_view_phone_license_main == phoneUG->view_to_load) {
519                 setting_view_destroy(&setting_view_phone_license_divx_main,
520                                      phoneUG);
521                 setting_view_destroy(&setting_view_phone_license_divx_mode,
522                                      phoneUG);
523                 setting_view_destroy(&setting_view_phone_license_main, phoneUG);
524         }
525
526         if (NULL != ug_get_layout(phoneUG->ug)) {
527                 evas_object_hide((Evas_Object *) ug_get_layout(phoneUG->ug));
528                 evas_object_del((Evas_Object *) ug_get_layout(phoneUG->ug));
529         }
530
531         SETTING_TRACE_END;
532 }
533
534 static void setting_phone_ug_on_message(struct ui_gadget *ug, bundle *msg,
535                                         bundle *data, void *priv)
536 {
537         SETTING_TRACE_BEGIN;
538         setting_retm_if(NULL == msg, "msg is NULL");
539         setting_retm_if(NULL == priv, "priv is NULL");
540         char *pid_str = (char *)bundle_get_val(msg, "DEADPID");
541         if (pid_str)
542         {
543                 errno = 0;              
544                 int pid = (int)g_ascii_strtod(pid_str, NULL);
545                 SETTING_TRACE_DEBUG("pid = %d",pid);
546                 setting_retm_if(errno == ERANGE, "call g_ascii_strtod fail");
547                 
548                 int ret = app_terminate_dead_cb(pid, priv);
549                 setting_retm_if(ret != 0, "call app_terminate_dead_cb fail");
550         }
551 }
552
553 static void setting_phone_ug_on_event(struct ui_gadget *ug, enum ug_event event,
554                                       bundle *data, void *priv)
555 {
556         SETTING_TRACE_BEGIN;
557
558         SettingPhoneUG *ad = (SettingPhoneUG *) priv;
559         switch (event) {
560         case UG_EVENT_LOW_MEMORY:
561                 break;
562         case UG_EVENT_LOW_BATTERY:
563                 break;
564         case UG_EVENT_REGION_CHANGE:
565         case UG_EVENT_LANG_CHANGE:
566                 if (ad->gl_lang_region && setting_view_phone_language_region.is_create) {
567                         elm_genlist_realized_items_update(ad->gl_lang_region);
568                         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
569                         ret_if(!navi_it);
570                         elm_object_item_text_set(navi_it, _(KeyStr_LanguageRegion));
571                         setting_phone_update_item(ad);
572                 }
573                 break;
574
575         case UG_EVENT_ROTATE_PORTRAIT:
576                 break;
577         case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
578                 break;
579         case UG_EVENT_ROTATE_LANDSCAPE:
580                 break;
581         case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
582                 break;
583         default:
584                 break;
585         }
586 }
587
588 static void setting_phone_ug_on_key_event(struct ui_gadget *ug,
589                                           enum ug_key_event event,
590                                           bundle *data, void *priv)
591 {
592         SETTING_TRACE_BEGIN;
593         SettingPhoneUG *ad = (SettingPhoneUG *) priv;
594         if (!ug)
595                 return;
596         SETTING_TRACE("event:%d", event);
597         switch (event) {
598         case UG_KEY_EVENT_END:
599                 {
600                         if (elm_naviframe_top_item_get(ad->navi_bar) ==
601                            elm_naviframe_bottom_item_get(ad->navi_bar)) {
602                                 ug_destroy_me(ug);
603                         } else {
604                                 setting_view_cb_at_endKey(ad);
605                         }
606                 }
607                 break;
608         default:
609                 break;
610         }
611 }
612
613 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
614 {
615         SETTING_TRACE_BEGIN;
616         SettingPhoneUG *phoneUG = calloc(1, sizeof(SettingPhoneUG));
617         setting_retvm_if(!phoneUG, -1, "Create SettingPhoneUG obj failed");
618
619         ops->create = setting_phone_ug_on_create;
620         ops->start = setting_phone_ug_on_start;
621         ops->pause = setting_phone_ug_on_pause;
622         ops->resume = setting_phone_ug_on_resume;
623         ops->destroy = setting_phone_ug_on_destroy;
624         ops->message = setting_phone_ug_on_message;
625         ops->event = setting_phone_ug_on_event;
626         ops->key_event = setting_phone_ug_on_key_event;
627         ops->priv = phoneUG;
628         ops->opt = UG_OPT_INDICATOR_ENABLE;
629
630         return 0;
631 }
632
633 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
634 {
635         SETTING_TRACE_BEGIN;
636         struct SettingPhoneUG *phoneUG;
637         setting_retm_if(!ops, "ops == NULL");
638
639         phoneUG = ops->priv;
640         if (phoneUG)
641                 FREE(phoneUG);
642 }
643
644 /*****/
645 UG_MODULE_API int setting_plugin_reset(bundle *data, void *priv)
646 {
647         SETTING_TRACE_BEGIN;
648
649         int ret = 0;
650         const char *ug_type = bundle_get_val(data, "viewtype"); /*  usb */
651         // ug_type :"notification" "license" "language"..       
652 #if SUPPORT_RUN_SYSTEM_COMMAND
653         ret += excuteCmd(SETTING_POSTINST_FILE, 1, ug_type);    
654 #else
655         if (0 == safeStrCmp(ug_type, "notification")) {
656                 ret += vconf_set_bool
657                     (VCONFKEY_SETAPPL_STATE_TICKER_NOTI_DISPLAY_CONTENT_BOOL, FALSE);
658                 ret +=
659                     vconf_set_bool
660                     (VCONFKEY_SETAPPL_STATE_TICKER_NOTI_MESSAGES_BOOL, TRUE);
661                 ret +=
662                     vconf_set_bool
663                     (VCONFKEY_SETAPPL_STATE_TICKER_NOTI_VMAIL_BOOL, TRUE);
664                 ret +=
665                     vconf_set_bool
666                     (VCONFKEY_SETAPPL_STATE_TICKER_NOTI_EMAIL_BOOL, TRUE);
667                 ret +=
668                     vconf_set_bool(VCONFKEY_SETAPPL_STATE_TICKER_NOTI_SNS_BOOL, FALSE);
669                 ret +=
670                     vconf_set_bool
671                     (VCONFKEY_SETAPPL_STATE_TICKER_NOTI_FILE_TRAN_BOOL, TRUE);
672
673
674         } else if (0 == safeStrCmp(ug_type, "license")) {
675                 ret +=
676                     vconf_set_bool
677                     (VCONFKEY_SETAPPL_STATE_TRANSACTION_TRACKING_BOOL, FALSE);
678                 ret +=
679                     vconf_set_bool(VCONFKEY_SETAPPL_STATE_EXPIRY_REMINDER_BOOL, FALSE);
680                 ret +=
681                     vconf_set_int(VCONFKEY_SETAPPL_ROAMING_NETWORK_INT,
682                                   SETTING_ROAM_NET_AUTO_DOWNLOAD);
683         } else if (0 == safeStrCmp(ug_type, "language")) {
684                 // INT_SLP_SETTING_LANG
685                 ret += vconf_set_int(VCONFKEY_SETAPPL_LANG_INT, SETTING_LANG_ENGLISH);
686                 ret += vconf_set_str(VCONFKEY_LANGSET, "en_US.UTF-8");
687                 ret += vconf_set_str(VCONFKEY_REGIONFORMAT,"en_US.UTF-8");
688         }
689
690 #endif
691         if (0 == safeStrCmp(ug_type, "language"))
692         {
693                 SETTING_TRACE("Begin to reset language & region...");
694                 //a. notify system language changed
695                 char lang_changed_sys_noti_name[SYS_NOTI_NAME_LEN];
696                 int res = -1;
697                 res = heynoti_get_snoti_name("LANG_CHANGED",
698                                            lang_changed_sys_noti_name,
699                                            sizeof(lang_changed_sys_noti_name));
700                 if (res == 0) {
701                         heynoti_publish(lang_changed_sys_noti_name);
702                 }
703                 ret += res;
704
705                 //b .reset default localeid
706                 int err = -1;
707                 uloc_setDefault("en_US", &err);
708
709                 //c. reset date&time format
710                 vconf_set_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, SETTING_DATE_FORMAT_DD_MM_YYYY);
711
712                 //d. terminate other apps
713                 ret += aul_app_get_running_app_info(app_terminate_func, NULL);
714         }
715         /*  DO NOTHING */
716         return ret;
717
718 }
719
720 /*****/