tizen 2.3.1 release
[apps/home/settings.git] / setting-font / src / setting-font-main.c
old mode 100755 (executable)
new mode 100644 (file)
index 9101210..2d4fe1a
@@ -1,27 +1,32 @@
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.0 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://floralicense.org/license/
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
+ * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 #include <setting-font-main.h>
-#include <sysman.h>
+#include <dd-deviced.h>
 #include <fontconfig/fontconfig.h>
 #include <unicode/uloc.h>
 #include <libxml/xmlmemory.h>
 #include <libxml/parser.h>
 #include <Ecore_X.h>
-#include <system_settings.h>
+#include <setting-font-font-size.h>
+
 
 #define SETTING_FONT_MAX_LEN 10
 #define FONT_BUF_SIZE 256
@@ -31,8 +36,7 @@ static int setting_font_main_destroy(void *cb);
 static int setting_font_main_update(void *cb);
 static int setting_font_main_cleanup(void *cb);
 
-static void __setting_font_main_click_softkey_back_cb(void *data, Evas_Object *obj,
-                                       void *event_info);
+static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
 
 setting_view setting_view_font_main = {
        .create = setting_font_main_create,
@@ -40,45 +44,91 @@ setting_view setting_view_font_main = {
        .update = setting_font_main_update,
        .cleanup = setting_font_main_cleanup,
 };
+static int format_font_name_by_id(char *font_data, char *font_name_id, char *temp, int bufsize)
+{
+       retvm_if(font_data == NULL, 0, "Invalid argument: event info is NULL");
 
+       char *pos = font_data;
+       char new_name[bufsize];
+       int i = 0;
+       int count = 0;
+       while (*pos != '\0') {
+               /*SETTING_TRACE(">>>  %c", *pos); */
+               if (*pos == ' ') {
+                       SETTING_TRACE(">>>  empty ' ' ");
+                       new_name[count] = '\\';
+                       count++;
+                       new_name[count] = ' ';
+               } else {
+                       new_name[count] = font_data[i];
+               }
 
-/**
- * [API] font-size
- */
-static char* __setting_font_main_get_font_size(int value)
+               count++;
+               pos++;
+               i++;
+       }
+       new_name[count] = '\0';
+       char trans_font_type_name[FONT_BUF_SIZE] = {0,};
+       if (safeStrCmp(font_name_id, "IDS_ST_BODY_CHOCO_COOKY") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_COOL_JAZZ") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_FONTSTYLE_ROSEMARY") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_MARUBERI_JPN_DCM") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_POP_JPN_DCM") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDMINCHO_JPN") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDRGOTHICM_JPN") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDGOTHIC_M_FONT") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
+       } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_DEFAULT_FONT") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_DEFAULT_FONT"));
+       } else {
+               snprintf(trans_font_type_name, bufsize, "%s", font_name_id);
+       }
+       snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
+       return 1;
+}
+
+char *_item_text_keystr2_get(void *data, Evas_Object *obj, const char *part)
 {
-       const char* font_size_arr[] = {
-                                       _("IDS_ST_BODY_SMALL_M_TEXTSIZE"), // 0
-                                       _("IDS_ST_BODY_NORMAL_T_PROFILE"), // 1
-                                       _("IDS_ST_BODY_TEXTSTYLE_LARGE"),  // 2
-                                       _("IDS_EMAIL_OPT_HUGE_M_TEXTSIZE"),                        // 3
-                                       _("IDS_EMAIL_POP_GIANT_M_TEXTSIZE"),                       // 4
-                               };
-       switch (value)
-       {
-               case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
-                       return (char *)font_size_arr[0];
-               case SYSTEM_SETTINGS_FONT_SIZE_NORMAL:
-                       return (char *)font_size_arr[1];
-               case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
-                       return (char *)font_size_arr[2];
-               case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
-                       return (char *)font_size_arr[3];
-               case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
-                       return (char *)font_size_arr[4];
-               default:
-                       return (char *)font_size_arr[1];
+       setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
+       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
+       char *ret_str = NULL;
+       if (!strcmp(part, "elm.text.main.left")) {
+               if (item_data->keyStr2) {
+                       char temp[FONT_BUF_SIZE] = {0,};
+
+                       int ret = format_font_name_by_id(item_data->sub_desc, item_data->keyStr2, temp, FONT_BUF_SIZE);
+
+                       if (ret == 0) { /* error condition */
+                               SETTING_TRACE_ERROR("Error condition font");
+                       }
+
+                       SETTING_TRACE_DEBUG("temp : %s", (char *)temp);
+                       ret_str = (char *)g_strdup(temp);
+               }
        }
+       /*SETTING_TRACE_END; */
+       return ret_str;
 }
 
 
+
+
 /**
  * [API] get a font list from current system
  * REFACTORING: move this feature to system-settings
  */
 static Eina_List *__setting_font_main_available_list_get()
 {
-       SETTING_TRACE_BEGIN
+       SETTING_TRACE_BEGIN;
        FcObjectSet *os = NULL;
        FcFontSet *fs = NULL;
        FcPattern *pat = NULL;
@@ -89,9 +139,12 @@ static Eina_List *__setting_font_main_available_list_get()
 
        setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts");
 
+
+       char *locale = setlocale(0, NULL);
+
        pat = FcPatternCreate();
 
-       os = FcObjectSetBuild(FC_FAMILY, FC_FILE, (char *) 0);
+       os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0);
 
        if (os) {
                fs = FcFontList(font_config, pat, os);
@@ -109,25 +162,52 @@ static Eina_List *__setting_font_main_available_list_get()
                SETTING_TRACE_DEBUG("fs->nfont = %d", fs->nfont);
 
                for (j = 0; j < fs->nfont; j++) {
+
                        FcChar8 *family = NULL;
                        FcChar8 *file = NULL;
-
                        if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
-                               //SETTING_TRACE_DEBUG("FC_FILE : %s\n", file);
+                               /*SETTING_TRACE_DEBUG("FC_FILE : %s\n", file); */
                                int preload_path_len = safeStrLen(SETTING_FONT_PRELOAD_FONT_PATH);
                                int download_path_len = safeStrLen(SETTING_FONT_DOWNLOADED_FONT_PATH);
-                               if (!safeStrNCmp((const char*)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) ||
-                                       !safeStrNCmp((const char*)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len)) {
-                                       if (FcPatternGetString(fs->fonts[j], FC_FAMILY, 0, &family) != FcResultMatch) {
-                                               SETTING_TRACE_DEBUG("Family name is invalid");
-                                               continue;
+                               if (!safeStrNCmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) ||
+                                   !safeStrNCmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len)) {
+                                       char *family_result = NULL;
+                                       FcChar8 *lang = NULL;
+                                       int id = 0;
+                                       if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
+                                               break;
                                        }
-
-                                       //SETTING_TRACE_DEBUG("family = %s", (char *)family);
-                                       if (eina_list_data_find(list, family) == NULL) {
-                                               list = eina_list_append(list, family);
-                                               /* list = eina_list_append(list, family); */
-                                               // for TEST because there's 1 font on target.
+                                       if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
+                                               break;
+                                       }
+                                       family_result = (char *)family;
+
+                                       /* Find proper family name for current locale. */
+                                       while (locale && family && lang) {
+                                               if (!strncmp(locale, (char *)lang, strlen((char *)lang))) {
+                                                       family_result = (char *)family;
+                                                       break;
+                                               }
+
+                                               /* I will set english as default family language. */
+                                               /* If there is no proper family language for current locale, */
+                                               /* we have to show the english family name. */
+                                               if (!strcmp(lang, "en")) {
+                                                       family_result = (char *)family;
+                                               }
+                                               id++;
+                                               if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
+                                                       break;
+                                               }
+                                               if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
+                                                       break;
+                                               }
+                                       }
+                                       if (family_result && eina_list_data_find(list, family_result) == NULL) {
+                                               list = eina_list_append(list, family_result);
+                                               SETTING_TRACE_DEBUG("-------- ADDED FONT - family = %s", family_result);
+                                               /* list = eina_list_append(list, family_result); */
+                                               /* for TEST because there's 1 font on target. */
                                        }
                                }
                        }
