4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <setting-phone-display-language.h>
23 #include <setting-common-draw-widget.h>
24 #include <eventsystem.h>
26 static int setting_phone_display_language_create(void *cb);
27 static int setting_phone_display_language_destroy(void *cb);
28 static int setting_phone_display_language_cleanup(void *cb);
31 setting_view setting_view_phone_display_language = {
32 .create = setting_phone_display_language_create,
33 .destroy = setting_phone_display_language_destroy,
35 .cleanup = setting_phone_display_language_cleanup,
42 * @brief Callback of cancel button by caller
44 * @param data The view data passed between all callbacks
46 static void setting_phone_display_language_caller_exist_right_cb(void *data,
51 setting_retm_if(data == NULL, "Data parameter is NULL");
53 SettingPhoneUG *ad = (SettingPhoneUG *) data;
54 /* Create Bundle and send message */
56 if (app_control_create(&svc)) {
60 app_control_add_extra_data(svc, "result", "rbutton_click");
61 ug_send_result(ad->ug, svc);
63 app_control_destroy(svc);
65 ug_destroy_me(ad->ug);
71 * @brief Callback of cancel button
73 * @param data The view data passed between all callbacks
74 * @param it Naviframe item
76 static Eina_Bool setting_phone_display_language_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
79 retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
80 SettingPhoneUG *ad = (SettingPhoneUG *) data;
81 setting_view_change(&setting_view_phone_display_language, &setting_view_phone_language_region, ad);
89 * @brief Callback of pop_progress_lang timeout
91 * @param data The view data passed between all callbacks
93 void setting_phone_display_language_done_popup_resp_cb(void *data, Evas_Object *obj, void *event_info)
96 retm_if(data == NULL, "Data parameter is NULL");
97 SettingPhoneUG *ad = (SettingPhoneUG *) data;
99 if (ad->pop_progress_lang) {
100 evas_object_del(ad->pop_progress_lang);
101 ad->pop_progress_lang = NULL;
104 elm_naviframe_item_pop(ad->navi_bar);
105 setting_view_phone_display_language.is_create = 0;
110 * @brief function of item click
112 * @param data The view data passed between all callbacks
114 static void setting_phone_display_language_close_popup_ex(void *data)
117 setting_retm_if(data == NULL, "Data parameter is NULL");
118 SettingPhoneUG *ad = (SettingPhoneUG *) data;
120 if (ad->selected_locale == NULL) {
124 if (safeStrCmp(ad->selected_locale, "IDS_ST_BODY_ANSWERINGMODE_AUTOMATIC") == 0) {
126 /* [control] set automatic - TRUE */
127 vconf_set_bool(VCONFKEY_SETAPPL_LANG_AUTOMATIC_BOOL, TRUE);
129 /* [control] set vconf language */
130 if (ad->sim_lang != NULL) {
131 set_language_helper(ad->sim_lang);
132 /*vconf_set_str(VCONFKEY_LANGSET, ad->sim_lang); */
133 elm_language_set(ad->sim_lang);
134 SETTING_TRACE_DEBUG("select Automatic : sim_lang is %s", ad->sim_lang);
137 /* create loop operation here */
138 Eina_List *elist = NULL;
139 /*Eina_List* tmplist = NULL; */
140 setting_lang_entry *pnode = NULL;
142 /* load language table from XML file */
143 Eina_List *langlist = setting_get_language_list();
145 EINA_LIST_FOREACH(langlist, elist, pnode) {
146 if (safeStrCmp(ad->selected_locale, pnode->title) == 0) {
147 /* [control] set automatic - TRUE */
148 vconf_set_bool(VCONFKEY_SETAPPL_LANG_AUTOMATIC_BOOL, FALSE);
150 char temp[32] = {0,};
151 snprintf(temp, 32, "%s.UTF-8", pnode->locale);
152 /* [control] set vconf language */
153 set_language_helper(pnode->locale);
154 elm_language_set(temp);
156 int region_automatic = 1;
157 vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, ®ion_automatic);
158 if (region_automatic == 1) {
159 /* [control] region format set - if 'automatic region' */
160 set_regionformat_helper(pnode->locale);
162 int ret = setting_phone_region_format_set_dateformat(pnode->locale, ad);
163 if (ret == SETTING_RETURN_FAIL) {
164 SETTING_TRACE_ERROR("[Error] set date format fail");
167 SETTING_TRACE_DEBUG("selectd language is %s, its locale is %s", ad->selected_locale, pnode->locale);
172 FREE(ad->selected_locale);
174 /* 2. GET SELECTED LANG */
175 const char *pa_lang = vconf_get_str(VCONFKEY_LANGSET);
176 if (pa_lang) { /* remove the */
177 char *q = strchr(pa_lang, '.');
182 SETTING_TRACE("pa_lang:%s", pa_lang);
186 /* default UI language */
187 uloc_setDefault(pa_lang, &err);
190 app_control_h service = ad->bundle_data;
192 app_control_get_extra_data(service, "caller", &caller);
195 int ret = setting_phone_region_format_set_dateformat(pa_lang, ad);
196 if (ret == SETTING_RETURN_FAIL) {
197 SETTING_TRACE_ERROR("[Error] set date format fail");
200 const char *lang = vconf_get_str(VCONFKEY_LANGSET);
202 ret = set_regionformat_helper(lang);
203 /*ret = vconf_set_str(VCONFKEY_REGIONFORMAT, lang); */
205 SETTING_TRACE_ERROR("[Error] set value of VCONFKEY_REGIONFORMAT fail");
210 /* Create Bundle and send message */
212 if (app_control_create(&svc)) {
216 app_control_add_extra_data(svc, "result", "rbutton_click");
217 ug_send_result(ad->ug, svc);
219 app_control_destroy(svc);
221 ug_destroy_me(ad->ug);
225 ad->pop_progress_lang = setting_create_popup_with_progressbar(ad, ad->ly_language,
227 NULL, KeyStr_Loading, setting_phone_display_language_done_popup_resp_cb, 3/*0*/, TRUE, TRUE, 0); /* 3 seconds to wait in maximum */
236 * @brief Callback of language item click event
238 * @param data The view data passed between all callbacks
239 * @param event_info The select genlist item
241 static void setting_phone_display_language_mouse_up_Gendial_list_radio_cb(void *data,
246 setting_retm_if(data == NULL, "Data parameter is NULL");
247 setting_retm_if(event_info == NULL, "Invalid argument: event info is NULL");
248 SettingPhoneUG *ad = (SettingPhoneUG *)data;
249 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
251 elm_genlist_item_selected_set(item, 0);
252 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
253 setting_retm_if(NULL == list_item, "list_item is NULL");
255 ad->selected_locale = (char *)strdup(list_item->keyStr);
256 setting_phone_display_language_close_popup_ex(ad);
262 /* ***************************************************
266 ***************************************************/
269 * @brief Callback of view creating
271 * @param cb The view data passed between all callbacks
272 * @return #1 on success, else on failed
274 static int setting_phone_display_language_create(void *cb)
277 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
279 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
280 /*char *title = "IDS_ST_HEADER_LANGUAGE_AND_INPUT"; */
281 char *title = "IDS_ST_HEADER_DISPLAY_LANGUAGE";
283 Evas_Object *scroller = NULL;
284 setting_call_back_func gl_sel_cb = NULL;
286 if (&setting_view_phone_display_language == ad->view_to_load) {
289 app_control_h service = ad->bundle_data;
291 app_control_get_extra_data(service, "caller", &caller);
294 ad->ly_language = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
297 "IDS_ST_BUTTON_BACK", NULL,
298 setting_phone_display_language_caller_exist_right_cb, NULL,
299 ad, &scroller, &ad->navi_bar);
300 gl_sel_cb = setting_phone_display_language_mouse_up_Gendial_list_radio_cb;
303 SETTING_TRACE_ERROR("[ERROR] caller is empty");
304 return SETTING_RETURN_FAIL;
307 /* add basic layout */
308 Elm_Object_Item *navi_it = setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
309 title, "IDS_ST_BUTTON_BACK",
311 setting_phone_display_language_click_softkey_cancel_cb,
312 NULL, ad, &scroller, ad->navi_bar);
313 elm_naviframe_item_pop_cb_set(navi_it, setting_phone_display_language_click_softkey_cancel_cb, ad);
314 gl_sel_cb = setting_phone_display_language_mouse_up_Gendial_list_radio_cb;
317 ad->gl_lang = scroller;
318 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
320 evas_object_smart_callback_add(ad->gl_lang, "realized", __gl_realized_cb, NULL);
322 /* scroller is a genlist */
323 ad->chk_lang = elm_radio_add(scroller);
324 elm_radio_state_value_set(ad->chk_lang, -1);
326 /* create loop operation here */
327 Eina_List *elist = NULL;
328 setting_lang_entry *pnode = NULL;
329 int idx = SETTING_LANG_KOREA; /* 2 */
331 Setting_GenGroupItem_Data *last_item = NULL;
332 Setting_GenGroupItem_Data *item_data = NULL;
334 /* load language table from XML file */
335 Eina_List *langlist = setting_get_language_list();
337 EINA_LIST_FOREACH(langlist, elist, pnode) {
339 setting_create_Gendial_field_def(scroller,
343 SWALLOW_Type_INVALID, NULL, NULL,
344 /*idx, // <<< WARNING */
346 pnode->title, NULL, NULL);
348 item_data->userdata = ad;
350 last_item = item_data;
352 SETTING_TRACE_ERROR("item_data is NULL");
357 setting_view_phone_display_language.is_create = 1;
359 return SETTING_RETURN_SUCCESS;
365 * @brief Callback of view destroy
367 * @param cb The view data passed between all callbacks
368 * @return #1 on success, else on failed
370 static int setting_phone_display_language_destroy(void *cb)
374 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
375 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
377 evas_object_smart_callback_del(ad->gl_lang, "realized", __gl_realized_cb);
379 /* FIXED : destroy only if it was created. */
380 if (setting_view_phone_display_language.is_create) {
381 if (ad->pop_progress_lang) {
382 evas_object_del(ad->pop_progress_lang);
383 ad->pop_progress_lang = NULL;
385 elm_naviframe_item_pop(ad->navi_bar);
386 setting_view_phone_display_language.is_create = 0;
388 setting_get_language_list_destroy();
391 return SETTING_RETURN_SUCCESS;
397 * @brief Callback of view cleanup
399 * @param cb The view data passed between all callbacks
400 * @return #1 on success, else on failed
402 static int setting_phone_display_language_cleanup(void *cb)
406 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
407 setting_phone_display_language_destroy(cb);
409 return SETTING_RETURN_SUCCESS;