tizen 2.3 release
[apps/home/settings.git] / setting-phone / src / setting-phone-language-region.c
index d07f50b..6969969 100755 (executable)
@@ -1,20 +1,27 @@
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.1 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://floralicense.org/license/
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
+ * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 #include <setting-phone-language-region.h>
+#include <setting-common-draw-widget.h>
+#include <app_manager.h>
+
 
 static int setting_phone_language_region_create(void *cb);
 static int setting_phone_language_region_destroy(void *cb);
@@ -28,20 +35,284 @@ setting_view setting_view_phone_language_region = {
        .cleanup = setting_phone_language_region_cleanup,
 };
 
-static void setting_phone_lang_click_softkey_cancel_cb(void *data,
-                                                      Evas_Object *obj,
-                                                      void *event_info);
+
+
+
+/**
+ * @brief Callback of language change flush timer
+ *
+ * @param cb The view data passed between all callbacks
+ * @return #1 means call it again, else means call it only once
+ */
+static Eina_Bool setting_phone_language_region_flush_timer_cb(void * cb)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       SettingPhoneUG *ad = (SettingPhoneUG *) cb;
+
+       elm_config_all_flush();
+       ad->lang_flush_timer = NULL;
+
+       SETTING_TRACE_END;
+       return EINA_FALSE;
+}
+
+
+static Eina_Bool setting_phone_language_region_freeze_event_timer_cb(void * cb)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       SettingPhoneUG *ad = (SettingPhoneUG *) cb;
+
+       evas_object_freeze_events_set(ad->navi_bar, EINA_FALSE);
+
+       ad->event_freeze_timer = NULL;
+       SETTING_TRACE_END;
+       return EINA_FALSE;
+}
+/**
+ * @brief create keyboard ug by app control
+ *
+ * @param ad The view data passed
+ */
+static void setting_phone_lang_create_keyboard_ug(SettingPhoneUG *ad)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(ad == NULL);
+
+       if(app_launcher("isfsetting-efl") == 0)
+       {
+               ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
+               evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
+       }
+}
+
+/**
+ * @brief create voice recognition ug by app control
+ *
+ */
+static void setting_phone_lang_create_voice_recognition_ug(SettingPhoneUG *ad)
+{
+       SETTING_TRACE_BEGIN;
+       if(app_launcher("setting-voice-efl|show_what:stt") == 0)
+       {
+               ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
+               evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
+       }
+}
+
+/**
+ * @brief create text-to-speech ug by app control
+ *
+ */
+static void setting_phone_lang_create_text_speech_ug(SettingPhoneUG *ad)
+{
+       SETTING_TRACE_BEGIN;
+       if(app_launcher("setting-voice-efl|show_what:tts") == 0)
+       {
+               ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
+               evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
+       }
+}
+
+/**
+ * @brief create readout(old name : drivingmode) ug by app control
+ *
+ * @param ad The view data passed
+ */
+static void setting_phone_lang_create_readout_ug(SettingPhoneUG *ad)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(ad == NULL);
+
+       if(app_launcher("setting-drivingmode-efl") == 0)
+       {
+               ad->event_freeze_timer = ecore_timer_add(1, setting_phone_language_region_freeze_event_timer_cb, ad);
+               evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
+       }
+}
+
+/**
+ * @brief Callback of cancel button
+ *
+ * @param cb The view data passed between all callbacks
+ */
+static Eina_Bool setting_phone_lang_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
+       SettingPhoneUG *ad = (SettingPhoneUG *) data;
+
+       Eina_Bool is_freezed = evas_object_freeze_events_get(ad->navi_bar);
+       SETTING_TRACE_DEBUG("is_freezed : %d", is_freezed);
+       if(is_freezed)
+               return EINA_FALSE;
+
+       ug_destroy_me(ad->ug);
+       return EINA_FALSE;
+}
+
+/**
+ * @brief Callback of view cleanup
+ *
+ * @param cb The view data passed between all callbacks
+ * @return #1 on success, else on failed
+ */
 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