@@ -140,10 +220,10 @@ static Eina_List *__setting_font_main_available_list_get()
        font_config = NULL;
        return list;
 }
-
-static void __setting_font_main_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info)
+#if 0
+static void __setting_font_main_genlist_sel_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       //error check
+       /*error check */
        setting_retm_if(data == NULL, "Data parameter is NULL");
 
        retm_if(event_info == NULL, "Invalid argument: event info is NULL");
@@ -157,35 +237,108 @@ static void __setting_font_main_genlist_sel_cb(void *data, Evas_Object * obj, vo
                setting_view_change(&setting_view_font_main, &setting_view_font_font_size, ad);
        }
 }
+#endif
+int get_font_name_id(char *font_data, char *temp, int bufsize)
+{
+       /*SETTING_TRACE("font data : %s", (char*)font_data); */
+       /*char trans_font_type_name[FONT_BUF_SIZE] = {0,}; */
+       /*SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name); */
+       if (safeStrCmp(font_data, "Choco cooky") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_CHOCO_COOKY");
+       } else if (safeStrCmp(font_data, "Cool jazz") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_COOL_JAZZ");
+       } else if (safeStrCmp(font_data, "Rosemary") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_FONTSTYLE_ROSEMARY");
+       } else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME");
+       } else if (safeStrCmp(font_data, "Maruberi") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_MARUBERI_JPN_DCM");
+       } else if (safeStrCmp(font_data, "POP") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_POP_JPN_DCM");
+       } else if (safeStrCmp(font_data, "UDMincho") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDMINCHO_JPN");
+       } else if (safeStrCmp(font_data, "UDRGothic") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDRGOTHICM_JPN");
+       } else if (safeStrCmp(font_data, "UDGothic") == 0) {
+               snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDGOTHIC_M_FONT");
+       } else {
+               snprintf(temp, bufsize, "%s", font_data);
+       }
+       return 1;
+}
 
 
-int get_font_name_str(char* font_type_name, char* trans_font_type_name, int bufsize)
+int get_font_name_str(char *font_type_name, char *trans_font_type_name, int bufsize)
 {
-       if(safeStrCmp(font_type_name, "Choco cooky") == 0)
+       /*SETTING_TRACE_BEGIN; */
+       if (safeStrCmp(font_type_name, "Choco cooky") == 0) {
                snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
-       else if(safeStrCmp(font_type_name, "Cool jazz") == 0)
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "Cool jazz") == 0) {
                snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
-       else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0)
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "Rosemary") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0) {
                snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
-       else
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "Maruberi") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "POP") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "UDMincho") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else if (safeStrCmp(font_type_name, "UDRGothic") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       } else {
                snprintf(trans_font_type_name, bufsize, "%s", font_type_name);
-
+               /*SETTING_TRACE("%s", trans_font_type_name); */
+       }
        return 1;
 }
