Fix to avoid null setting for language vconf
[apps/core/preloaded/settings.git] / setting-phone / src / setting-phone-language-region.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-phone-language-region.h>
22
23 static int setting_phone_language_region_create(void *cb);
24 static int setting_phone_language_region_destroy(void *cb);
25 static int setting_phone_language_region_update(void *cb);
26 static int setting_phone_language_region_cleanup(void *cb);
27
28 setting_view setting_view_phone_language_region = {
29         .create = setting_phone_language_region_create,
30         .destroy = setting_phone_language_region_destroy,
31         .update = setting_phone_language_region_update,
32         .cleanup = setting_phone_language_region_cleanup,
33 };
34
35 static void setting_phone_lang_click_softkey_cancel_cb(void *data,
36                                                        Evas_Object *obj,
37                                                        void *event_info);
38 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
39                                                         Evas_Object *obj,
40                                                         void *event_info);
41
42
43 /* ***************************************************
44  *
45  *basic func
46  *
47  ***************************************************/
48
49 static int setting_phone_language_region_create(void *cb)
50 {
51         SETTING_TRACE_BEGIN;
52         /* error check */
53         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
54
55         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
56         Evas_Object *scroller = NULL;
57
58         char *title = _(KeyStr_LanguageRegion);
59         ad->ly_language =
60             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
61                                                    ad->win_get, title,
62                                                    _("IDS_COM_BODY_BACK"),
63                                                    NULL,
64                                                    setting_phone_lang_click_softkey_cancel_cb,
65                                                    NULL, ad, &scroller,
66                                                    &(ad->navi_bar));
67         retv_if(ad->ly_language == NULL, SETTING_RETURN_FAIL);
68         ad->gl_lang_region = scroller;
69
70         Elm_Object_Item *item = NULL;
71         item =
72             elm_genlist_item_append(scroller, &(ad->itc_seperator),
73                                     NULL, NULL, ELM_GENLIST_ITEM_NONE,
74                                     NULL, NULL);
75         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
76
77         char* pa_display_lang = get_pa_display_language_str();
78         ad->data_display_language =
79             setting_create_Gendial_field_def(scroller,
80                                              &(ad->itc_2text_2),
81                                              setting_phone_lang_item_Gendial_mouse_up_cb,
82                                              ad, SWALLOW_Type_INVALID,
83                                              NULL, NULL, 0,
84                                              "IDS_ST_HEADER_DISPLAY_LANGUAGE",
85                                              pa_display_lang,
86                                              NULL);
87         if (ad->data_display_language) {
88                 ad->data_display_language->userdata = ad;
89         } else {
90                 SETTING_TRACE_ERROR("ad->data_display_language is NULL");
91         }
92         G_FREE(pa_display_lang);
93
94         char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
95         if (pa_region == NULL) {
96                 SETTING_TRACE_ERROR
97                     ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
98         }
99         ad->prev_locale = (char *)g_strdup(pa_region);
100         ad->data_region_fmt =
101             setting_create_Gendial_field_def(scroller,
102                                              &(ad->itc_2text_2),
103                                              setting_phone_lang_item_Gendial_mouse_up_cb,
104                                              ad, SWALLOW_Type_INVALID,
105                                              NULL, NULL, 0,
106                                              "IDS_ST_BODY_REGION",
107                                              setting_phone_lang_get_region_str
108                                              (pa_region), NULL);
109         if (ad->data_region_fmt) {
110                 ad->data_region_fmt->userdata = ad;
111         } else {
112                 SETTING_TRACE_ERROR("ad->data_region_fmt is NULL");
113         }
114
115         char *example_desc =
116             setting_phone_lang_get_example_desc(pa_region, ad);
117         ad->data_region_fmt_example =
118             setting_create_Gendial_field_def(scroller,
119                                              &(ad->itc_bg_1icon), NULL,
120                                              ad,
121                                              SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
122                                              NULL, NULL, 0,
123                                              example_desc, NULL, NULL);
124         if (pa_region) {
125                 FREE(pa_region);
126         }
127         if (example_desc) {
128                 FREE(example_desc);
129         }
130
131         setting_view_phone_language_region.is_create = 1;
132         return SETTING_RETURN_SUCCESS;
133 }
134
135 static int setting_phone_language_region_destroy(void *cb)
136 {
137         SETTING_TRACE_BEGIN;
138         /* error check */
139         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
140
141         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
142
143         if (ad->ly_language != NULL) {
144                 evas_object_del(ad->ly_language);
145                 ad->ly_language = NULL;
146
147                 if (ad->pattern_generator) {
148                         udatpg_close(ad->pattern_generator);
149                         ad->pattern_generator = NULL;
150                 }
151                 setting_view_phone_language_region.is_create = 0;
152         }
153
154         return SETTING_RETURN_SUCCESS;
155 }
156
157 static int setting_phone_language_region_update(void *cb)
158 {
159         SETTING_TRACE_BEGIN;
160         /* error check */
161         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
162
163         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
164
165         if (ad->ly_language != NULL) {
166                 evas_object_show(ad->ly_language);
167
168                 /* setting_update_chk_status(ad->chk_lang, INT_SLP_SETTING_LANG); */
169         }
170
171         return SETTING_RETURN_SUCCESS;
172 }
173
174 static int setting_phone_language_region_cleanup(void *cb)
175 {
176         SETTING_TRACE_BEGIN;
177         return SETTING_RETURN_SUCCESS;
178 }
179
180 /* ***************************************************
181  *
182  *general func
183  *
184  ***************************************************/
185
186 /* ***************************************************
187  *
188  *call back func
189  *
190  ***************************************************/
191
192 static void
193 setting_phone_lang_click_softkey_cancel_cb(void *data, Evas_Object *obj,
194                                            void *event_info)
195 {
196         SETTING_TRACE_BEGIN;
197         /* error check */
198         retm_if(data == NULL, "Data parameter is NULL");
199
200         SettingPhoneUG *ad = (SettingPhoneUG *) data;
201
202         ug_destroy_me(ad->ug);
203 }
204
205 // 0 : automatic
206 void setting_phone_lang_change_lang_value(int ichk)
207 {
208         SETTING_TRACE_BEGIN;
209         int err, ret;
210
211         /** @todo  ASSERT ( SCOPE CHECK )  */
212
213         Eina_List* list = setting_get_language_list();
214         Eina_List* elist = NULL;
215         setting_lang_entry* pnode;
216
217         char locale[128] = {0,};
218
219     EINA_LIST_FOREACH( list, elist, pnode)
220     {
221                 if (pnode->number == ichk) {
222                         snprintf(locale, 128, "%s", pnode->locale);
223                 }
224     }
225
226         SETTING_TRACE("table . locale >>>>>> :: %s ", locale);          //en_US.UTF8
227
228         //if (ichk > 0) {
229                 // CHECK 'AUTO' HERE
230         ret = setting_set_int_slp_key(INT_SLP_SETTING_LANG, ichk, &err);
231
232         if (ichk > 0)
233                 ret = vconf_set_str(VCONFKEY_LANGSET, locale);
234 }
235
236 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
237                                                 Evas_Object *obj,
238                                                 void *event_info)
239 {
240         SETTING_TRACE_BEGIN;
241         /* error check */
242         setting_retm_if(data == NULL, "Data parameter is NULL");
243         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
244         elm_genlist_item_selected_set(item, 0);
245         Setting_GenGroupItem_Data *list_item =
246             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
247         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
248
249         SettingPhoneUG *ad = (SettingPhoneUG *) data;
250
251         int ret = SETTING_RETURN_SUCCESS;
252         if(!safeStrCmp("IDS_ST_HEADER_DISPLAY_LANGUAGE", list_item->keyStr)) 
253         {
254                 ret =
255                     setting_view_change(&setting_view_phone_language_region,
256                                         &setting_view_phone_display_language,
257                                         ad);
258         }
259         else if(!safeStrCmp("IDS_ST_BODY_REGION", list_item->keyStr)) 
260         {
261                 ret =
262                     setting_view_change(&setting_view_phone_language_region,
263                                         &setting_view_phone_region_format, ad);
264         }
265 }
266