-                                                       Evas_Object *obj,
-                                                       void *event_info);
+                                               Evas_Object *obj,
+                                           void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(!data || !event_info, "data||event_info is NULL");
+       SettingPhoneUG *ad = (SettingPhoneUG *) data;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
 
+       elm_genlist_item_selected_set(item, 0);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
+       SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
+
+       if(!safeStrCmp("IDS_ST_HEADER_DISPLAY_LANGUAGE", list_item->keyStr))
+       {
+               setting_view_change(&setting_view_phone_language_region,
+                                       &setting_view_phone_display_language, ad);
+       }
+       else if(!safeStrCmp(_(REGION_FORMAT_LOWER), list_item->keyStr))
+       {
+               setting_view_change(&setting_view_phone_language_region,
+                                       &setting_view_phone_region_format, ad);
+       }
+       else if(!safeStrCmp("IDS_ST_BODY_KEYBOARD", list_item->keyStr))
+       {
+               setting_phone_lang_create_keyboard_ug(ad);
+       }
+       else if(!safeStrCmp("IDS_VC_HEADER_VOICE_RECOGNITION", list_item->keyStr))
+       {
+               setting_phone_lang_create_voice_recognition_ug(ad);
+       }
+       else if(!safeStrCmp("IDS_ST_HEADER_TEXT_TO_SPEECH", list_item->keyStr))
+       {
+               setting_phone_lang_create_text_speech_ug(ad);
+       }
+       else if(!safeStrCmp("IDS_VC_MBODY_NOTIFICATION_READ_OUT", list_item->keyStr))
+       {
+               setting_phone_lang_create_readout_ug(ad);
+       }
+}
+#if 0
+/**
+ * @brief Callback of readout vconf key
+ *
+ */
+ #if SUPPORT_DRIVINGMODE
+static void setting_phone_lang_vconf_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == data, "data is NULL");
+       SettingPhoneUG *ad = (SettingPhoneUG *)data;
+       char *vconf_name = vconf_keynode_get_name(key);
+       if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_DRIVINGMODE)
+               || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_INCOMINGCALL)
+               || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_MESSAGE)
+               || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_NEWEMAILS)
+               || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_SCHEDULE)
+               || !safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DRIVINGMODE_ALARM))         {
+
+               //speech sub update
+               if (ad->data_readout) {
+                       G_FREE(ad->data_readout->sub_desc);
+                       ad->data_readout->sub_desc = get_pa_noti_readout_str();
+                       elm_object_item_data_set(ad->data_readout->item, ad->data_readout);
+                       elm_genlist_item_update(ad->data_readout->item);
+               }
+       }else {
+               SETTING_TRACE_ERROR("vconf_name is error");
+       }
+}
+#endif
+
+static void setting_phone_lang_regist_readout_key(void *data)
+{
+       setting_retm_if(NULL == data, "data is NULL");
+#if SUPPORT_DRIVINGMODE
+       SettingPhoneUG *ad = (SettingPhoneUG *)data;
+       int ret = 0;
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_DRIVINGMODE,setting_phone_lang_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_INCOMINGCALL,setting_phone_lang_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_MESSAGE,setting_phone_lang_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_NEWEMAILS,setting_phone_lang_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_SCHEDULE,setting_phone_lang_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_ALARM,setting_phone_lang_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+#endif
+}
+
+static void setting_phone_lang_unregist_readout_key()
+{
+#if SUPPORT_DRIVINGMODE
+       int ret = 0;
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_DRIVINGMODE,
+                       setting_phone_lang_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_INCOMINGCALL,
+                       setting_phone_lang_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_MESSAGE,
+                       setting_phone_lang_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_NEWEMAILS,
+                       setting_phone_lang_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_SCHEDULE,
+                       setting_phone_lang_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DRIVINGMODE_ALARM,
+                       setting_phone_lang_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+#endif
+}
+#endif
 
 /* ***************************************************
  *
- *basic func
+ * main view func
  *
  ***************************************************/