+void format_default_font(char *font_data, char *temp, int bufsize, char *real_value)
+{
+       /*SETTING_TRACE("real_value : %s", (char*)real_value); */
+
+       char *pos = real_value;
+       char new_name[bufsize];
+       int i = 0;
+       int count = 0;
+       while (*pos != '\0') {
+               /*SETTING_TRACE(">>>  %c", *pos); */
+               if (*pos == ' ') {
+                       /*SETTING_TRACE(">>>  empty ' ' "); */
+                       new_name[count] = '\\';
+                       count++;
+                       new_name[count] = ' ';
+               } else {
+                       new_name[count] = real_value[i];
+               }
+
+               count++;
+               pos++;
+               i++;
+       }
+       new_name[count] = '\0';
+       snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, font_data);
+}
 
-int get_font_name_tag(char* font_data, char* temp, int bufsize)
+int get_font_name_tag(char *font_data, char *temp, int bufsize)
 {
-       SETTING_TRACE("font data : %s", (char*)font_data);
+       /*SETTING_TRACE("font data : %s", (char*)font_data); */
 
-       charpos = font_data;
+       char *pos = font_data;
        char new_name[bufsize];
-       int i=0;
+       int i = 0;
        int count = 0;
-       while(*pos != '\0')
-       {
-               SETTING_TRACE(">>>  %c", *pos);
-               if (*pos == ' ')
-               {
+       while (*pos != '\0') {
+               /*SETTING_TRACE(">>>  %c", *pos); */
+               if (*pos == ' ') {
                        SETTING_TRACE(">>>  empty ' ' ");
                        new_name[count] = '\\';
                        count++;
@@ -200,8 +353,32 @@ int get_font_name_tag(char* font_data, char* temp, int bufsize)
        }
        new_name[count] = '\0';
 
-       SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name);
-       snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, font_data);
+       char trans_font_type_name[FONT_BUF_SIZE] = {0,};
+       /*SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name); */
+       if (safeStrCmp(font_data, "Choco cooky") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
+       } else if (safeStrCmp(font_data, "Cool jazz") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
+       } else if (safeStrCmp(font_data, "Rosemary") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
+       } else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
+       } else if (safeStrCmp(font_data, "Maruberi") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
+       } else if (safeStrCmp(font_data, "POP") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
+       } else if (safeStrCmp(font_data, "UDMincho") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
+       } else if (safeStrCmp(font_data, "UDRGothic") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
+       } else if (safeStrCmp(font_data, "UDGothic") == 0) {
+               snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
+       } else {
+               snprintf(trans_font_type_name, bufsize, "%s", font_data);
+       }
+
+       /* */
+       snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
        return 1;
 }
 
@@ -212,41 +389,50 @@ static void __setting_font_main_genlist_item_create(void *data)
 
        SettingFontUG *ad = (SettingFontUG *)data;
        Elm_Object_Item *item = NULL;
-
-       if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SEL_VIEW_APPCONTROL)              // font type only
-       {
-               // [UI] Font Type
-               item = elm_genlist_item_append(ad->genlist, &(ad->itc_seperator), NULL, NULL,
-                                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2_font_size));
+       ad->itc_1text_1icon_2_font_size.func.text_get = _item_text_font_size_keystr2_get;
+       if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SEL_VIEW_APPCONTROL) {    /* font type only */
+               /* [UI] Font Type */
+               item = elm_genlist_item_append(ad->genlist, &itc_seperator, NULL, NULL,
+                                              ELM_GENLIST_ITEM_NONE, NULL, NULL);
                elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
                char *font_type_name = NULL;
-           int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
+               int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
+               if (ret != 0) {
+                       SETTING_TRACE_ERROR("system-setting call failed with error code %d", ret);
+               }
                SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
 
-               #if 0
+#if 0
                char trans_font_type_name[256] = {0,};
-               if(safeStrCmp(font_type_name, "Choco cooky") == 0)
+               if (safeStrCmp(font_type_name, "Choco cooky") == 0)
                        snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
-               else if(safeStrCmp(font_type_name, "Cool jazz") == 0)
+               else if (safeStrCmp(font_type_name, "Cool jazz") == 0)
                        snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
                else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0)
                        snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
                else
                        snprintf(trans_font_type_name, 256, "%s", font_type_name);
-               #else
+#else
+               char *default_font_name = NULL;
+               default_font_name = _get_default_font();
                char trans_font_type_name[FONT_BUF_SIZE] = {0,};
-               ret = get_font_name_str(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
-               //SETTING_TRACE_DEBUG("font data : %s", (char*)font_data);
-               #endif
+               if (!safeStrCmp(default_font_name, font_type_name)) {
+                       snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
+               } else {
+                       ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
+               }
+#endif
                SETTING_TRACE_DEBUG("current font : %s, trans font name: %s", font_type_name, trans_font_type_name);
 
                ad->font_type = setting_create_Gendial_exp_parent_field(ad->genlist,
-                                                               &(ad->itc_2text_3_parent),
-                                                               NULL, NULL,
-                                                               SWALLOW_Type_INVALID,
-                                                               SETTING_FONT_TYPE_STR,
-                                                               trans_font_type_name);
+                                                                       &(ad->itc_2text_3_parent),
+                                                                       NULL, NULL,
+                                                                       SWALLOW_Type_INVALID,
+                                                                       SETTING_FONT_TYPE_STR,
+                                                                       trans_font_type_name,
+                                                                       SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_TOP);
                if (ad->font_type) {
                        ad->font_type->userdata = ad;
                } else {
@@ -257,48 +443,73 @@ static void __setting_font_main_genlist_item_create(void *data)
                G_FREE(font_type_name);
        }
 
