2d4fe1ad5bacead6f3d8f27eefec149b05254e77
[apps/home/settings.git] / setting-font / src / setting-font-main.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-font-main.h>
22 #include <dd-deviced.h>
23 #include <fontconfig/fontconfig.h>
24 #include <unicode/uloc.h>
25 #include <libxml/xmlmemory.h>
26 #include <libxml/parser.h>
27 #include <Ecore_X.h>
28 #include <setting-font-font-size.h>
29
30
31 #define SETTING_FONT_MAX_LEN 10
32 #define FONT_BUF_SIZE 256
33
34 static int setting_font_main_create(void *cb);
35 static int setting_font_main_destroy(void *cb);
36 static int setting_font_main_update(void *cb);
37 static int setting_font_main_cleanup(void *cb);
38
39 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
40
41 setting_view setting_view_font_main = {
42         .create = setting_font_main_create,
43         .destroy = setting_font_main_destroy,
44         .update = setting_font_main_update,
45         .cleanup = setting_font_main_cleanup,
46 };
47 static int format_font_name_by_id(char *font_data, char *font_name_id, char *temp, int bufsize)
48 {
49         retvm_if(font_data == NULL, 0, "Invalid argument: event info is NULL");
50
51         char *pos = font_data;
52         char new_name[bufsize];
53         int i = 0;
54         int count = 0;
55         while (*pos != '\0') {
56                 /*SETTING_TRACE(">>>  %c", *pos); */
57                 if (*pos == ' ') {
58                         SETTING_TRACE(">>>  empty ' ' ");
59                         new_name[count] = '\\';
60                         count++;
61                         new_name[count] = ' ';
62                 } else {
63                         new_name[count] = font_data[i];
64                 }
65
66                 count++;
67                 pos++;
68                 i++;
69         }
70         new_name[count] = '\0';
71         char trans_font_type_name[FONT_BUF_SIZE] = {0,};
72         if (safeStrCmp(font_name_id, "IDS_ST_BODY_CHOCO_COOKY") == 0) {
73                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
74         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_COOL_JAZZ") == 0) {
75                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
76         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_FONTSTYLE_ROSEMARY") == 0) {
77                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
78         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME") == 0) {
79                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
80         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_MARUBERI_JPN_DCM") == 0) {
81                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
82         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_POP_JPN_DCM") == 0) {
83                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
84         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDMINCHO_JPN") == 0) {
85                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
86         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDRGOTHICM_JPN") == 0) {
87                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
88         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDGOTHIC_M_FONT") == 0) {
89                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
90         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_DEFAULT_FONT") == 0) {
91                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_DEFAULT_FONT"));
92         } else {
93                 snprintf(trans_font_type_name, bufsize, "%s", font_name_id);
94         }
95         snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
96         return 1;
97 }
98
99 char *_item_text_keystr2_get(void *data, Evas_Object *obj, const char *part)
100 {
101         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
102         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
103         char *ret_str = NULL;
104         if (!strcmp(part, "elm.text.main.left")) {
105                 if (item_data->keyStr2) {
106                         char temp[FONT_BUF_SIZE] = {0,};
107
108                         int ret = format_font_name_by_id(item_data->sub_desc, item_data->keyStr2, temp, FONT_BUF_SIZE);
109
110                         if (ret == 0) { /* error condition */
111                                 SETTING_TRACE_ERROR("Error condition font");
112                         }
113
114                         SETTING_TRACE_DEBUG("temp : %s", (char *)temp);
115                         ret_str = (char *)g_strdup(temp);
116                 }
117         }
118         /*SETTING_TRACE_END; */
119         return ret_str;
120 }
121
122
123
124
125 /**
126  * [API] get a font list from current system
127  * REFACTORING: move this feature to system-settings
128  */
129 static Eina_List *__setting_font_main_available_list_get()
130 {
131         SETTING_TRACE_BEGIN;
132         FcObjectSet *os = NULL;
133         FcFontSet *fs = NULL;
134         FcPattern *pat = NULL;
135         Eina_List *list = NULL;
136         FcConfig *font_config = NULL;
137
138         font_config = FcInitLoadConfigAndFonts();
139
140         setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts");
141
142
143         char *locale = setlocale(0, NULL);
144
145         pat = FcPatternCreate();
146
147         os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0);
148
149         if (os) {
150                 fs = FcFontList(font_config, pat, os);
151                 FcObjectSetDestroy(os);
152                 os = NULL;
153         }
154
155         if (pat) {
156                 FcPatternDestroy(pat);
157                 pat = NULL;
158         }
159
160         if (fs) {
161                 int j;
162                 SETTING_TRACE_DEBUG("fs->nfont = %d", fs->nfont);
163
164                 for (j = 0; j < fs->nfont; j++) {
165
166                         FcChar8 *family = NULL;
167                         FcChar8 *file = NULL;
168                         if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
169                                 /*SETTING_TRACE_DEBUG("FC_FILE : %s\n", file); */
170                                 int preload_path_len = safeStrLen(SETTING_FONT_PRELOAD_FONT_PATH);
171                                 int download_path_len = safeStrLen(SETTING_FONT_DOWNLOADED_FONT_PATH);
172                                 if (!safeStrNCmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) ||
173                                     !safeStrNCmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len)) {
174                                         char *family_result = NULL;
175                                         FcChar8 *lang = NULL;
176                                         int id = 0;
177                                         if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
178                                                 break;
179                                         }
180                                         if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
181                                                 break;
182                                         }
183                                         family_result = (char *)family;
184
185                                         /* Find proper family name for current locale. */
186                                         while (locale && family && lang) {
187                                                 if (!strncmp(locale, (char *)lang, strlen((char *)lang))) {
188                                                         family_result = (char *)family;
189                                                         break;
190                                                 }
191
192                                                 /* I will set english as default family language. */
193                                                 /* If there is no proper family language for current locale, */
194                                                 /* we have to show the english family name. */
195                                                 if (!strcmp(lang, "en")) {
196                                                         family_result = (char *)family;
197                                                 }
198                                                 id++;
199                                                 if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
200                                                         break;
201                                                 }
202                                                 if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
203                                                         break;
204                                                 }
205                                         }
206                                         if (family_result && eina_list_data_find(list, family_result) == NULL) {
207                                                 list = eina_list_append(list, family_result);
208                                                 SETTING_TRACE_DEBUG("-------- ADDED FONT - family = %s", family_result);
209                                                 /* list = eina_list_append(list, family_result); */
210                                                 /* for TEST because there's 1 font on target. */
211                                         }
212                                 }
213                         }
214                 }
215                 FcFontSetDestroy(fs);
216                 fs = NULL;
217         }
218
219         FcConfigDestroy(font_config);
220         font_config = NULL;
221         return list;
222 }
223 #if 0
224 static void __setting_font_main_genlist_sel_cb(void *data, Evas_Object *obj, void *event_info)
225 {
226         /*error check */
227         setting_retm_if(data == NULL, "Data parameter is NULL");
228
229         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
230         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
231         elm_genlist_item_selected_set(item, 0);
232         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
233
234         SettingFontUG *ad = (SettingFontUG *)data;
235
236         if (ad->font_size == list_item) {
237                 setting_view_change(&setting_view_font_main, &setting_view_font_font_size, ad);
238         }
239 }
240 #endif
241 int get_font_name_id(char *font_data, char *temp, int bufsize)
242 {
243         /*SETTING_TRACE("font data : %s", (char*)font_data); */
244         /*char trans_font_type_name[FONT_BUF_SIZE] = {0,}; */
245         /*SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name); */
246         if (safeStrCmp(font_data, "Choco cooky") == 0) {
247                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_CHOCO_COOKY");
248         } else if (safeStrCmp(font_data, "Cool jazz") == 0) {
249                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_COOL_JAZZ");
250         } else if (safeStrCmp(font_data, "Rosemary") == 0) {
251                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_FONTSTYLE_ROSEMARY");
252         } else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
253                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME");
254         } else if (safeStrCmp(font_data, "Maruberi") == 0) {
255                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_MARUBERI_JPN_DCM");
256         } else if (safeStrCmp(font_data, "POP") == 0) {
257                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_POP_JPN_DCM");
258         } else if (safeStrCmp(font_data, "UDMincho") == 0) {
259                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDMINCHO_JPN");
260         } else if (safeStrCmp(font_data, "UDRGothic") == 0) {
261                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDRGOTHICM_JPN");
262         } else if (safeStrCmp(font_data, "UDGothic") == 0) {
263                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDGOTHIC_M_FONT");
264         } else {
265                 snprintf(temp, bufsize, "%s", font_data);
266         }
267         return 1;
268 }
269
270
271 int get_font_name_str(char *font_type_name, char *trans_font_type_name, int bufsize)
272 {
273         /*SETTING_TRACE_BEGIN; */
274         if (safeStrCmp(font_type_name, "Choco cooky") == 0) {
275                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
276                 /*SETTING_TRACE("%s", trans_font_type_name); */
277         } else if (safeStrCmp(font_type_name, "Cool jazz") == 0) {
278                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
279                 /*SETTING_TRACE("%s", trans_font_type_name); */
280         } else if (safeStrCmp(font_type_name, "Rosemary") == 0) {
281                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
282                 /*SETTING_TRACE("%s", trans_font_type_name); */
283         } else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0) {
284                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
285                 /*SETTING_TRACE("%s", trans_font_type_name); */
286         } else if (safeStrCmp(font_type_name, "Maruberi") == 0) {
287                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
288                 /*SETTING_TRACE("%s", trans_font_type_name); */
289         } else if (safeStrCmp(font_type_name, "POP") == 0) {
290                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
291                 /*SETTING_TRACE("%s", trans_font_type_name); */
292         } else if (safeStrCmp(font_type_name, "UDMincho") == 0) {
293                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
294                 /*SETTING_TRACE("%s", trans_font_type_name); */
295         } else if (safeStrCmp(font_type_name, "UDRGothic") == 0) {
296                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
297                 /*SETTING_TRACE("%s", trans_font_type_name); */
298         } else {
299                 snprintf(trans_font_type_name, bufsize, "%s", font_type_name);
300                 /*SETTING_TRACE("%s", trans_font_type_name); */
301         }
302         return 1;
303 }
304 void format_default_font(char *font_data, char *temp, int bufsize, char *real_value)
305 {
306         /*SETTING_TRACE("real_value : %s", (char*)real_value); */
307
308         char *pos = real_value;
309         char new_name[bufsize];
310         int i = 0;
311         int count = 0;
312         while (*pos != '\0') {
313                 /*SETTING_TRACE(">>>  %c", *pos); */
314                 if (*pos == ' ') {
315                         /*SETTING_TRACE(">>>  empty ' ' "); */
316                         new_name[count] = '\\';
317                         count++;
318                         new_name[count] = ' ';
319                 } else {
320                         new_name[count] = real_value[i];
321                 }
322
323                 count++;
324                 pos++;
325                 i++;
326         }
327         new_name[count] = '\0';
328         snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, font_data);
329 }
330
331 int get_font_name_tag(char *font_data, char *temp, int bufsize)
332 {
333         /*SETTING_TRACE("font data : %s", (char*)font_data); */
334
335         char *pos = font_data;
336         char new_name[bufsize];
337         int i = 0;
338         int count = 0;
339         while (*pos != '\0') {
340                 /*SETTING_TRACE(">>>  %c", *pos); */
341                 if (*pos == ' ') {
342                         SETTING_TRACE(">>>  empty ' ' ");
343                         new_name[count] = '\\';
344                         count++;
345                         new_name[count] = ' ';
346                 } else {
347                         new_name[count] = font_data[i];
348                 }
349
350                 count++;
351                 pos++;
352                 i++;
353         }
354         new_name[count] = '\0';
355
356         char trans_font_type_name[FONT_BUF_SIZE] = {0,};
357         /*SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name); */
358         if (safeStrCmp(font_data, "Choco cooky") == 0) {
359                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
360         } else if (safeStrCmp(font_data, "Cool jazz") == 0) {
361                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
362         } else if (safeStrCmp(font_data, "Rosemary") == 0) {
363                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
364         } else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
365                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
366         } else if (safeStrCmp(font_data, "Maruberi") == 0) {
367                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
368         } else if (safeStrCmp(font_data, "POP") == 0) {
369                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
370         } else if (safeStrCmp(font_data, "UDMincho") == 0) {
371                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
372         } else if (safeStrCmp(font_data, "UDRGothic") == 0) {
373                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
374         } else if (safeStrCmp(font_data, "UDGothic") == 0) {
375                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
376         } else {
377                 snprintf(trans_font_type_name, bufsize, "%s", font_data);
378         }
379
380         /* */
381         snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
382         return 1;
383 }
384
385 static void __setting_font_main_genlist_item_create(void *data)
386 {
387         SETTING_TRACE_BEGIN;
388         setting_retm_if(NULL == data, "data is NULL");
389
390         SettingFontUG *ad = (SettingFontUG *)data;
391         Elm_Object_Item *item = NULL;
392         setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2_font_size));
393         ad->itc_1text_1icon_2_font_size.func.text_get = _item_text_font_size_keystr2_get;
394         if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SEL_VIEW_APPCONTROL) {    /* font type only */
395                 /* [UI] Font Type */
396                 item = elm_genlist_item_append(ad->genlist, &itc_seperator, NULL, NULL,
397                                                ELM_GENLIST_ITEM_NONE, NULL, NULL);
398                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
399
400                 char *font_type_name = NULL;
401                 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
402                 if (ret != 0) {
403                         SETTING_TRACE_ERROR("system-setting call failed with error code %d", ret);
404                 }
405                 SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
406
407 #if 0
408                 char trans_font_type_name[256] = {0,};
409                 if (safeStrCmp(font_type_name, "Choco cooky") == 0)
410                         snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
411                 else if (safeStrCmp(font_type_name, "Cool jazz") == 0)
412                         snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
413                 else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0)
414                         snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
415                 else
416                         snprintf(trans_font_type_name, 256, "%s", font_type_name);
417 #else
418                 char *default_font_name = NULL;
419                 default_font_name = _get_default_font();
420                 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
421                 if (!safeStrCmp(default_font_name, font_type_name)) {
422                         snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
423                 } else {
424                         ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
425                 }
426 #endif
427                 SETTING_TRACE_DEBUG("current font : %s, trans font name: %s", font_type_name, trans_font_type_name);
428
429                 ad->font_type = setting_create_Gendial_exp_parent_field(ad->genlist,
430                                                                         &(ad->itc_2text_3_parent),
431                                                                         NULL, NULL,
432                                                                         SWALLOW_Type_INVALID,
433                                                                         SETTING_FONT_TYPE_STR,
434                                                                         trans_font_type_name,
435                                                                         SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_TOP);
436                 if (ad->font_type) {
437                         ad->font_type->userdata = ad;
438                 } else {
439                         SETTING_TRACE_ERROR("ad->font_type is NULL");
440                 }
441                 G_FREE(ad->font_name);
442                 ad->font_name = g_strdup(font_type_name);
443                 G_FREE(font_type_name);
444         }
445
446         if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) {   /* font size only */
447                 int err = -1;
448                 /* [UI] Font Size */
449                 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &ad->ret_font_size, &err);
450                 if (ret != 0) {
451                         SETTING_TRACE_ERROR("get vconf failed");
452                 }
453
454                 ad->font_size = setting_create_Gendial_exp_parent_field(ad->genlist, &(ad->itc_2text_3_parent),
455                                                                         NULL,
456                                                                         NULL, SWALLOW_Type_INVALID,
457                                                                         SETTING_FONT_SIZE_STR,
458                                                                         __get_font_size_str(ad->ret_font_size),
459                                                                         SETTING_GROUP_STYLE_CENTER, SETTING_GROUP_STYLE_BOTTOM);
460                 if (ad->font_size) {
461                         ad->font_size->userdata = ad;
462                         ad->font_size->group_style = SETTING_GROUP_STYLE_BOTTOM;
463                 } else {
464                         SETTING_TRACE_ERROR("ad->font_size is NULL");
465                 }
466
467 #if DISABlED_CODE
468                 ADD_GL_HELP(ad->genlist, SETTING_FONT_SIZE_DESC);
469 #endif
470         }
471
472         if (ad->font_expand_state == FONT_EXPAND_STATE_FONT_TYPE) {
473                 if (ad->font_type && ad->font_type->item) {
474                         elm_genlist_item_expanded_set(ad->font_type->item, TRUE);
475                 }
476         } else if (ad->font_expand_state == FONT_EXPAND_STATE_FONT_SIZE) {
477                 if (ad->font_size && ad->font_size->item) {
478                         elm_genlist_item_expanded_set(ad->font_size->item, TRUE);
479                 }
480         }
481 }
482
483 static void __setting_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
484 {
485         SettingFontUG *ad = (SettingFontUG *) data;
486         SETTING_TRACE("send ug_destroy_me by callback");
487         if (ad->main_popup) {
488                 evas_object_del(ad->main_popup);
489                 ad->main_popup = NULL;
490         }
491         ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
492         /*fix PLM issue P130606-3323, per tester's request, need to keep in current font veiw after change the font type*/
493         /*ug_destroy_me(ad->ug); */
494         if (ad->font_type && ad->font_type->item) {
495                 elm_genlist_item_expanded_set(ad->font_type->item, FALSE);
496         }
497 }
498
499 static Eina_Bool __font_type_change_call(void *data)
500 {
501         SETTING_TRACE_BEGIN;
502         SettingFontUG *ad = (SettingFontUG *) data;
503
504         /* logic */
505         system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name);
506
507         /* finalize */
508         ad->font_type_timer = NULL;
509         return ECORE_CALLBACK_CANCEL;
510 }
511
512 #if 0
513 static void __setting_font_main_popup_cb(void *data, Evas_Object *obj, void *event_info)
514 {
515         SETTING_TRACE_BEGIN;
516         setting_retm_if(data == NULL, "Data parameter is NULL");
517         SettingFontUG *ad = (SettingFontUG *) data;
518
519         switch (btn_type(obj)) {
520                 case POPUP_RESPONSE_OK: {
521                                 /* extract font name from tag mixed string */
522                                 SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
523                                 SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
524
525                                 /* set font name to font main and font config */
526                                 /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
527                                 /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
528                                 ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
529                                 elm_object_item_data_set(ad->font_type->item, ad->font_type);
530                                 elm_genlist_item_update(ad->font_type->item);
531                                 /* sub - descc */
532                                 char *font_name = g_strdup(ad->subitem->sub_desc);
533
534                                 ad->prev_font = ad->subitem->chk_status;
535                                 G_FREE(ad->font_name);
536                                 ad->font_name = (char *)g_strdup(_(font_name));
537                                 SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
538                                 elm_radio_value_set(ad->subitem->rgd, ad->subitem->chk_status);
539                                 /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
540                                 if (ad->font_type_list != NULL) {
541                                         Setting_GenGroupItem_Data *font_type_subitem = NULL;
542                                         EINA_LIST_FREE(ad->font_type_list, font_type_subitem);
543                                         ad->font_type_list = NULL;
544                                 }
545 #if 0
546                                 /*vconf_set_str(VCONFKEY_SETAPPL_SETTING_FONT_NAME, font_name); */
547                                 system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_name);
548                                 G_FREE(font_name);
549 #endif
550
551                                 /* waiting */
552                                 /*Due to long time taken by font Setting, add the block code when font is Setting. */
553                                 if (ad->main_popup) {
554                                         evas_object_del(ad->main_popup);
555                                         ad->main_popup = NULL;
556                                 }
557
558                                 /* font type popup */
559                                 ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
560                                                                                        PROGRESSBAR_STYLE,
561                                                                                        NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE);  /* 3 seconds to wait in maximum */
562
563                                 /* ecore timer for change actual font */
564                                 ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_type_change_call, ad);
565                                 break;
566                         }
567                 case POPUP_RESPONSE_CANCEL: {
568                                 elm_radio_value_set(ad->subitem->rgd, ad->prev_font);
569                                 if (ad->main_popup) {
570                                         evas_object_del(ad->main_popup);
571                                         ad->main_popup = NULL;
572                                 }
573                                 ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
574                                 break;
575                         }
576                 default: {
577                                 break;
578                         }
579         }
580 }
581
582 static void __setting_font_main_popup(void *data)
583 {
584         SETTING_TRACE_BEGIN;
585         setting_retm_if(data == NULL, "Data parameter is NULL");
586         SettingFontUG *ad = (SettingFontUG *) data;
587
588         char temp[FONT_BUF_SIZE] = {0,};
589         format_font_name_by_id(ad->subitem->sub_desc, ad->subitem->keyStr2, temp, FONT_BUF_SIZE);
590         char popup_desc[SETTING_STR_SLP_LEN + 1] = {0,};
591         snprintf(popup_desc, SETTING_STR_SLP_LEN, _(SETTING_FONT_POPUP_DESC), temp);
592         if (!ad->main_popup) {
593                 ad->main_popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
594                                                                popup_desc,
595                                                                __setting_font_main_popup_cb, 0,
596                                                                2, _("IDS_COM_SK_YES"), _("IDS_COM_SK_NO"));
597         }
598 }
599 #endif
600
601 /**
602  * [UI][expandable list][event handler:selection][font change]
603  */
604 void __setting_font_main_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
605 {
606         SETTING_TRACE_BEGIN;
607         /* error check */
608         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
609         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
610         elm_genlist_item_selected_set(subitem, 0);
611         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
612         ret_if(NULL == data_subItem);
613
614         SettingFontUG *ad = (SettingFontUG *) data;
615
616
617         /*  if not change, return */
618         if (ad->prev_font == data_subItem->chk_status) {
619                 SETTING_TRACE("NOT CHANGED ");
620                 return;
621         }
622         if (ad->font_change_status == SELECTED_FONT_CHANGE_IN_PROCESS) {
623                 return;
624         }
625         ad->font_change_status = SELECTED_FONT_CHANGE_IN_PROCESS;
626         ad->subitem = data_subItem;
627         /* Fix PLM P131016-04680
628           when user check the option, make sure the radio button is checked for prev_font font item
629           the radio of new font item will be checked when user seleck "ok" on popup*/
630         elm_radio_value_set(ad->subitem->rgd, data_subItem->chk_status);
631
632         /* extract font name from tag mixed string */
633         SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
634         SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
635
636         /* set font name to font main and font config */
637         /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
638         /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
639         ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
640         elm_object_item_data_set(ad->font_type->item, ad->font_type);
641         elm_genlist_item_update(ad->font_type->item);
642         /* sub - descc */
643         char *font_name = g_strdup(ad->subitem->sub_desc);
644
645         ad->prev_font = ad->subitem->chk_status;
646         G_FREE(ad->font_name);
647         ad->font_name = (char *)g_strdup(_(font_name));
648         SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
649
650         /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
651         if (ad->font_type_list != NULL) {
652                 eina_list_free(ad->font_type_list);
653                 ad->font_type_list = NULL;
654         }
655
656         /* waiting */
657         /*Due to long time taken by font Setting, add the block code when font is Setting. */
658         if (ad->main_popup) {
659                 evas_object_del(ad->main_popup);
660                 ad->main_popup = NULL;
661         }       /* font type popup */
662         ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
663                                                                PROGRESSBAR_STYLE,
664                                                                NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE);  /* 3 seconds to wait in maximum */
665
666         /* ecore timer for change actual font */
667         ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_type_change_call, ad);
668 }
669
670 /**
671 * @brief expandable list handler for font-type
672 *
673 * @param data
674 * @param obj
675 * @param event_info
676 */
677 static void __setting_font_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
678 {
679         ret_if(NULL == data || NULL == event_info);
680         SETTING_TRACE_BEGIN;
681         SettingFontUG *ad = (SettingFontUG *) data;
682         Elm_Object_Item *parentItem = event_info;       /* parent item */
683         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
684         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
685
686         Evas_Object *rgd = NULL;
687         int i = 0;
688         int matched_font = -1;
689         G_FREE(ad->font_name);
690         int ret = 0;
691         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &(ad->font_name));
692         if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
693                 SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d", ret);
694                 ad->font_name = _get_default_font();
695         }
696         if (data_parentItem == ad->font_type) {
697                 rgd = elm_radio_add(scroller);
698                 elm_radio_value_set(rgd, -1);
699
700                 char *default_font_name = NULL;
701                 default_font_name = _get_default_font();
702                 if (NULL != default_font_name) {
703                         /*char font_name_dispaly[FONT_BUF_SIZE] = {0,}; */
704                         SETTING_TRACE_DEBUG("default_font_name:%s", default_font_name);
705                         /*format_default_font(SETTING_DEFAULT_FONT_TYPE, font_name_dispaly,FONT_BUF_SIZE, default_font_name); */
706                         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
707                         setting_retm_if(!item_data, "calloc failed");
708                         item_data->keyStr2 = (char *)g_strdup(SETTING_DEFAULT_FONT_TYPE);/*for display */
709                         item_data->keyStr = (char *)g_strdup(_(SETTING_DEFAULT_FONT_TYPE));/*for tts reading */
710                         item_data->swallow_type = SWALLOW_Type_1RADIO;
711                         item_data->chk_status = i;
712                         item_data->rgd = rgd;
713                         item_data->chk_change_cb = NULL;
714                         item_data->group_style = SETTING_GROUP_STYLE_CENTER;
715                         item_data->sub_desc = strdup(default_font_name); /*the real font type value */
716                         item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2), item_data, parentItem, ELM_GENLIST_ITEM_NONE, __setting_font_main_sub_list_sel_cb, ad);
717
718                         if (item_data) {
719                                 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
720                                 item_data->userdata = ad;
721                                 if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
722                                         matched_font = i;
723                                 }
724                         }
725                         i++;
726                         ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
727                 }
728
729                 Eina_List *font_list = NULL;
730                 Eina_List *l = NULL;
731                 FcChar8 *font_data = NULL;
732                 font_list = __setting_font_main_available_list_get();
733                 EINA_LIST_FOREACH(font_list, l, font_data) {
734                         if (safeStrCmp(default_font_name, (char *)font_data) != 0) {
735                                 char keyStr[FONT_BUF_SIZE] = {0,};
736                                 get_font_name_str((char *)font_data, keyStr, FONT_BUF_SIZE);
737                                 char temp[FONT_BUF_SIZE] = {0,};
738                                 /*int ret = get_font_name_tag(font_data, temp, FONT_BUF_SIZE); */
739                                 get_font_name_id((char *)font_data, temp, FONT_BUF_SIZE);
740                                 SETTING_TRACE_DEBUG("font data : %s", (char *)font_data);
741                                 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
742                                 setting_retm_if(!item_data, "calloc failed");
743                                 item_data->keyStr2 = (char *)g_strdup(temp);/*for display */
744                                 item_data->keyStr = (char *)g_strdup(keyStr);/*for tts reading */
745                                 item_data->swallow_type = SWALLOW_Type_1RADIO;
746                                 item_data->chk_status = i;
747                                 item_data->rgd = rgd;
748                                 item_data->chk_change_cb = NULL;
749                                 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
750                                 item_data->sub_desc = strdup((char *)font_data);
751                                 item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2), item_data, parentItem, ELM_GENLIST_ITEM_NONE, __setting_font_main_sub_list_sel_cb, ad);
752
753                                 if (item_data) {
754                                         item_data->userdata = ad;
755                                         /*if (!safeStrCmp(ad->font_name, (const char*)font_data)) { */
756                                         if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
757                                                 matched_font = i;
758                                         }
759                                 }
760                                 i++;
761                                 ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
762                         }
763                 }
764
765                 /* update check status */
766                 if (matched_font != -1) {
767                         elm_radio_value_set(rgd, matched_font);
768                 }
769
770                 ad->prev_font = matched_font;
771                 G_FREE(default_font_name);
772         } else if (data_parentItem == ad->font_size) {
773                 /* [UI] create the font list */
774                 ad->size_rdg = elm_radio_add(scroller);
775                 elm_radio_state_value_set(ad->size_rdg, -1);
776
777                 int idx = 0;
778
779                 while (font_size_table[idx].key_font_name) {
780                         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
781                         setting_retm_if(!item_data, "calloc failed");
782                         item_data->keyStr2 = (char *)g_strdup(font_size_table[idx].key_font_name);/*setting_customize_text(_(font_size_table[idx].key_font_name), convert_font_size(font_size_table[idx].font_size),NULL,NULL);//for display */
783                         item_data->keyStr = (char *)g_strdup(_(font_size_table[idx].key_font_name));/*for tts feature; */
784                         item_data->swallow_type = SWALLOW_Type_1RADIO_1LABLE;
785                         item_data->chk_status = font_size_table[idx].font_size;
786                         item_data->chk_change_cb = NULL;
787                         item_data->rgd = ad->size_rdg;
788                         item_data->userdata = ad;
789                         if (idx == sizeof(font_size_table) / sizeof(font_size_table[0]) - 2) {
790                                 item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
791                         } else {
792                                 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
793                         }
794
795                         item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2_font_size), item_data, parentItem,
796                                                                   ELM_GENLIST_ITEM_NONE, setting_font_font_size_list_mouse_up_cb, ad->size_rdg);
797
798                         idx++;
799                 }
800                 setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
801         }
802 }
803 static void __setting_font_main_vconf_change_cb(keynode_t *key, void *data)
804 {
805         SETTING_TRACE_BEGIN;
806         setting_retm_if(NULL == key, "key is NULL");
807         setting_retm_if(NULL == data, "data is NULL");
808         SettingFontUG *ad = (SettingFontUG *)data;
809
810         char *vconf_name = vconf_keynode_get_name(key);
811
812         if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)) {
813
814
815                 char *font_type_name = NULL;
816                 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
817                 if (ret != 0) {
818                         SETTING_TRACE("system-setting call failed with error code %d", ret);
819                 }
820                 SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
821                 char *default_font_name = NULL;
822                 default_font_name = _get_default_font();
823                 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
824                 if (!safeStrCmp(default_font_name, font_type_name)) {
825                         snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
826                 } else {
827                         ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
828                 }
829
830                 if (ad->font_type) {
831                         G_FREE(ad->font_type->sub_desc);
832                         ad->font_type->sub_desc = (char *)g_strdup(trans_font_type_name);
833                         elm_object_item_data_set(ad->font_type->item, ad->font_type);
834                         elm_genlist_item_update(ad->font_type->item);
835                         SETTING_TRACE("ad->font_type->sub_desc:%s", trans_font_type_name);
836
837                         if (elm_genlist_item_expanded_get(ad->font_type->item)) {
838                                 Eina_List *l = NULL;
839                                 Setting_GenGroupItem_Data *font_type_subitem;
840                                 EINA_LIST_FOREACH(ad->font_type_list, l, font_type_subitem) {
841                                         if (font_type_subitem && !safeStrCmp(font_type_subitem->sub_desc, font_type_name)) {
842
843                                                 if (font_type_subitem && font_type_subitem->rgd) {
844                                                         elm_radio_value_set(font_type_subitem->rgd, font_type_subitem->chk_status);
845                                                         if (ad->font_change_status != SELECTED_FONT_CHANGE_IN_PROCESS) {
846                                                                 ad->subitem = font_type_subitem;
847                                                         }
848                                                 }
849                                                 break;
850
851                                         }
852                                 }
853                         }
854                 }
855         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
856                 int err = -1;
857                 /* [UI] Font Size */
858                 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &ad->ret_font_size, &err);
859                 if (ret != 0) {
860                         SETTING_TRACE_ERROR("get vconf failed");
861                 }
862                 if (ad->font_size) {
863                         G_FREE(ad->font_size->sub_desc);
864                         ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(ad->ret_font_size));
865                         elm_object_item_data_set(ad->font_size->item, ad->font_size);
866                         elm_genlist_item_update(ad->font_size->item);
867
868                         if (elm_genlist_item_expanded_get(ad->font_size->item)) {
869                                 if (ad->size_rdg) {
870                                         setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
871                                 }
872                         }
873                 }
874
875         } else {
876                 SETTING_TRACE_ERROR("vconf_name is error");
877         }
878         SETTING_TRACE_END;
879 }
880
881
882 /* ***************************************************
883  *
884  *basic func
885  *
886  ***************************************************/
887 static int setting_font_main_create(void *cb)
888 {
889         SETTING_TRACE_BEGIN;
890         /* error check */
891         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
892
893         SettingFontUG *ad = (SettingFontUG *) cb;
894         setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2));
895         ad->itc_1text_1icon_2.func.text_get = _item_text_keystr2_get;
896
897         retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
898                  "win_main_layout is NULL");
899         ad->font_change_status = SELECTED_FONT_CHANGE_NONE;
900         ad->ly_main =
901             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
902                                                    ad->win_get,
903                                                    "IDS_COM_BODY_FONT",
904                                                    _("IDS_COM_BODY_BACK"),
905                                                    NULL,
906                                                    (setting_call_back_func)__setting_font_main_click_softkey_back_cb,
907                                                    NULL,
908                                                    ad, &ad->genlist, &ad->navibar);
909         ad->navi_it_font = elm_naviframe_top_item_get(ad->navibar);
910         elm_genlist_mode_set(ad->genlist, ELM_LIST_COMPRESS);
911         evas_object_smart_callback_add(ad->genlist, "realized", __gl_realized_cb, ad);
912
913         setting_enable_expandable_genlist(ad->genlist, ad, __setting_font_main_exp_cb, NULL);
914         int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
915                                            __setting_font_main_vconf_change_cb, ad);
916         if (ret != 0) {
917                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
918         }
919         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
920                                        __setting_font_main_vconf_change_cb, ad);
921         if (ret != 0) {
922                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
923         }
924         __setting_font_main_genlist_item_create(ad);
925
926         evas_font_reinit();
927
928         setting_view_font_main.is_create = 1;
929         return SETTING_RETURN_SUCCESS;
930 }
931
932 static int setting_font_main_destroy(void *cb)
933 {
934         SETTING_TRACE_BEGIN;
935         /* error check */
936         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
937
938         SettingFontUG *ad = (SettingFontUG *) cb;
939         int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
940                                            __setting_font_main_vconf_change_cb);
941         if (ret != 0) {
942                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
943         }
944         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
945                                        __setting_font_main_vconf_change_cb);
946         if (ret != 0) {
947                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
948         }
949         if (ad->font_name) {
950                 G_FREE(ad->font_name);
951                 ad->font_name = NULL;
952         }
953
954         if (ad->main_popup) {
955                 evas_object_del(ad->main_popup);
956                 ad->main_popup = NULL;
957         }
958
959         if (ad->ly_main != NULL) {
960                 evas_object_del(ad->ly_main);
961                 ad->ly_main = NULL;
962         }
963         if (ad->navi_it_font != NULL) {
964                 ad->navi_it_font = NULL;
965         }
966         if (ad->font_type_list != NULL) {
967                 eina_list_free(ad->font_type_list);
968                 ad->font_type_list = NULL;
969         }
970
971         setting_view_font_main.is_create = 0;
972         SETTING_TRACE_END;
973         return SETTING_RETURN_SUCCESS;
974 }
975
976 static int setting_font_main_update(void *cb)
977 {
978         SETTING_TRACE_BEGIN;
979         /* error check */
980         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
981
982         SettingFontUG *ad = (SettingFontUG *) cb;
983
984         if (ad->ly_main != NULL) {
985                 evas_object_show(ad->ly_main);
986
987                 int value = -1;
988                 int err = -1;
989                 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
990                 if (ret != 0) {
991                         SETTING_TRACE_ERROR("get vconf failed");
992                 }
993
994                 if (ad->font_size) {
995                         G_FREE(ad->font_size->sub_desc);
996                         ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(value));
997                         elm_object_item_data_set(ad->font_size->item, ad->font_size);
998                         elm_genlist_item_update(ad->font_size->item);
999                 }
1000                 /* setting_font_update_vconf_key(ad, SETTING_VCONF_INT_TYPE, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL); */
1001         }
1002         if (ad->font_type) {
1003                 elm_genlist_item_update(ad->font_type->item);
1004         }
1005         return SETTING_RETURN_SUCCESS;
1006 }
1007
1008 static int setting_font_main_cleanup(void *cb)
1009 {
1010         /* error check */
1011         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1012
1013         SettingFontUG *ad = (SettingFontUG *) cb;
1014
1015         if (ad->ly_main != NULL) {
1016                 evas_object_hide(ad->ly_main);
1017         }
1018
1019         return SETTING_RETURN_SUCCESS;
1020 }
1021
1022 /* ***************************************************
1023  *
1024  *call back func
1025  *
1026  ***************************************************/
1027
1028 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
1029 {
1030         SETTING_TRACE_BEGIN;
1031         /* error check */
1032         retv_if(data == NULL, EINA_FALSE);
1033
1034         SettingFontUG *ad = (SettingFontUG *) data;
1035
1036         if (ad->viewmode == FONT_SEL_VIEW_APPCONTROL) {
1037                 app_control_h svc;
1038                 if (app_control_create(&svc)) {
1039                         return EINA_FALSE;
1040                 }
1041
1042                 app_control_add_extra_data(svc, "category", "FontType");
1043                 app_control_add_extra_data(svc, "FontType", ad->font_name);
1044
1045                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontType");
1046                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontType", ad->font_name);
1047
1048
1049                 ug_send_result(ad->ug, svc);
1050                 app_control_destroy(svc);
1051         } else if (ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) {
1052                 app_control_h svc;
1053
1054                 int err;
1055                 int ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, ad->ret_font_size, &err);
1056                 setting_retvm_if(ret == -1, EINA_FALSE, "Failed to set vconf");
1057
1058                 if (app_control_create(&svc)) {
1059                         return EINA_FALSE;
1060                 }
1061
1062                 char font_size[SETTING_FONT_MAX_LEN] = {0,};
1063                 snprintf(font_size, SETTING_FONT_MAX_LEN, "%d", ad->ret_font_size);
1064
1065                 app_control_add_extra_data(svc, "category", "FontSize");
1066                 app_control_add_extra_data(svc, "FontSize", font_size);
1067
1068                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontSize");
1069                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontSize", font_size);
1070
1071
1072                 ug_send_result(ad->ug, svc);
1073                 app_control_destroy(svc);
1074         }
1075         /* Send destroy request */
1076         ug_destroy_me(ad->ug);
1077         return EINA_FALSE;
1078 }