-
+/**
+ * @brief Callback of view creating
+ *
+ * @param cb The view data passed between all callbacks
+ * @return #1 on success, else on failed
+ */
 static int setting_phone_language_region_create(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -51,21 +322,29 @@ static int setting_phone_language_region_create(void *cb)
        SettingPhoneUG *ad = (SettingPhoneUG *) cb;
        Evas_Object *scroller = NULL;
 
-       char *title = _(KeyStr_LanguageRegion);
+       int region_automatic;
+
+       ad->lang_change = EINA_FALSE;
+
+       char *title = "IDS_ST_HEADER_LANGUAGE_AND_INPUT";
        ad->ly_language =
            setting_create_layout_navi_bar_genlist(ad->win_main_layout,
                                                   ad->win_get, title,
                                                   _("IDS_COM_BODY_BACK"),
                                                   NULL,
-                                                  setting_phone_lang_click_softkey_cancel_cb,
+                                                  NULL,
                                                   NULL, ad, &scroller,
                                                   &(ad->navi_bar));
+       Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
+       elm_naviframe_item_pop_cb_set(navi_it, setting_phone_lang_click_softkey_cancel_cb, ad);
        retv_if(ad->ly_language == NULL, SETTING_RETURN_FAIL);
        ad->gl_lang_region = scroller;
-
+       ad->lang_region_navi_it = navi_it;
+       SETTING_TRACE("navi_it:%p", navi_it);
+       evas_object_smart_callback_add(ad->gl_lang_region, "realized", __gl_realized_cb, NULL);
        Elm_Object_Item *item = NULL;
        item =
-           elm_genlist_item_append(scroller, &(ad->itc_seperator),
+           elm_genlist_item_append(scroller, &itc_seperator,
                                    NULL, NULL, ELM_GENLIST_ITEM_NONE,
                                    NULL, NULL);
        elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
@@ -78,10 +357,11 @@ static int setting_phone_language_region_create(void *cb)
                                             ad, SWALLOW_Type_INVALID,
                                             NULL, NULL, 0,
                                             "IDS_ST_HEADER_DISPLAY_LANGUAGE",
-                                            pa_display_lang,
+                                            _(pa_display_lang),
                                             NULL);
        if (ad->data_display_language) {
                ad->data_display_language->userdata = ad;
+               ad->data_display_language->group_style = SETTING_GROUP_STYLE_TOP;
        } else {
                SETTING_TRACE_ERROR("ad->data_display_language is NULL");
        }
@@ -93,30 +373,101 @@ static int setting_phone_language_region_create(void *cb)
                    ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
        }
        ad->prev_locale = (char *)g_strdup(pa_region);
+       //check if the region is set to auto
+       char *region_format_str = NULL;
+       vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, &region_automatic);
+       if(region_automatic == 1)
+       {
+               region_format_str = (char*)g_strdup(_("IDS_COM_BODY_AUTOMATIC"));
+       } else {
+               region_format_str = setting_phone_lang_get_region_str(pa_region);
+       }
        ad->data_region_fmt =
            setting_create_Gendial_field_def(scroller,
                                             &(ad->itc_2text_2),
                                             setting_phone_lang_item_Gendial_mouse_up_cb,
                                             ad, SWALLOW_Type_INVALID,
                                             NULL, NULL, 0,
-                                            "IDS_ST_BODY_REGION",
-                                            setting_phone_lang_get_region_str
-                                            (pa_region), NULL);
+                                            _(REGION_FORMAT_LOWER),
+                                            region_format_str, NULL);
        if (ad->data_region_fmt) {
                ad->data_region_fmt->userdata = ad;
+               ad->data_region_fmt->group_style = SETTING_GROUP_STYLE_BOTTOM;
        } else {
                SETTING_TRACE_ERROR("ad->data_region_fmt is NULL");
        }
 