-       if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SIZE_VIEW_APPCONTROL)             // font size only
-       {
+       if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) {   /* font size only */
                int err = -1;
-               // [UI] Font Size
+               /* [UI] Font Size */
                int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &ad->ret_font_size, &err);
                if (ret != 0) {
                        SETTING_TRACE_ERROR("get vconf failed");
                }
 
-               ad->font_size = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_2),
-                                       __setting_font_main_genlist_sel_cb,
-                                       ad, SWALLOW_Type_INVALID, NULL,
-                                       NULL, ad->ret_font_size, SETTING_FONT_SIZE_STR,
-                                       __setting_font_main_get_font_size(ad->ret_font_size), NULL);
+               ad->font_size = setting_create_Gendial_exp_parent_field(ad->genlist, &(ad->itc_2text_3_parent),
+                                                                       NULL,
+                                                                       NULL, SWALLOW_Type_INVALID,
+                                                                       SETTING_FONT_SIZE_STR,
+                                                                       __get_font_size_str(ad->ret_font_size),
+                                                                       SETTING_GROUP_STYLE_CENTER, SETTING_GROUP_STYLE_BOTTOM);
                if (ad->font_size) {
                        ad->font_size->userdata = ad;
+                       ad->font_size->group_style = SETTING_GROUP_STYLE_BOTTOM;
                } else {
                        SETTING_TRACE_ERROR("ad->font_size is NULL");
                }
 
 #if DISABlED_CODE
-       setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon), NULL,
-                                        ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
-                                        NULL, NULL, 0, SETTING_FONT_SIZE_DESC, NULL,
-                                        NULL);
+               ADD_GL_HELP(ad->genlist, SETTING_FONT_SIZE_DESC);
 #endif
        }
+
+       if (ad->font_expand_state == FONT_EXPAND_STATE_FONT_TYPE) {
+               if (ad->font_type && ad->font_type->item) {
+                       elm_genlist_item_expanded_set(ad->font_type->item, TRUE);
+               }
+       } else if (ad->font_expand_state == FONT_EXPAND_STATE_FONT_SIZE) {
+               if (ad->font_size && ad->font_size->item) {
+                       elm_genlist_item_expanded_set(ad->font_size->item, TRUE);
+               }
+       }
 }
 
+static void __setting_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SettingFontUG *ad = (SettingFontUG *) data;
+       SETTING_TRACE("send ug_destroy_me by callback");
+       if (ad->main_popup) {
+               evas_object_del(ad->main_popup);
+               ad->main_popup = NULL;
+       }
+       ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
+       /*fix PLM issue P130606-3323, per tester's request, need to keep in current font veiw after change the font type*/
+       /*ug_destroy_me(ad->ug); */
+       if (ad->font_type && ad->font_type->item) {
+               elm_genlist_item_expanded_set(ad->font_type->item, FALSE);
+       }
+}
 
-/**
- * [API] set current font
- * font change
- */
-static void __setting_font_main_font_set(char *font_name)
+static Eina_Bool __font_type_change_call(void *data)
 {
-       retm_if(font_name == NULL, "Invalid argument: font_name is NULL");
-    int ret;
-    ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_name);
+       SETTING_TRACE_BEGIN;
+       SettingFontUG *ad = (SettingFontUG *) data;
 
+       /* logic */
+       system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name);
+
+       /* finalize */
+       ad->font_type_timer = NULL;
+       return ECORE_CALLBACK_CANCEL;
 }
 
