update license verison number 1.0 -> 1.1
[apps/home/settings.git] / setting-phone / src / setting-phone-region-format.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.1 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-phone-region-format.h>
18
19 #define MAX_REGION_STRLEN 256
20
21 static int setting_phone_region_format_create(void *cb);
22 static int setting_phone_region_format_destroy(void *cb);
23 static int setting_phone_region_format_cleanup(void *cb);
24
25 setting_view setting_view_phone_region_format = {
26         .create = setting_phone_region_format_create,
27         .destroy = setting_phone_region_format_destroy,
28         .update = NULL,
29         .cleanup = setting_phone_region_format_cleanup,
30 };
31
32 static char *__region_format_vconf_str_get();
33 static Eina_Bool __region_animator_cb(void *data);
34 static void __region_genlist_create(void *data);
35 static Eina_Bool __region_genlist_update(void *data);
36 static void __searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info);
37
38 static int setting_phone_region_format_get_region_fmt(char *list[],
39                                                       int item_idx[],
40                                                       /*[OUT]*/ char *region_keyStr[],
41                                                       int *region_num)
42 {
43         const char *loc_list = NULL;
44         int loc_count = 0;
45         UChar lang[LANGUAGE_STR_LEN] = { 0, };
46         UChar country[COUNTRY_STR_LEN] = { 0, };
47         UChar variant[SETTING_STR_SLP_LEN] = { 0, };
48         UChar displayname[SETTING_STR_SLP_LEN] = { 0, };
49         const char *localeID = NULL;
50         UErrorCode language_status = U_ZERO_ERROR;
51         UErrorCode country_status = U_ZERO_ERROR;
52         UErrorCode variant_status = U_ZERO_ERROR;
53         UErrorCode displayname_status = U_ZERO_ERROR;
54
55         int tmp_region_num = 0;
56         *region_num = 0;
57
58         char *str_lang = NULL;
59         char *str_country = NULL;
60         char *str_variant = NULL;
61         char *str_displayname = NULL;
62         Eina_List *region_list = NULL;
63
64         loc_count = uloc_countAvailable();
65
66         int i = 0;
67         localeID = uloc_getDefault();
68         SETTING_TRACE("localeID = %s", localeID);
69
70         for (; i < loc_count; i++) {
71                 if (tmp_region_num >= REGION_ITEM_MAX)
72                         break;
73
74                 loc_list = uloc_getAvailable(i);
75
76                 /* SETTING_TRACE("loc_list = %s", loc_list); */
77                 uloc_getDisplayLanguage(loc_list, localeID, lang, LANGUAGE_STR_LEN, &language_status);
78                 if (U_FAILURE(language_status)) {
79                         SETTING_TRACE_ERROR("language_status got an error %s:%d ", language_status,language_status);
80                         language_status = U_ZERO_ERROR;   /* set the value to the initial value */
81                 }
82
83                 uloc_getDisplayCountry(loc_list, localeID, country, COUNTRY_STR_LEN, &country_status);
84                 if (U_FAILURE(country_status)) {
85                         SETTING_TRACE_ERROR("country_status got an error %s:%d ", country, country_status);
86                         country_status = U_ZERO_ERROR;  /* set the value to the initial value */
87                 }
88
89                 uloc_getDisplayVariant(loc_list, localeID, variant, SETTING_STR_SLP_LEN, &variant_status);
90                 if (U_FAILURE(variant_status)) {
91                         SETTING_TRACE_ERROR("variant_status got an error %s:%d ", variant, variant_status);
92                         variant_status = U_ZERO_ERROR;  /* set the value to the initial value */
93                 }
94
95                 uloc_getDisplayName(loc_list, localeID, displayname, SETTING_STR_SLP_LEN, &displayname_status);
96                 if (U_FAILURE(displayname_status)) {
97                         SETTING_TRACE_ERROR("displayname_status got an error %s:%d ", displayname, displayname_status);
98                         displayname_status = U_ZERO_ERROR;      /* set the value to the initial value */
99                 }
100
101                 str_lang = setting_phone_lang_str_to_utf8(lang);
102                 str_country = setting_phone_lang_str_to_utf8(country);
103                 str_variant = setting_phone_lang_str_to_utf8(variant);
104                 str_displayname = setting_phone_lang_str_to_utf8(displayname);
105
106                 /*  filter which has variant */
107                 if (str_lang != NULL && str_country != NULL
108                     && safeStrLen(str_country) > 1 && safeStrLen(str_variant) == 0) {
109                         Setting_Region_Table *item_data = (Setting_Region_Table *) calloc(1, sizeof(Setting_Region_Table));
110                         //setting_retvm_if(item_data == NULL, -1, "calloc failed")
111
112                         if(item_data == NULL) {
113                                 SETTING_TRACE_ERROR("calloc failed");
114                                 FREE(str_lang);
115                                 FREE(str_country);
116                                 FREE(str_variant);
117                                 FREE(str_displayname);
118                                 return -1;
119                         }
120
121                         item_data->desc = (char *)g_strdup(str_displayname);
122                         item_data->key = (char *)g_strdup(loc_list);
123                         region_list = eina_list_append(region_list, item_data);
124                         tmp_region_num++;
125                 }
126
127                 FREE(str_lang);
128                 FREE(str_country);
129                 FREE(str_variant);
130                 FREE(str_displayname);
131         }
132
133         region_list = eina_list_sort(region_list, eina_list_count(region_list),
134                                      setting_phone_region_format_compare_cb);
135
136         Eina_List *iter = NULL;
137         Setting_Region_Table *item_data = NULL;
138         i = 0;
139         EINA_LIST_FOREACH(region_list, iter, item_data) {
140                 if (item_data) {
141                         list[i] = (char *)g_strdup(item_data->desc);
142                         item_idx[i] = i;
143                         region_keyStr[i] = (char *)g_strdup(item_data->key);
144                         free(item_data);
145                         item_data = NULL;
146                         i++;
147                 }
148         }
149
150         eina_list_free(region_list);
151         SETTING_TRACE("region_num = %d", tmp_region_num);
152         *region_num = tmp_region_num;
153         return 0;
154 }
155
156 static char *__region_format_vconf_str_get()
157 {
158         SETTING_TRACE_BEGIN;
159         char *tempstr = vconf_get_str(VCONFKEY_REGIONFORMAT);
160         setting_retvm_if(NULL == tempstr, NULL, "NULL == tempstr");
161
162         char *str_region = NULL;
163         char* p = strchr(tempstr, '.');
164
165         int len = safeStrLen(tempstr) - safeStrLen(".UTF-8");
166         if (p) {
167                 if (len > 0) {
168                         str_region = strndup(tempstr, len);     //.UTF8 => 5
169                 } else {
170                         str_region = (char *)g_strdup(tempstr);
171                         SETTING_TRACE_ERROR("region format vconf stored error");
172                 }
173         } else  {
174                 str_region = (char *)g_strdup("en_US");
175         }
176
177         FREE(tempstr);
178         return str_region;
179 }
180
181 static Eina_Bool __region_animator_cb(void *data)
182 {
183         //SETTING_TRACE_BEGIN;
184         setting_retvm_if(NULL == data, ECORE_CALLBACK_CANCEL, "data is NULL");
185         SettingPhoneUG *ad = (SettingPhoneUG *) data;
186
187         Setting_GenGroupItem_Data *item_data = NULL;
188         if (ad->gl_region_cur_index >=  ad->region_num) {
189                 if (ad->animator) {
190                         ecore_animator_del(ad->animator);
191                         ad->animator = NULL;
192                 }
193                 elm_radio_value_set(ad->chk_region, ad->selected_region_idx);
194                 if (ad->pop_progress) {
195                         SETTING_TRACE("To delete ad->pop_progress");
196                         evas_object_del(ad->pop_progress);
197                         ad->pop_progress = NULL;
198                 }
199
200                 //if (ad->selected_item) {
201                         //show the last item
202                 //      elm_genlist_item_show(ad->selected_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
203                 //}
204                 ad->prev_region = ad->selected_region_idx;
205
206                 Elm_Object_Item *item = NULL;
207                 item = elm_genlist_item_append(ad->gl_region, &itc_bottom_seperator, NULL, NULL,
208                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
209                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
210                 return ECORE_CALLBACK_CANCEL;
211         }
212
213         int i = ad->gl_region_cur_index++;
214         if (isEmptyStr(ad->search_text) || is_substr_ncase(ad->region_desc[i], ad->search_text)) {
215                 item_data =
216                         setting_create_Gendial_field_def(ad->gl_region,
217                                                 &(ad->itc_1text),
218                                                 setting_phone_region_format_mouse_up_Gendial_list_radio_cb,
219                                                 ad->chk_region,
220                                                 SWALLOW_Type_INVALID, NULL, NULL,
221                                                 ad->region_index[i],
222                                                 ad->region_desc[i]/* HERE */, NULL, NULL);
223
224                 if (item_data) {
225                         item_data->userdata = ad;
226                 } else {
227                         SETTING_TRACE_ERROR("item_data is NULL");
228                 }
229
230                 if (!safeStrCmp(ad->region_vconf_str, ad->region_keyStr[i])) {
231                         ad->selected_region_idx = i;
232                         if (item_data) ad->selected_item = item_data->item;
233                 }
234         }
235
236         return ECORE_CALLBACK_RENEW;
237
238 }
239
240 static void __region_genlist_create(void *data)
241 {
242         SETTING_TRACE_BEGIN;
243         setting_retm_if(NULL == data, "data is NULL");
244         SettingPhoneUG *ad = (SettingPhoneUG *) data;
245
246         if (ad->pop_progress) {
247                 evas_object_del(ad->pop_progress);
248                 ad->pop_progress = NULL;
249         }
250         ad->pop_progress = setting_create_popup_with_progressbar(ad, ad->win_get,
251                                  "pending_list",
252                                  NULL, NULL, NULL, 0, TRUE, TRUE);
253
254         elm_genlist_clear(ad->gl_region);
255         G_FREE(ad->region_vconf_str);
256         ad->region_vconf_str = __region_format_vconf_str_get();
257
258         Elm_Object_Item *item = NULL;
259         item = elm_genlist_item_append(ad->gl_region, &(ad->itc_seperator), NULL, NULL,
260                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
261         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
262
263         Setting_GenGroupItem_Data *item_data = NULL;
264         ad->gl_region_index = 0;
265         ad->selected_item = NULL;
266         ad->selected_region_idx = -1;
267
268         int i = 0;
269         for (; i < ad->region_num; i++) {
270                 if (ad->gl_region_index >
271                       SETTING_PHONE_REGION_FORMAT_ANIMATOR_START_INDEX) {
272                         break;
273                 }
274
275                 if (isEmptyStr(ad->search_text) ||
276                       is_substr_ncase(ad->region_desc[i], ad->search_text)) {
277                         item_data =
278                                 setting_create_Gendial_field_def(ad->gl_region,
279                                                 &(ad->itc_1text),
280                                                 setting_phone_region_format_mouse_up_Gendial_list_radio_cb,
281                                                 ad->chk_region,
282                                                 SWALLOW_Type_INVALID, NULL, NULL,
283                                                 ad->region_index[i],
284                                                 ad->region_desc[i], NULL, NULL);
285                         if (item_data) {
286                                 item_data->userdata = ad;
287                         } else {
288                                 SETTING_TRACE_ERROR("item_data is NULL");
289                         }
290
291                         if (!safeStrCmp(ad->region_vconf_str, ad->region_keyStr[i])) {
292                                 ad->selected_region_idx = i;
293                                 if (item_data) {
294                                         ad->selected_item = item_data->item;
295                                 }
296                         }
297                         ad->gl_region_index++;
298                 }
299         }
300         ad->gl_region_cur_index = i;
301
302         if (ad->selected_region_idx > -1) {
303                 elm_radio_value_set(ad->chk_region, ad->selected_region_idx);
304                 ad->prev_region = ad->selected_region_idx;
305         }
306         if (ad->gl_region_cur_index < ad->region_num &&
307              ad->gl_region_index > SETTING_PHONE_REGION_FORMAT_ANIMATOR_START_INDEX) {
308                 //to continue adding items using animator
309                 SETTING_TRACE("to continue adding items using animator");
310                 if (ad->animator) {
311                         ecore_animator_del(ad->animator);
312                         ad->animator = NULL;
313                 }
314
315                 ad->animator = ecore_animator_add(__region_animator_cb, ad);
316         }
317         else {//had finished adding items
318                 SETTING_TRACE("had finished adding items");
319                 //if(ad->selected_item) {
320                         //show the selected_item item
321                 //      elm_genlist_item_show(ad->selected_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
322                 //}
323                 if (ad->pop_progress) {
324                         SETTING_TRACE("To delete ad->pop_progress");
325                         evas_object_del(ad->pop_progress);
326                         ad->pop_progress = NULL;
327                 }
328         }
329 }
330
331 static Eina_Bool __region_genlist_update(void *data)
332 {
333         SETTING_TRACE_BEGIN;
334         setting_retvm_if(NULL == data, ECORE_CALLBACK_CANCEL, "data is NULL");
335         SettingPhoneUG *ad = (SettingPhoneUG *) data;
336
337         elm_genlist_clear(ad->gl_region);
338         G_FREE(ad->region_vconf_str);
339         ad->region_vconf_str = __region_format_vconf_str_get();
340
341         Setting_GenGroupItem_Data *item_data = NULL;
342         ad->selected_region_idx = -1;
343
344         int i = 0;
345         int noResult = TRUE;
346         for (; i < ad->region_num; i++) {
347                 if (isEmptyStr(ad->search_text) ||
348                       is_substr_ncase(ad->region_desc[i], ad->search_text)) {
349                         item_data =
350                                 setting_create_Gendial_field_def(ad->gl_region,
351                                                 &(ad->itc_1text),
352                                                 setting_phone_region_format_mouse_up_Gendial_list_radio_cb,
353                                                 ad->chk_region,
354                                                 SWALLOW_Type_INVALID, NULL, NULL,
355                                                 ad->region_index[i],
356                                                 ad->region_desc[i], NULL, NULL);
357                         if (item_data) {
358                                 item_data->userdata = ad;
359                         } else {
360                                 SETTING_TRACE_ERROR("item_data is NULL");
361                         }
362
363                         if (!safeStrCmp(ad->region_vconf_str, ad->region_keyStr[i])) {
364                                 ad->selected_region_idx = i;
365                         }
366                         noResult = FALSE;
367                 }
368         }
369
370         if (ad->selected_region_idx > -1) {
371                 elm_radio_value_set(ad->chk_region, ad->selected_region_idx);
372         }
373
374         if (noResult) {
375                 item_data =
376                         setting_create_Gendial_field_def(ad->gl_region,
377                                         &(ad->itc_1text), NULL, NULL,
378                                         SWALLOW_Type_INVALID, NULL, NULL, 0,
379                                         _("No search result"), NULL, NULL);
380         }
381
382         ad->search_idler = NULL;
383         return ECORE_CALLBACK_CANCEL;
384 }
385
386 static void __searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
387 {
388         SETTING_TRACE_BEGIN;
389         setting_retm_if(data == NULL, "Data parameter is NULL");
390         SettingPhoneUG *ad = (SettingPhoneUG *)data;
391         setting_searchbar_redraw(ad, ad->search_bar, ad->search_text,
392                                  &(ad->search_idler),
393                                  __region_genlist_update);
394 }
395
396 /* ***************************************************
397  *
398  *basic func
399  *
400  ***************************************************/
401
402 static int setting_phone_region_format_create(void *cb)
403 {
404         SETTING_TRACE_BEGIN;
405         /* error check */
406         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
407
408         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
409         Evas_Object *sub_layout = elm_layout_add(ad->navi_bar);
410         elm_layout_theme_set(sub_layout, "layout", "application", "searchbar_base");
411         elm_object_signal_emit(sub_layout, "elm,state,show,searchbar", "elm");
412
413         setting_push_layout_navi_bar(_("IDS_ST_BODY_REGION"),
414                                      _("IDS_COM_BODY_BACK"),
415                                      NULL,
416                                      NULL,
417                                      setting_phone_region_format_click_softkey_cancel_cb,
418                                      NULL,
419                                      NULL, ad, sub_layout, ad->navi_bar, NULL);
420         //Apply new SIP concept
421         evas_object_data_set(ad->navi_bar, "sip.naviframe.title_obj", "SEARCH");
422
423         ad->gl_region = elm_genlist_add(ad->navi_bar);
424         elm_object_style_set(ad->gl_region, "dialogue");
425
426         ad->chk_region = elm_radio_add(ad->gl_region);
427         elm_radio_state_value_set(ad->chk_region, -1);
428         elm_radio_value_set(ad->chk_region, -1);
429
430         int ret = setting_phone_region_format_get_region_fmt(ad->region_desc,
431                                                              ad->region_index,
432                                                              ad->region_keyStr,
433                                                              &ad->region_num);
434         if (ret != 0) {
435                 SETTING_TRACE_ERROR("get region format list failed");
436         }
437
438         ad->prev_region = 0;
439         memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1);
440
441         __region_genlist_create(ad);
442
443         ad->search_bar = setting_create_searchbar(ad, sub_layout, __searchbar_changed_cb, NULL);
444
445         elm_object_part_content_set(sub_layout, "elm.swallow.content", ad->gl_region);
446
447         setting_view_phone_region_format.is_create = 1;
448
449         return SETTING_RETURN_SUCCESS;
450 }
451
452 static int setting_phone_region_format_destroy(void *cb)
453 {
454         SETTING_TRACE_BEGIN;
455         /* error check */
456         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
457         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
458         //Apply new SIP concept
459         evas_object_data_set(ad->navi_bar, "sip.naviframe.title_obj", NULL);
460
461         /*  FIXED : destroy only if it was created. */
462         if (setting_view_phone_region_format.is_create) {
463                 if (ad->search_idler) {
464                         ecore_idler_del(ad->search_idler);
465                         ad->search_idler = NULL;
466                 }
467                 if (ad->animator)
468                 {
469                         ecore_animator_del(ad->animator);
470                         ad->animator = NULL;
471                 }
472                 if (ad->popup) {
473                         evas_object_del(ad->popup);
474                         ad->popup = NULL;
475                 }
476                 if (ad->pop_progress) {
477                         evas_object_del(ad->pop_progress);
478                         ad->pop_progress = NULL;
479                 }
480
481                 elm_naviframe_item_pop(ad->navi_bar);
482                 setting_view_phone_region_format.is_create = 0;
483         }
484
485         return SETTING_RETURN_SUCCESS;
486 }
487
488 static int setting_phone_region_format_cleanup(void *cb)
489 {
490         SETTING_TRACE_BEGIN;
491         /* error check */
492         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
493         setting_phone_region_format_destroy(cb);
494         return SETTING_RETURN_SUCCESS;
495 }
496
497 static void
498 setting_phone_region_format_click_softkey_cancel_cb(void *data,
499                                                     Evas_Object *obj,
500                                                     void *event_info)
501 {
502         SETTING_TRACE_BEGIN;
503         retm_if(data == NULL, "Data parameter is NULL");
504         SettingPhoneUG *ad = (SettingPhoneUG *) data;
505         setting_view_change(&setting_view_phone_region_format,
506                             &setting_view_phone_language_region, ad);
507 }
508
509 static void
510 setting_phone_region_format_mouse_up_Gendial_list_radio_cb(void *data,
511                                                            Evas_Object *obj,
512                                                            void *event_info)
513 {
514         SETTING_TRACE_BEGIN;
515         setting_retm_if(data == NULL, "Data parameter is NULL");
516         setting_retm_if(event_info == NULL,
517                         "Invalid argument: event info is NULL");
518
519         Evas_Object *radio = (Evas_Object *) data;
520         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
521         elm_genlist_item_selected_set(item, 0);
522         Setting_GenGroupItem_Data *list_item =
523             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
524         SettingPhoneUG *ad = (SettingPhoneUG *) list_item->userdata;
525
526         SETTING_TRACE("region_keyStr = %s",
527                       ad->region_keyStr[list_item->chk_status]);
528         /*  if not change, return */
529         //if (ad->prev_region == list_item->chk_status) {
530         //      return;
531         //}
532         elm_radio_value_set(radio, list_item->chk_status);
533
534         ad->prev_region = list_item->chk_status;
535         SETTING_TRACE("cur_chk_region = %d", ad->prev_region);
536
537         char region[MAX_REGION_STRLEN] = {0,};
538         snprintf(region, MAX_REGION_STRLEN, "%s.UTF-8", ad->region_keyStr[ad->prev_region]);
539
540         int ret = setting_phone_region_format_set_dateformat(ad->region_keyStr[ad->prev_region], ad);
541         setting_retm_if(ret == SETTING_RETURN_FAIL, "[Error] set date format fail");
542
543         ret = vconf_set_str(VCONFKEY_REGIONFORMAT,region);
544         setting_retm_if(ret != 0, "[Error] set value of VCONFKEY_REGIONFORMAT fail");
545
546         /* after changed, go back to the previous page*/
547         setting_view_change(&setting_view_phone_region_format ,
548                                 &setting_view_phone_language_region, ad);
549 }
550
551 static int
552 setting_phone_region_format_compare_cb(const void *d1, const void *d2)
553 {
554         Setting_Region_Table *r1 = (Setting_Region_Table *) d1;
555         Setting_Region_Table *r2 = (Setting_Region_Table *) d2;
556         return safeStrCmp(r1->desc, r2->desc);
557 }
558
559 static int setting_phone_region_format_set_dateformat(const char *region,
560                                                       void *data)
561 {
562         /* SETTING_TRACE_BEGIN; */
563         setting_retvm_if(!region, SETTING_RETURN_FAIL,
564                          "region parameter is NULL");
565         setting_retvm_if(data == NULL, SETTING_RETURN_FAIL,
566                          "Data parameter is NULL");
567
568         SettingPhoneUG *ad = (SettingPhoneUG *) data;
569
570         char *ret_str = NULL;
571         UChar *uret = NULL;
572         UChar customSkeleton[SETTING_STR_SLP_LEN] = { 0, };
573         UErrorCode status = U_ZERO_ERROR;
574
575         UChar bestPattern[SETTING_STR_SLP_LEN] = { 0, };
576         char bestPatternString[SETTING_STR_SLP_LEN] = { 0, };
577         char *skeleton = DATA_FORMAT_SKELETON;
578
579         uret = u_uastrncpy(customSkeleton, skeleton, safeStrLen(skeleton));
580         setting_retvm_if(!uret, SETTING_RETURN_FAIL, "u_uastrncpy is fail");
581
582         if (ad->pattern_generator == NULL
583             || safeStrCmp(region, ad->prev_locale) != 0) {
584                 if (ad->pattern_generator != NULL) {
585                         udatpg_close(ad->pattern_generator);
586                         ad->pattern_generator = NULL;
587                 }
588                 ad->pattern_generator = udatpg_open(region, &status);
589         }
590
591         int32_t bestPatternCapacity =
592             (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0]));
593         (void)udatpg_getBestPattern(ad->pattern_generator, customSkeleton,
594                                     u_strlen(customSkeleton), bestPattern,
595                                     bestPatternCapacity, &status);
596
597         ret_str = u_austrcpy(bestPatternString, bestPattern);
598         setting_retvm_if(!ret_str, SETTING_RETURN_FAIL, "u_uastrncpy is fail");
599         /* SETTING_TRACE("bestPatternString : %s, bestPatternLength: %d", bestPatternString, bestPatternLength); */
600
601         int i = 0;
602         int j = 0;
603         int len = safeStrLen(bestPatternString);
604         char region_format[len];
605         /*  only save 'y', 'M', 'd' charactor */
606         for (; i < len; i++) {
607                 if (bestPatternString[i] == 'y' || bestPatternString[i] == 'M'
608                     || bestPatternString[i] == 'd') {
609                         region_format[j++] = bestPatternString[i];
610                 }
611         }
612         region_format[len] = '\0';
613
614         char *date_format_str[DATA_FORMAT_CATEGORY_NUM] = {
615                         "dMy", "Mdy", "yMd", "ydM" };
616         int date_format_vconf_value = DATA_FORMAT_DEFAULT;      /*  default is "Mdy" */
617         for (i = 0; i < DATA_FORMAT_CATEGORY_NUM; i++) {
618                 if (!safeStrCmp(region_format, date_format_str[i])) {
619                         date_format_vconf_value = i;
620                 }
621         }
622         SETTING_TRACE("bestPatternString : %s, format: %s, index: %d",
623                       bestPatternString, region_format,
624                       date_format_vconf_value);
625
626         int err = SETTING_RETURN_SUCCESS;
627         setting_set_int_slp_key(INT_SLP_SETTING_DATE_FORMAT,
628                                 date_format_vconf_value, &err);
629         setting_retvm_if(err == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL,
630                          "set vconf fail");
631         G_FREE(ad->prev_locale);
632         ad->prev_locale = (char *)g_strdup(region);
633         return SETTING_RETURN_SUCCESS;
634 }