-       char *example_desc =
-           setting_phone_lang_get_example_desc(pa_region, ad);
-       ad->data_region_fmt_example =
+       char *example_desc = setting_phone_lang_get_example_desc(pa_region, ad);
+       item = elm_genlist_item_append(scroller, &(itc_sep_line), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       ad->data_region_fmt_example = setting_create_Gendial_field_def(scroller, &itc_multiline_text,
+                                        NULL,
+                                        NULL,
+                                        SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+                                        NULL, NULL, 0, example_desc, NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->data_region_fmt_example->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       /* keyboard */
+       ad->data_title_keyboard = setting_create_Gendial_field_titleItem(scroller, &itc_group_item, _("IDS_ST_BODY_KEYBOARD"), NULL);
+       ad->data_keyboard =
+           setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+                                            setting_phone_lang_item_Gendial_mouse_up_cb,
+                                            ad, SWALLOW_Type_INVALID, NULL,
+                                            NULL, 0, "IDS_ST_BODY_KEYBOARD",
+                                            NULL, NULL);
+#if 0
+       /* speech */
+       ADD_GL_SEPARATOR(scroller);
+       ad->data_title_speech = setting_create_Gendial_field_titleItem(scroller, &itc_group_item, _("IDS_ST_BODY_SPEECH"), NULL);
+
+       //voice recognition
+       ad->data_voice_recog =
+           setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+                                            setting_phone_lang_item_Gendial_mouse_up_cb,
+                                            ad, SWALLOW_Type_INVALID, NULL,
+                                            NULL, 0, "IDS_VC_HEADER_VOICE_RECOGNITION",
+                                            NULL, NULL);
+       if (ad->data_voice_recog) {
+               ad->data_voice_recog->userdata = ad;
+               ad->data_voice_recog->group_style = SETTING_GROUP_STYLE_TOP;
+       } else {
+               SETTING_TRACE_ERROR("ad->data_voice_recog is NULL");
+       }
+
+       //text-to-speech
+       ad->data_text_speech =
+           setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+                                            setting_phone_lang_item_Gendial_mouse_up_cb,
+                                            ad, SWALLOW_Type_INVALID, NULL,
+                                            NULL, 0, "IDS_ST_HEADER_TEXT_TO_SPEECH",
+                                            NULL, NULL);
+       if (ad->data_text_speech) {
+               ad->data_text_speech->userdata = ad;
+               ad->data_text_speech->group_style = SETTING_GROUP_STYLE_CENTER;
+       } else {
+               SETTING_TRACE_ERROR("ad->data_text_speech is NULL");
+       }
+
+       //notification readout
+       char* pa_noti_readout = get_pa_noti_readout_str();
+       ad->data_readout =
            setting_create_Gendial_field_def(scroller,
-                                            &(ad->itc_bg_1icon), NULL,
-                                            ad,
-                                            SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+                                            &(ad->itc_2text_2),
+                                            setting_phone_lang_item_Gendial_mouse_up_cb,
+                                            ad, SWALLOW_Type_INVALID,
                                             NULL, NULL, 0,
-                                            example_desc, NULL, NULL);
+                                            "IDS_VC_MBODY_NOTIFICATION_READ_OUT",
+                                            pa_noti_readout,
+                                            NULL);
+       if (ad->data_readout) {
+               ad->data_readout->userdata = ad;
+               ad->data_readout->group_style = SETTING_GROUP_STYLE_BOTTOM;
+       } else {
+               SETTING_TRACE_ERROR("ad->data_readout is NULL");
+       }
+       G_FREE(pa_noti_readout);
+       setting_phone_lang_regist_readout_key(ad);
+#endif
        if (pa_region) {
                FREE(pa_region);
        }
@@ -124,10 +475,19 @@ static int setting_phone_language_region_create(void *cb)
                FREE(example_desc);
        }
 
-        setting_view_phone_language_region.is_create = 1;
+
+       setting_view_phone_language_region.is_create = 1;
        return SETTING_RETURN_SUCCESS;
 }
 