+#if 0
 static void __setting_font_main_popup_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -306,55 +517,65 @@ static void __setting_font_main_popup_cb(void *data, Evas_Object *obj, void *eve
        SettingFontUG *ad = (SettingFontUG *) data;
 
        switch (btn_type(obj)) {
-       case POPUP_RESPONSE_OK:
-               {
-                       /* extract font name from tag mixed string */
-                       SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
-
-                       SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
-
-                       char *temp = NULL;
-                       temp = strchr(ad->subitem->keyStr, '>');
-                       temp += 1;
-                       char *last = NULL;
-                       last = strrchr(temp, '<');
-
-                       #if 0
-                       char font_name[64] = {0,};
-                       safeCopyStr(font_name, temp, (int)(last-temp));
-                       #else
-                       // sub - descc
-                       char *font_name = g_strdup(ad->subitem->sub_desc);
-                       #endif
-                       /* set font name to font main and font config */
-                       ad->font_type->sub_desc = (char *)g_strdup(_(font_name));
-                       elm_object_item_data_set(ad->font_type->item, ad->font_type);
-                       elm_genlist_item_update(ad->font_type->item);
-
-                       ad->prev_font = ad->subitem->chk_status;
-                       G_FREE(ad->font_name);
-                       ad->font_name = (char *)g_strdup(_(font_name));
-                       SETTING_TRACE("ad->subitem->keyStr = %s", font_name);
+               case POPUP_RESPONSE_OK: {
+                               /* extract font name from tag mixed string */
+                               SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
+                               SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
+
+                               /* set font name to font main and font config */
+                               /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
+                               /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
+                               ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
+                               elm_object_item_data_set(ad->font_type->item, ad->font_type);
+                               elm_genlist_item_update(ad->font_type->item);
+                               /* sub - descc */
+                               char *font_name = g_strdup(ad->subitem->sub_desc);
+
+                               ad->prev_font = ad->subitem->chk_status;
+                               G_FREE(ad->font_name);
+                               ad->font_name = (char *)g_strdup(_(font_name));
+                               SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
+                               elm_radio_value_set(ad->subitem->rgd, ad->subitem->chk_status);
+                               /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
+                               if (ad->font_type_list != NULL) {
+                                       Setting_GenGroupItem_Data *font_type_subitem = NULL;
+                                       EINA_LIST_FREE(ad->font_type_list, font_type_subitem);
+                                       ad->font_type_list = NULL;
+                               }
+#if 0
+                               /*vconf_set_str(VCONFKEY_SETAPPL_SETTING_FONT_NAME, font_name); */
+                               system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_name);
+                               G_FREE(font_name);
+#endif
 
-                       __setting_font_main_font_set(font_name);
-                       ug_destroy_me(ad->ug);
-                       break;
-               }
-       case POPUP_RESPONSE_CANCEL:
-               {
-                       elm_radio_value_set(ad->subitem->rgd, ad->prev_font);
+                               /* waiting */
+                               /*Due to long time taken by font Setting, add the block code when font is Setting. */
+                               if (ad->main_popup) {
+                                       evas_object_del(ad->main_popup);
+                                       ad->main_popup = NULL;
+                               }
 
-                       break;
-               }
-       default:
-               {
-                       break;
-               }
-       }
+                               /* font type popup */
+                               ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
+                                                                                      PROGRESSBAR_STYLE,
+                                                                                      NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE);  /* 3 seconds to wait in maximum */
 
-       if (ad->popup) {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
+                               /* ecore timer for change actual font */
+                               ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_type_change_call, ad);
+                               break;
+                       }
+               case POPUP_RESPONSE_CANCEL: {
+                               elm_radio_value_set(ad->subitem->rgd, ad->prev_font);
+                               if (ad->main_popup) {
+                                       evas_object_del(ad->main_popup);
+                                       ad->main_popup = NULL;
+                               }
+                               ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
+                               break;
+                       }
+               default: {
+                               break;
+                       }
        }
 }
 
@@ -364,15 +585,18 @@ static void __setting_font_main_popup(void *data)
        setting_retm_if(data == NULL, "Data parameter is NULL");
        SettingFontUG *ad = (SettingFontUG *) data;
 
+       char temp[FONT_BUF_SIZE] = {0,};
+       format_font_name_by_id(ad->subitem->sub_desc, ad->subitem->keyStr2, temp, FONT_BUF_SIZE);
        char popup_desc[SETTING_STR_SLP_LEN + 1] = {0,};
-       snprintf(popup_desc, SETTING_STR_SLP_LEN, "%s %s?", _(SETTING_FONT_POPUP_DESC), ad->subitem->keyStr);
-
-       ad->popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
-                                        popup_desc,
-                                        __setting_font_main_popup_cb, 0,
-                                        2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
+       snprintf(popup_desc, SETTING_STR_SLP_LEN, _(SETTING_FONT_POPUP_DESC), temp);
+       if (!ad->main_popup) {
+               ad->main_popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
+                                                              popup_desc,
+                                                              __setting_font_main_popup_cb, 0,
+                                                              2, _("IDS_COM_SK_YES"), _("IDS_COM_SK_NO"));
+       }
 }
-
+#endif
 
 /**
  * [UI][expandable list][event handler:selection][font change]
@@ -389,18 +613,67 @@ void __setting_font_main_sub_list_sel_cb(void *data, Evas_Object *obj, void *eve
 
        SettingFontUG *ad = (SettingFontUG *) data;
 
+
        /*  if not change, return */
        if (ad->prev_font == data_subItem->chk_status) {
                SETTING_TRACE("NOT CHANGED ");
                return;
        }
-
+       if (ad->font_change_status == SELECTED_FONT_CHANGE_IN_PROCESS) {
+               return;
+       }
+       ad->font_change_status = SELECTED_FONT_CHANGE_IN_PROCESS;
        ad->subitem = data_subItem;
-       elm_radio_value_set(ad->subitem->rgd, ad->subitem->chk_status);
+       /* Fix PLM P131016-04680
+         when user check the option, make sure the radio button is checked for prev_font font item
+         the radio of new font item will be checked when user seleck "ok" on popup*/
+       elm_radio_value_set(ad->subitem->rgd, data_subItem->chk_status);
+
+       /* extract font name from tag mixed string */
+       SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
+       SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
+
+       /* set font name to font main and font config */
+       /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
+       /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
+       ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
+       elm_object_item_data_set(ad->font_type->item, ad->font_type);
+       elm_genlist_item_update(ad->font_type->item);
+       /* sub - descc */
+       char *font_name = g_strdup(ad->subitem->sub_desc);
+
+       ad->prev_font = ad->subitem->chk_status;
+       G_FREE(ad->font_name);
+       ad->font_name = (char *)g_strdup(_(font_name));
+       SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
+
+       /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
+       if (ad->font_type_list != NULL) {
+               eina_list_free(ad->font_type_list);
+               ad->font_type_list = NULL;
+       }
 
