/*
* setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
*
- * Licensed under the Flora License, Version 1.0 (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-display-language.h>
+#include <setting-common-draw-widget.h>
+
static int setting_phone_display_language_create(void *cb);
static int setting_phone_display_language_destroy(void *cb);
.cleanup = setting_phone_display_language_cleanup,
};
-/*
- * exit and save
+
+
+
+/**
+ * @brief Callback of cancel button by caller
+ *
+ * @param data The view data passed between all callbacks
*/
static void setting_phone_display_language_caller_exist_right_cb(void *data,
- Evas_Object *obj,
- void *event_info)
+ Evas_Object *obj,
+ void *event_info)
{
SETTING_TRACE_BEGIN;
setting_retm_if(data == NULL, "Data parameter is NULL");
SettingPhoneUG *ad = (SettingPhoneUG *) data;
-#if 0
- int ret, err;
+ /* Create Bundle and send message */
+ app_control_h svc;
+ if (app_control_create(&svc)) {
+ return;
+ }
+
+ app_control_add_extra_data(svc, "result", "rbutton_click");
+ ug_send_result(ad->ug, svc);
+
+ app_control_destroy(svc);
+
+ ug_destroy_me(ad->ug);
+}
+
+
+
+/**
+ * @brief Callback of cancel button
+ *
+ * @param data The view data passed between all callbacks
+ * @param it Naviframe item
+ */
+static Eina_Bool setting_phone_display_language_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;
+ setting_view_change(&setting_view_phone_display_language, &setting_view_phone_language_region, ad);
+
+ return EINA_TRUE;
+}
- int cur_chk_lang = (int)elm_radio_value_get(ad->chk_lang);
- setting_phone_lang_change_lang_value(cur_chk_lang);
- //ret = setting_get_int_slp_key(INT_SLP_SETTING_LANG, &chr_chk_lang, &err);
- SETTING_TRACE("---> cur_chk_lang : %d", cur_chk_lang);
- ret = setting_set_int_slp_key(INT_SLP_SETTING_LANG, cur_chk_lang, &err);
+/**
+ * @brief Callback of pop_progress_lang timeout
+ *
+ * @param data The view data passed between all callbacks
+ */
+void setting_phone_display_language_done_popup_resp_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(data == NULL, "Data parameter is NULL");
+ SettingPhoneUG *ad = (SettingPhoneUG *) data;
- if (0 == cur_chk_lang) {
- (void)vconf_set_str(VCONFKEY_LANGSET, ad->sim_lang);
+ if (ad->pop_progress_lang) {
+ evas_object_del(ad->pop_progress_lang);
+ ad->pop_progress_lang = NULL;
}
- /* Just filter out Setting App, other Apps stil need to be terminated
- until they implement updating language or region automatically */
+ elm_naviframe_item_pop(ad->navi_bar);
+ setting_view_phone_display_language.is_create = 0;
+}
+
+
+/**
+ * @brief function of item click
+ *
+ * @param data The view data passed between all callbacks
+ */
+static void setting_phone_display_language_close_popup_ex(void *data)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ SettingPhoneUG *ad = (SettingPhoneUG *) data;
+
+ if (ad->selected_locale == NULL) {
+ return;
+ }
+
+ if (safeStrCmp(ad->selected_locale, "IDS_COM_BODY_AUTOMATIC") == 0) {
+
+ /* [control] set automatic - TRUE */
+ vconf_set_bool(VCONFKEY_SETAPPL_LANG_AUTOMATIC_BOOL, TRUE);
+
+ /* [control] set vconf language */
+ if (ad->sim_lang != NULL) {
+ vconf_set_str(VCONFKEY_LANGSET, ad->sim_lang);
+ elm_language_set(ad->sim_lang);
+ SETTING_TRACE_DEBUG("select Automatic : sim_lang is %s", ad->sim_lang);
+ }
+ } else {
+ /* create loop operation here */
+ Eina_List *elist = NULL;
+ /*Eina_List* tmplist = NULL; */
+ setting_lang_entry *pnode = NULL;
+
+ /* load language table from XML file */
+ Eina_List *langlist = setting_get_language_list();
+
+ EINA_LIST_FOREACH(langlist, elist, pnode) {
+ if (safeStrCmp(ad->selected_locale, pnode->title) == 0) {
+ /* [control] set automatic - TRUE */
+ vconf_set_bool(VCONFKEY_SETAPPL_LANG_AUTOMATIC_BOOL, FALSE);
+
+ char temp[32] = {0,};
+ snprintf(temp, 32, "%s.UTF-8", pnode->locale);
+ /* [control] set vconf language */
+ vconf_set_str(VCONFKEY_LANGSET, temp);
+ elm_language_set(temp);
+
+ int region_automatic = 1;
+ vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, ®ion_automatic);
+ if (region_automatic == 1) {
+ /* [control] region format set - if 'automatic region' */
+ vconf_set_str(VCONFKEY_REGIONFORMAT, temp);
+ int ret = setting_phone_region_format_set_dateformat(pnode->locale, ad);
+ if (ret == SETTING_RETURN_FAIL) {
+ SETTING_TRACE_ERROR("[Error] set date format fail");
+ }
+ }
+ SETTING_TRACE_DEBUG("selectd language is %s, its locale is %s", ad->selected_locale, pnode->locale);
+ }
+ }
+ }
+
+ FREE(ad->selected_locale);
+
+ /* 2. GET SELECTED LANG */
const char *pa_lang = vconf_get_str(VCONFKEY_LANGSET);
- if (pa_lang) {
+ if (pa_lang) { /* remove the */
char *q = strchr(pa_lang, '.');
if (q) {
*q = '\0';
}
- SETTING_TRACE("pa_lang:%s", pa_lang);
- int err = -1;
- uloc_setDefault(pa_lang, &err);
- free((void *)pa_lang);
- pa_lang = NULL;
+ }
+ SETTING_TRACE("pa_lang:%s", pa_lang);
+ int err = -1;
+
+ /* 3. SET DEFAULT */
+ /* default UI language */
+ uloc_setDefault(pa_lang, &err);
+
+ char *caller = NULL;
+ app_control_h service = ad->bundle_data;
+
+ app_control_get_extra_data(service, "caller", &caller);
+
+ if (caller) {
+ int ret = setting_phone_region_format_set_dateformat(pa_lang, ad);
+ if (ret == SETTING_RETURN_FAIL) {
+ SETTING_TRACE_ERROR("[Error] set date format fail");
+ }
+
+ const char *lang = vconf_get_str(VCONFKEY_LANGSET);
+ if (lang) {
+ ret = vconf_set_str(VCONFKEY_REGIONFORMAT, lang);
+ if (ret != 0) {
+ SETTING_TRACE_ERROR("[Error] set value of VCONFKEY_REGIONFORMAT fail");
+ }
+ FREE(lang);
+ }
+
+ /* Create Bundle and send message */
+ app_control_h svc;
+ if (app_control_create(&svc)) {
+ return;
+ }
+
+ app_control_add_extra_data(svc, "result", "rbutton_click");
+ ug_send_result(ad->ug, svc);
+
+ app_control_destroy(svc);
+
+ ug_destroy_me(ad->ug);
+ FREE(caller);
+
} else {
- SETTING_TRACE_ERROR("get vconf failed");
+ ad->pop_progress_lang = setting_create_popup_with_progressbar_withobject(ad, ad->pop_progress_lang, ad->ly_language,
+ PROGRESSBAR_STYLE,
+ NULL, KeyStr_Loading, setting_phone_display_language_done_popup_resp_cb, 3/*0*/, TRUE, TRUE); /* 3 seconds to wait in maximum */
}
-#endif
- /* Create Bundle and send message */
- service_h svc;
- if(service_create(&svc))
- return;
+ FREE(pa_lang);
+}
- service_add_extra_data(svc, "result", "rbutton_click");
- ug_send_result(ad->ug, svc);
- service_destroy(svc);
- ug_destroy_me(ad->ug);
+/**
+ * @brief Callback of language item click event
+ *
+ * @param data The view data passed between all callbacks
+ * @param event_info The select genlist item
+ */
+static void setting_phone_display_language_mouse_up_Gendial_list_radio_cb(void *data,
+ Evas_Object *obj,
+ void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ setting_retm_if(event_info == NULL, "Invalid argument: 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);
+
+ ad->selected_locale = (char *)strdup(list_item->keyStr);
+ setting_phone_display_language_close_popup_ex(ad);
}
+
+
/* ***************************************************
*
*basic 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_display_language_create(void *cb)
{
SETTING_TRACE_BEGIN;
- /* error check */
retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
SettingPhoneUG *ad = (SettingPhoneUG *) cb;
- char *title = _("IDS_ST_HEADER_DISPLAY_LANGUAGE");
+ /*char *title = "IDS_ST_HEADER_LANGUAGE_AND_INPUT"; */
+ char *title = "IDS_ST_HEADER_DISPLAY_LANGUAGE";
Evas_Object *scroller = NULL;
setting_call_back_func gl_sel_cb = NULL;
if (&setting_view_phone_display_language == ad->view_to_load) {
char *caller = NULL;
- service_h service = ad->bundle_data;
+ app_control_h service = ad->bundle_data;
- service_get_extra_data(service, "caller", &caller);
+ app_control_get_extra_data(service, "caller", &caller);
- if(caller)
- {
+ if (caller) {
ad->ly_language = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
- ad->win_get,
- title,
- _("IDS_COM_BODY_BACK"), NULL,
- setting_phone_display_language_caller_exist_right_cb, NULL,
- ad, &scroller, &ad->navi_bar);
+ ad->win_get,
+ title,
+ "IDS_COM_BODY_BACK", NULL,
+ setting_phone_display_language_caller_exist_right_cb, NULL,
+ ad, &scroller, &ad->navi_bar);
gl_sel_cb = setting_phone_display_language_mouse_up_Gendial_list_radio_cb;
- }
- else
- {
+ FREE(caller);
+ } else {
SETTING_TRACE_ERROR("[ERROR] caller is empty");
return SETTING_RETURN_FAIL;
}
} else {
/* add basic layout */
- setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
- title, _("IDS_COM_BODY_BACK"),
- NULL,
- setting_phone_display_language_click_softkey_cancel_cb,
- NULL, ad, &scroller, ad->navi_bar);
+ Elm_Object_Item *navi_it = setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
+ title, "IDS_COM_BODY_BACK",
+ NULL,
+ NULL,
+ NULL, ad, &scroller, ad->navi_bar);
+ elm_naviframe_item_pop_cb_set(navi_it, setting_phone_display_language_click_softkey_cancel_cb, ad);
gl_sel_cb = setting_phone_display_language_mouse_up_Gendial_list_radio_cb;
}
ad->gl_lang = scroller;
+ elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+
+ evas_object_smart_callback_add(ad->gl_lang, "realized", __gl_realized_cb, NULL);
Elm_Object_Item *item = NULL;
item =
- elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
- ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ 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);
/* scroller is a genlist */
ad->chk_lang = elm_radio_add(scroller);
elm_radio_state_value_set(ad->chk_lang, -1);
-
-
- // [UI] Automatic
+ /* create loop operation here */
+ Eina_List *elist = NULL;
+ setting_lang_entry *pnode = NULL;
+ int idx = SETTING_LANG_KOREA; /* 2 */
+ int item_idx = 0;
+ Setting_GenGroupItem_Data *last_item = NULL;
Setting_GenGroupItem_Data *item_data = NULL;
- item_data =
- setting_create_Gendial_field_def(scroller,
- &(ad->itc_1text),
- gl_sel_cb,
- ad->chk_lang,
- SWALLOW_Type_INVALID, NULL, NULL,
- 0,
- "IDS_COM_BODY_AUTOMATIC", NULL, NULL);
- if (item_data) {
- item_data->userdata = ad;
- } else {
- SETTING_TRACE_ERROR("item_data is NULL");
- }
-
- // create loop operation here
- Eina_List* elist = NULL;
- setting_lang_entry* pnode = NULL;
- int idx = SETTING_LANG_KOREA; // 2
- // load language table from XML file
- Eina_List* langlist = setting_get_language_list();
+ /* load language table from XML file */
+ Eina_List *langlist = setting_get_language_list();
- EINA_LIST_FOREACH( langlist, elist, pnode)
- {
+ EINA_LIST_FOREACH(langlist, elist, pnode) {
item_data =
- setting_create_Gendial_field_def(scroller,
- &(ad->itc_1text),
- gl_sel_cb,
- ad->chk_lang,
- SWALLOW_Type_INVALID, NULL, NULL,
- //idx, // <<< WARNING
- pnode->number,
- pnode->title, NULL, NULL);
+ setting_create_Gendial_field_def(scroller,
+ &(ad->itc_1text),
+ gl_sel_cb,
+ ad,
+ SWALLOW_Type_INVALID, NULL, NULL,
+ /*idx, // <<< WARNING */
+ 0,
+ pnode->title, NULL, NULL);
if (item_data) {
item_data->userdata = ad;
+ if (item_idx == 0) {
+ item_data->group_style = SETTING_GROUP_STYLE_TOP;
+ } else {
+ item_data->group_style = SETTING_GROUP_STYLE_CENTER;
+ }
+
+ if (item_data->item) {
+ if (item_data->group_style == SETTING_GROUP_STYLE_TOP) {
+ elm_object_item_signal_emit(item_data->item, "elm,state,top", "");
+ } else if (item_data->group_style == SETTING_GROUP_STYLE_BOTTOM) {
+ elm_object_item_signal_emit(item_data->item, "elm,state,bottom", "");
+ } else if (item_data->group_style == SETTING_GROUP_STYLE_CENTER) {
+ elm_object_item_signal_emit(item_data->item, "elm,state,center", "");
+ } else {
+ elm_object_item_signal_emit(item_data->item, "elm,state,normal", "");
+ }
+ }
+ item_idx++;
+ last_item = item_data;
} else {
SETTING_TRACE_ERROR("item_data is NULL");
}
- idx++;
- }
+ idx++;
+ }
+ if (last_item) {
+ last_item->group_style = SETTING_GROUP_STYLE_BOTTOM;
+ }
- item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
+ /*item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
ELM_GENLIST_ITEM_NONE, NULL, NULL);
- elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-
- // set radio button to the selected state.
- int index = -1;
- int ret, err;
- ret = setting_get_int_slp_key(INT_SLP_SETTING_LANG, &index, &err);
- elm_radio_value_set(ad->chk_lang, index);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);*/
- ad->prev_lang = (int)elm_radio_value_get(ad->chk_lang);
setting_view_phone_display_language.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_display_language_destroy(void *cb)
{
SETTING_TRACE_BEGIN;
retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
SettingPhoneUG *ad = (SettingPhoneUG *) cb;
+ evas_object_smart_callback_del(ad->gl_lang, "realized", __gl_realized_cb);
+
/* FIXED : destroy only if it was created. */
if (setting_view_phone_display_language.is_create) {
- if (ad->popup) {
- evas_object_del(ad->popup);
- ad->popup = NULL;
- }
-
- if (ad->pop_progress) {
- evas_object_del(ad->pop_progress);
- ad->pop_progress = NULL;
+ if (ad->pop_progress_lang) {
+ evas_object_del(ad->pop_progress_lang);
+ ad->pop_progress_lang = NULL;
}
elm_naviframe_item_pop(ad->navi_bar);
setting_view_phone_display_language.is_create = 0;
return SETTING_RETURN_SUCCESS;
}
+
+
+/**
+ * @brief Callback of view cleanup
+ *
+ * @param cb The view data passed between all callbacks
+ * @return #1 on success, else on failed
+ */
static int setting_phone_display_language_cleanup(void *cb)
{
SETTING_TRACE_BEGIN;
return SETTING_RETURN_SUCCESS;
}
-static void
-setting_phone_display_language_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;
- setting_view_change(&setting_view_phone_display_language,
- &setting_view_phone_language_region, ad);
-}
-
-static void
-setting_phone_display_language_mouse_up_Gendial_list_radio_cb(void *data,
- Evas_Object *obj,
- void *event_info)
-{
- SETTING_TRACE_BEGIN;
- /* error check */
- setting_retm_if(data == NULL, "Data parameter is NULL");
- setting_retm_if(event_info == NULL,
- "Invalid argument: event info is NULL");
-
- Evas_Object *radio = (Evas_Object *) 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);
- SettingPhoneUG *ad = (SettingPhoneUG *) list_item->userdata;
-
- if (ad->popup) {
- return;
- }
- //SETTING_TRACE("---------------------------------------------");
- //SETTING_TRACE("ad->prev_lang = %d ", ad->prev_lang);
- //SETTING_TRACE("chk_status = %d ", list_item->chk_status);
- //SETTING_TRACE("---------------------------------------------");
- /* if not change, return */
- //if (ad->prev_lang == list_item->chk_status) {
- // SETTING_TRACE("NOT CHANGED ");
- // return;
- //}
-
- elm_radio_value_set(radio, list_item->chk_status);
- setting_phone_display_language_close_popup_ex(ad);
-}
-
-static void setting_phone_display_language_close_popup_ex(void *data)
-{
- SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingPhoneUG *ad = (SettingPhoneUG *) data;
-
- ad->prev_lang = elm_radio_value_get(ad->chk_lang);
- SETTING_TRACE("cur_chk_lang = %d", ad->prev_lang);
-
- // 0. change VCONFKEY_LANGSET
- setting_phone_lang_change_lang_value(ad->prev_lang);
-
- /* if set automatic */
- if (0 == ad->prev_lang) {
- vconf_set_str(VCONFKEY_LANGSET, ad->sim_lang);
- }
-
- // 2. GET SELECTED LANG
- const char *pa_lang = vconf_get_str(VCONFKEY_LANGSET);
- if (pa_lang) { /* remove the */
- char *q = strchr(pa_lang, '.');
- if (q)
- *q = '\0';
- }
- SETTING_TRACE("pa_lang:%s", pa_lang);
- int err = -1;
- // 3. SET DEFAULT
- // default UI language
- uloc_setDefault(pa_lang, &err);
- if (U_FAILURE(err)) {
- SETTING_TRACE("FAILED : uloc_setDefault error code : %d", err);
- } else {
- SETTING_TRACE("SUCCESS : uloc_setDefault error code : %d", err);
- }
- FREE(pa_lang);
-
- char *caller = NULL;
- service_h service = ad->bundle_data;
-
- service_get_extra_data(service, "caller", &caller);
-
- if(caller) {
- /* Create Bundle and send message */
- service_h svc;
- if(service_create(&svc))
- return;
-
- service_add_extra_data(svc, "result", "rbutton_click");
- ug_send_result(ad->ug, svc);
-
- service_destroy(svc);
-
- ug_destroy_me(ad->ug);
-
- } else {
- /* after lang-change, go back to the previous page*/
- elm_naviframe_item_pop(ad->navi_bar);
- setting_view_phone_display_language.is_create = 0;
- }
-}