+
+
+/**
+ * @brief Callback of view destroy
+ *
+ * @param cb The view data passed between all callbacks
+ * @return #1 on success, else on failed
+ */
 static int setting_phone_language_region_destroy(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -136,10 +496,24 @@ static int setting_phone_language_region_destroy(void *cb)
 
        SettingPhoneUG *ad = (SettingPhoneUG *) cb;
 
+       evas_object_smart_callback_del(ad->gl_lang_region, "realized", __gl_realized_cb);
+
+       //setting_phone_lang_unregist_readout_key();
+
        if (ad->ly_language != NULL) {
                evas_object_del(ad->ly_language);
                ad->ly_language = NULL;
 
+               if (ad->lang_flush_timer) {
+                       ecore_timer_del(ad->lang_flush_timer);
+                       ad->lang_flush_timer = NULL;
+               }
+
+               if (ad->event_freeze_timer) {
+                       ecore_timer_del(ad->event_freeze_timer);
+                       ad->event_freeze_timer = NULL;
+               }
+
                if (ad->pattern_generator) {
                        udatpg_close(ad->pattern_generator);
                        ad->pattern_generator = NULL;
@@ -150,6 +524,14 @@ static int setting_phone_language_region_destroy(void *cb)
        return SETTING_RETURN_SUCCESS;
 }
 
+
+
+/**
+ * @brief Callback of view update
+ *
+ * @param cb The view data passed between all callbacks
+ * @return #1 on success, else on failed
+ */
 static int setting_phone_language_region_update(void *cb)
 {
        SETTING_TRACE_BEGIN;
@@ -160,103 +542,88 @@ static int setting_phone_language_region_update(void *cb)
 
        if (ad->ly_language != NULL) {
                evas_object_show(ad->ly_language);
+               //refresh the title
+               elm_object_item_text_set(ad->lang_region_navi_it, _("IDS_ST_HEADER_LANGUAGE_AND_INPUT")); //"IDS_ST_BODY_LANGUAGE_AND_KEYBOARD"));
+
+               if (ad->data_display_language) {
+                       G_FREE(ad->data_display_language->sub_desc);
+                       ad->data_display_language->sub_desc = get_pa_display_language_str();
+                       elm_object_item_data_set(ad->data_display_language->item, ad->data_display_language);
+                       elm_genlist_item_update(ad->data_display_language->item);
+               }
+               //refresh region ex
+               char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
+               if (pa_region == NULL) {
+                       SETTING_TRACE_ERROR
+                           ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
+                       return SETTING_RETURN_FAIL;
+               }
+
+               if (ad->data_region_fmt) {
+                       int region_automatic = 1;
+                       int ret = vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, &region_automatic);
+                       if (ret == VCONF_ERROR) {
+                               SETTING_TRACE_ERROR("get vconf region automatic err.");
+                       }
+
+                       if(region_automatic == 1)
+                       {
+                               ad->data_region_fmt->sub_desc = (char*)g_strdup(_("IDS_COM_BODY_AUTOMATIC"));
+                       } else {
+                               ad->data_region_fmt->sub_desc = setting_phone_lang_get_region_str(pa_region);
+                       }
+                       G_FREE(ad->data_region_fmt->keyStr);
+                       ad->data_region_fmt->keyStr = (char *)g_strdup(_(REGION_FORMAT_LOWER));
+                       elm_object_item_data_set(ad->data_region_fmt->item, ad->data_region_fmt);
+                       elm_genlist_item_update(ad->data_region_fmt->item);
+               }
+               if (ad->data_region_fmt_example) {
+                       char *example_desc = setting_phone_lang_get_example_desc(pa_region, ad);
+                       G_FREE(ad->data_region_fmt_example->keyStr);
+                       ad->data_region_fmt_example->keyStr = (char *)g_strdup(example_desc);
+                       FREE(example_desc);
+                       elm_object_item_data_set(ad->data_region_fmt_example->item, ad->data_region_fmt_example);
+                       elm_genlist_item_update(ad->data_region_fmt_example->item);
+               }
+               if (ad->data_title_keyboard) {
+                       G_FREE(ad->data_title_keyboard->keyStr);
+                       ad->data_title_keyboard->keyStr = (char *)g_strdup(_("IDS_ST_BODY_KEYBOARD"));
+                       elm_object_item_data_set(ad->data_title_keyboard->item, ad->data_title_keyboard);
+                       elm_genlist_item_update(ad->data_title_keyboard->item);
+               }
+               if (ad->data_title_speech) {
+                       G_FREE(ad->data_title_speech->keyStr);
+                       ad->data_title_speech->keyStr = (char *)g_strdup(_("IDS_ST_BODY_SPEECH"));
+                       elm_object_item_data_set(ad->data_title_speech->item, ad->data_title_speech);
+                       elm_genlist_item_update(ad->data_title_speech->item);
+               }
+               if (ad->data_readout) {
+                       G_FREE(ad->data_readout->sub_desc);
+                       ad->data_readout->sub_desc = get_pa_noti_readout_str();
+                       elm_object_item_data_set(ad->data_readout->item, ad->data_readout);
+                       elm_genlist_item_update(ad->data_readout->item);
+               }
 
-               /* setting_update_chk_status(ad->chk_lang, INT_SLP_SETTING_LANG); */
+               FREE(pa_region);
        }
 
+       if (ad->lang_change) {
+               ad->lang_flush_timer = ecore_timer_add(0.3, setting_phone_language_region_flush_timer_cb, ad);
+               ad->lang_change = EINA_FALSE;
+       }
        return SETTING_RETURN_SUCCESS;
 }
 
-static int setting_phone_language_region_cleanup(void *cb)
-{
-       SETTING_TRACE_BEGIN;
-       return SETTING_RETURN_SUCCESS;
-}
 
-/* ***************************************************
- *
- *general func
- *
- ***************************************************/
 
-/* ***************************************************
- *
- *call back func
+/**
+ * @brief Callback of view cleanup
  *
- ***************************************************/
-
-static void
-setting_phone_lang_click_softkey_cancel_cb(void *data, Evas_Object *obj,
-                                          void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       /* error check */
-       retm_if(data == NULL, "Data parameter is NULL");
-
-       SettingPhoneUG *ad = (SettingPhoneUG *) data;
-
-       ug_destroy_me(ad->ug);
-}
-
-// 0 : automatic
-void setting_phone_lang_change_lang_value(int ichk)
-{
-       SETTING_TRACE_BEGIN;
-       int err, ret;
-
-       /** @todo  ASSERT ( SCOPE CHECK )  */
-
-       Eina_List* list = setting_get_language_list();
-       Eina_List* elist = NULL;
-       setting_lang_entry* pnode;
-
-       char locale[128] = {0,};
-
-    EINA_LIST_FOREACH( list, elist, pnode)
-    {
-               if (pnode->number == ichk) {
-                       snprintf(locale, 128, "%s", pnode->locale);
-               }
-    }
-
-       SETTING_TRACE("table . locale >>>>>> :: %s ", locale);          //en_US.UTF8
-
-       //if (ichk > 0) {
-               // CHECK 'AUTO' HERE
-       ret = setting_set_int_slp_key(INT_SLP_SETTING_LANG, ichk, &err);
-
-       if (ichk > 0)
-               ret = vconf_set_str(VCONFKEY_LANGSET, locale);
-}
-
-static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
-                                               Evas_Object *obj,
-                                               void *event_info)
+ * @param cb The view data passed between all callbacks
+ * @return #1 on success, else on failed
+ */
+static int setting_phone_language_region_cleanup(void *cb)
 {
        SETTING_TRACE_BEGIN;
-       /* error check */
-       setting_retm_if(data == NULL, "Data parameter is NULL");
-       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
-       elm_genlist_item_selected_set(item, 0);
-       Setting_GenGroupItem_Data *list_item =
-           (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
-       SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
-
-       SettingPhoneUG *ad = (SettingPhoneUG *) data;
-
-       int ret = SETTING_RETURN_SUCCESS;
-       if(!safeStrCmp("IDS_ST_HEADER_DISPLAY_LANGUAGE", list_item->keyStr)) 
-       {
-               ret =
-                   setting_view_change(&setting_view_phone_language_region,
-                                       &setting_view_phone_display_language,
-                                       ad);
-       }
-       else if(!safeStrCmp("IDS_ST_BODY_REGION", list_item->keyStr)) 
-       {
-               ret =
-                   setting_view_change(&setting_view_phone_language_region,
-                                       &setting_view_phone_region_format, ad);
-       }
+       return SETTING_RETURN_SUCCESS;
 }
-