-       __setting_font_main_popup(ad);
+       /* waiting */
+       /*Due to long time taken by font Setting, add the block code when font is Setting. */
+       if (ad->main_popup) {
+               evas_object_del(ad->main_popup);
+               ad->main_popup = NULL;
+       }       /* font type popup */
+       ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
+                                                              PROGRESSBAR_STYLE,
+                                                              NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE);  /* 3 seconds to wait in maximum */
+
+       /* ecore timer for change actual font */
+       ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_type_change_call, ad);
 }
 
+/**
+* @brief expandable list handler for font-type
+*
+* @param data
+* @param obj
+* @param event_info
+*/
 static void __setting_font_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
 {
        ret_if(NULL == data || NULL == event_info);
@@ -411,41 +684,82 @@ static void __setting_font_main_exp_cb(void *data, Evas_Object *obj, void *event
        Evas_Object *scroller = elm_object_item_widget_get(parentItem);
 
        Evas_Object *rgd = NULL;
+       int i = 0;
+       int matched_font = -1;
+       G_FREE(ad->font_name);
+       int ret = 0;
+       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &(ad->font_name));
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
+               SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d", ret);
+               ad->font_name = _get_default_font();
+       }
        if (data_parentItem == ad->font_type) {
                rgd = elm_radio_add(scroller);
                elm_radio_value_set(rgd, -1);
 
+               char *default_font_name = NULL;
+               default_font_name = _get_default_font();
+               if (NULL != default_font_name) {
+                       /*char font_name_dispaly[FONT_BUF_SIZE] = {0,}; */
+                       SETTING_TRACE_DEBUG("default_font_name:%s", default_font_name);
+                       /*format_default_font(SETTING_DEFAULT_FONT_TYPE, font_name_dispaly,FONT_BUF_SIZE, default_font_name); */
+                       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
+                       setting_retm_if(!item_data, "calloc failed");
+                       item_data->keyStr2 = (char *)g_strdup(SETTING_DEFAULT_FONT_TYPE);/*for display */
+                       item_data->keyStr = (char *)g_strdup(_(SETTING_DEFAULT_FONT_TYPE));/*for tts reading */
+                       item_data->swallow_type = SWALLOW_Type_1RADIO;
+                       item_data->chk_status = i;
+                       item_data->rgd = rgd;
+                       item_data->chk_change_cb = NULL;
+                       item_data->group_style = SETTING_GROUP_STYLE_CENTER;
+                       item_data->sub_desc = strdup(default_font_name); /*the real font type value */
+                       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);
+
+                       if (item_data) {
+                               setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
+                               item_data->userdata = ad;
+                               if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
+                                       matched_font = i;
+                               }
+                       }
+                       i++;
+                       ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
+               }
+
                Eina_List *font_list = NULL;
                Eina_List *l = NULL;
                FcChar8 *font_data = NULL;
                font_list = __setting_font_main_available_list_get();
-
-               int i = 0;
-               int matched_font = -1;
-               Setting_GenGroupItem_Data *item = NULL;
-               EINA_LIST_FOREACH(font_list, l, font_data)
-               {
-                       char temp[FONT_BUF_SIZE] = {0,};
-                       int ret = get_font_name_tag(font_data, temp, FONT_BUF_SIZE);
-                       SETTING_TRACE_DEBUG("font data : %s", (char*)font_data);
-
-                       item = setting_create_Gendial_exp_sub_field(scroller, &(ad->itc_1text_1icon_2),
-                                                    __setting_font_main_sub_list_sel_cb, ad,
-                                                    parentItem, SWALLOW_Type_1RADIO, rgd,
-                                                    i, temp,
-                                                    NULL);
-
-                       if (item) {
-                               item->userdata = ad;
-                               //item->sub_desc = font_data;
-                               item->sub_desc = strdup(font_data);
-                               //if (!safeStrCmp(ad->font_name, (const char*)font_data)) {
-                               if (!safeStrCmp(ad->font_name, (const char*)item->sub_desc)) {
-                                       matched_font = i;
+               EINA_LIST_FOREACH(font_list, l, font_data) {
+                       if (safeStrCmp(default_font_name, (char *)font_data) != 0) {
+                               char keyStr[FONT_BUF_SIZE] = {0,};
+                               get_font_name_str((char *)font_data, keyStr, FONT_BUF_SIZE);
+                               char temp[FONT_BUF_SIZE] = {0,};
+                               /*int ret = get_font_name_tag(font_data, temp, FONT_BUF_SIZE); */
+                               get_font_name_id((char *)font_data, temp, FONT_BUF_SIZE);
+                               SETTING_TRACE_DEBUG("font data : %s", (char *)font_data);
+                               Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
+                               setting_retm_if(!item_data, "calloc failed");
+                               item_data->keyStr2 = (char *)g_strdup(temp);/*for display */
+                               item_data->keyStr = (char *)g_strdup(keyStr);/*for tts reading */
+                               item_data->swallow_type = SWALLOW_Type_1RADIO;
+                               item_data->chk_status = i;
+                               item_data->rgd = rgd;
+                               item_data->chk_change_cb = NULL;
+                               item_data->group_style = SETTING_GROUP_STYLE_CENTER;
+                               item_data->sub_desc = strdup((char *)font_data);
+                               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);
+
+                               if (item_data) {
+                                       item_data->userdata = ad;
+                                       /*if (!safeStrCmp(ad->font_name, (const char*)font_data)) { */
+                                       if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
+                                               matched_font = i;
+                                       }
                                }
+                               i++;
+                               ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
                        }
-
-                       i++;
                }
 
                /* update check status */
@@ -454,7 +768,114 @@ static void __setting_font_main_exp_cb(void *data, Evas_Object *obj, void *event
                }
 
                ad->prev_font = matched_font;
+               G_FREE(default_font_name);
+       } else if (data_parentItem == ad->font_size) {
+               /* [UI] create the font list */
+               ad->size_rdg = elm_radio_add(scroller);
+               elm_radio_state_value_set(ad->size_rdg, -1);
+
+               int idx = 0;
+
+               while (font_size_table[idx].key_font_name) {
+                       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
+                       setting_retm_if(!item_data, "calloc failed");
+                       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 */
+                       item_data->keyStr = (char *)g_strdup(_(font_size_table[idx].key_font_name));/*for tts feature; */
+                       item_data->swallow_type = SWALLOW_Type_1RADIO_1LABLE;
+                       item_data->chk_status = font_size_table[idx].font_size;
+                       item_data->chk_change_cb = NULL;
+                       item_data->rgd = ad->size_rdg;
+                       item_data->userdata = ad;
+                       if (idx == sizeof(font_size_table) / sizeof(font_size_table[0]) - 2) {
+                               item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
+                       } else {
+                               item_data->group_style = SETTING_GROUP_STYLE_CENTER;
+                       }
+
+                       item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2_font_size), item_data, parentItem,
+                                                                 ELM_GENLIST_ITEM_NONE, setting_font_font_size_list_mouse_up_cb, ad->size_rdg);
+
+                       idx++;
+               }
+               setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
+       }
+}
+static void __setting_font_main_vconf_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == data, "data is NULL");
+       SettingFontUG *ad = (SettingFontUG *)data;
+
+       char *vconf_name = vconf_keynode_get_name(key);
+
+       if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)) {
+
+
+               char *font_type_name = NULL;
+               int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
+               if (ret != 0) {
+                       SETTING_TRACE("system-setting call failed with error code %d", ret);
+               }
+               SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
+               char *default_font_name = NULL;
+               default_font_name = _get_default_font();
+               char trans_font_type_name[FONT_BUF_SIZE] = {0,};
+               if (!safeStrCmp(default_font_name, font_type_name)) {
+                       snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
+               } else {
+                       ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
+               }
+
+               if (ad->font_type) {
+                       G_FREE(ad->font_type->sub_desc);
+                       ad->font_type->sub_desc = (char *)g_strdup(trans_font_type_name);
+                       elm_object_item_data_set(ad->font_type->item, ad->font_type);
+                       elm_genlist_item_update(ad->font_type->item);
+                       SETTING_TRACE("ad->font_type->sub_desc:%s", trans_font_type_name);
+
+                       if (elm_genlist_item_expanded_get(ad->font_type->item)) {
+                               Eina_List *l = NULL;
+                               Setting_GenGroupItem_Data *font_type_subitem;
+                               EINA_LIST_FOREACH(ad->font_type_list, l, font_type_subitem) {
+                                       if (font_type_subitem && !safeStrCmp(font_type_subitem->sub_desc, font_type_name)) {
+
+                                               if (font_type_subitem && font_type_subitem->rgd) {
+                                                       elm_radio_value_set(font_type_subitem->rgd, font_type_subitem->chk_status);
+                                                       if (ad->font_change_status != SELECTED_FONT_CHANGE_IN_PROCESS) {
+                                                               ad->subitem = font_type_subitem;
+                                                       }
+                                               }
+                                               break;
+
+                                       }
+                               }
+                       }
+               }
+       } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
+               int err = -1;
+               /* [UI] Font Size */
+               int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &ad->ret_font_size, &err);
+               if (ret != 0) {
+                       SETTING_TRACE_ERROR("get vconf failed");
+               }
+               if (ad->font_size) {
+                       G_FREE(ad->font_size->sub_desc);
+                       ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(ad->ret_font_size));
+                       elm_object_item_data_set(ad->font_size->item, ad->font_size);
+                       elm_genlist_item_update(ad->font_size->item);
+
+                       if (elm_genlist_item_expanded_get(ad->font_size->item)) {
+                               if (ad->size_rdg) {
+                                       setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
+                               }
+                       }
+               }
+
+       } else {
+               SETTING_TRACE_ERROR("vconf_name is error");
        }
+       SETTING_TRACE_END;
 }
 
 
@@ -470,24 +891,40 @@ static int setting_font_main_create(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingFontUG *ad = (SettingFontUG *) cb;
+       setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2));
+       ad->itc_1text_1icon_2.func.text_get = _item_text_keystr2_get;
 
        retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
-                "win_main_layout is NULL");
-
+                "win_main_layout is NULL");
+       ad->font_change_status = SELECTED_FONT_CHANGE_NONE;
        ad->ly_main =
            setting_create_layout_navi_bar_genlist(ad->win_main_layout,
-                                                  ad->win_get,
-                                                  _(KeyStr_Font),
-                                                  _("IDS_COM_BODY_BACK"),
-                                                  NULL,
-                                                  __setting_font_main_click_softkey_back_cb,
-                                                  NULL,
-                                                  ad, &ad->genlist, &ad->navibar);
+                                                  ad->win_get,
+                                                  "IDS_COM_BODY_FONT",
+                                                  _("IDS_COM_BODY_BACK"),
+                                                  NULL,
+                                                  (setting_call_back_func)__setting_font_main_click_softkey_back_cb,
+                                                  NULL,
+                                                  ad, &ad->genlist, &ad->navibar);
+       ad->navi_it_font = elm_naviframe_top_item_get(ad->navibar);
+       elm_genlist_mode_set(ad->genlist, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(ad->genlist, "realized", __gl_realized_cb, ad);
 
        setting_enable_expandable_genlist(ad->genlist, ad, __setting_font_main_exp_cb, NULL);
-
+       int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
+                                          __setting_font_main_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
+                                      __setting_font_main_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
        __setting_font_main_genlist_item_create(ad);
 
+       evas_font_reinit();
+
        setting_view_font_main.is_create = 1;
        return SETTING_RETURN_SUCCESS;
 }
@@ -499,22 +936,37 @@ static int setting_font_main_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingFontUG *ad = (SettingFontUG *) cb;
-
-       if(ad->font_name)
-       {
+       int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
+                                          __setting_font_main_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
+                                      __setting_font_main_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+       if (ad->font_name) {
                G_FREE(ad->font_name);
                ad->font_name = NULL;
        }
 
-       if (ad->popup) {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
+       if (ad->main_popup) {
+               evas_object_del(ad->main_popup);
+               ad->main_popup = NULL;
        }
 
        if (ad->ly_main != NULL) {
                evas_object_del(ad->ly_main);
                ad->ly_main = NULL;
        }
+       if (ad->navi_it_font != NULL) {
+               ad->navi_it_font = NULL;
+       }
+       if (ad->font_type_list != NULL) {
+               eina_list_free(ad->font_type_list);
+               ad->font_type_list = NULL;
+       }
 
        setting_view_font_main.is_create = 0;
        SETTING_TRACE_END;
@@ -541,15 +993,15 @@ static int setting_font_main_update(void *cb)
 
                if (ad->font_size) {
                        G_FREE(ad->font_size->sub_desc);
-                       ad->font_size->sub_desc = (char *)g_strdup(__setting_font_main_get_font_size(value));
+                       ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(value));
                        elm_object_item_data_set(ad->font_size->item, ad->font_size);
                        elm_genlist_item_update(ad->font_size->item);
                }
-
-               setting_font_update_vconf_key(ad, SETTING_VCONF_INT_TYPE,
-                                             INT_SLP_SETTING_LCD_TIMEOUT_NORMAL);
+               /* setting_font_update_vconf_key(ad, SETTING_VCONF_INT_TYPE, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL); */
+       }
+       if (ad->font_type) {
+               elm_genlist_item_update(ad->font_type->item);
        }
-
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -573,55 +1025,54 @@ static int setting_font_main_cleanup(void *cb)
  *
  ***************************************************/
 
-static void __setting_font_main_click_softkey_back_cb(void *data, Evas_Object *obj,
-                                       void *event_info)
+static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
 {
        SETTING_TRACE_BEGIN;
        /* error check */
-       ret_if(data == NULL);
+       retv_if(data == NULL, EINA_FALSE);
 
        SettingFontUG *ad = (SettingFontUG *) data;
 
-       if (ad->viewmode == FONT_SEL_VIEW_APPCONTROL)
-       {
-               service_h svc;
-               if (service_create(&svc))
-                       return;
+       if (ad->viewmode == FONT_SEL_VIEW_APPCONTROL) {
+               app_control_h svc;
+               if (app_control_create(&svc)) {
+                       return EINA_FALSE;
+               }
 
-               service_add_extra_data(svc, "category", "FontType");
-               service_add_extra_data(svc, "FontType", ad->font_name);
+               app_control_add_extra_data(svc, "category", "FontType");
+               app_control_add_extra_data(svc, "FontType", ad->font_name);
 
-               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","category", "FontType");
-               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","FontType", ad->font_name);
+               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontType");
+               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontType", ad->font_name);
 
 
                ug_send_result(ad->ug, svc);
-               service_destroy(svc);
-       }
-       else if (ad->viewmode == FONT_SIZE_VIEW_APPCONTROL)
-       {
-               service_h svc;
+               app_control_destroy(svc);
+       } else if (ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) {
+               app_control_h svc;
 
                int err;
                int ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, ad->ret_font_size, &err);
-               setting_retm_if(ret == -1, "Failed to set vconf");
+               setting_retvm_if(ret == -1, EINA_FALSE, "Failed to set vconf");
 
-               if (service_create(&svc))
-                       return;
+               if (app_control_create(&svc)) {
+                       return EINA_FALSE;
+               }
 
                char font_size[SETTING_FONT_MAX_LEN] = {0,};
                snprintf(font_size, SETTING_FONT_MAX_LEN, "%d", ad->ret_font_size);
 
-               service_add_extra_data(svc, "category", "FontSize");
-               service_add_extra_data(svc, "FontSize", font_size);
+               app_control_add_extra_data(svc, "category", "FontSize");
+               app_control_add_extra_data(svc, "FontSize", font_size);
 
-               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","category", "FontSize");
-               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","FontSize", font_size);
+               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontSize");
+               SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontSize", font_size);
 
 
                ug_send_result(ad->ug, svc);
-               service_destroy(svc);
+               app_control_destroy(svc);
        }
        /* Send destroy request */
        ug_destroy_me(ad->ug);
+       return EINA_FALSE;
 }