tizen 2.3 release
[apps/home/settings.git] / setting-common / src / setting-common-draw-genlist.c
index 57eb250..4fe1035 100755 (executable)
@@ -1,18 +1,22 @@
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.1 (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-common-draw-widget.h>
 #include <glib.h>
 #include <system_settings.h>
 #include <efl_assist.h>
 
+#define DEF_BUF_SIZE 32
+
 static Evas_Object *_gl_Gendial_content_get(void *data, Evas_Object *obj, const char *part);
 static char *_gl_Gendial_text_get(void *data, Evas_Object *obj, const char *part);
 static void _gl_Gendial_del(void *data, Evas_Object *obj);
+
+EXPORT_PUBLIC
 const Elm_Genlist_Item_Class itc_seperator = {
-       .item_style = "dialogue/separator",
+       .item_style = "dialogue/separator.transparent.2",
        .func.text_get = NULL,
        .func.content_get = NULL,
        .func.state_get = NULL,
        .func.del = NULL,
 };
 
+EXPORT_PUBLIC
 const Elm_Genlist_Item_Class itc_bottom_seperator = {
-       .item_style = "dialogue/separator",
+       .item_style = NULL,
        .func.text_get = NULL,
        .func.content_get = NULL,
        .func.state_get = NULL,
        .func.del = NULL,
 };
 
+EXPORT_PUBLIC
 const Elm_Genlist_Item_Class itc_sep_line = {
-       .item_style = "dialogue/separator",
+       .item_style = "dialogue/separator.transparent.2",
        .func.text_get = _gl_Gendial_text_get,
        .func.content_get = NULL,
        .func.state_get = NULL,
        .func.del = NULL,
 };
 
+EXPORT_PUBLIC
+const Elm_Genlist_Item_Class itc_bottom_line = {
+       .item_style = "bottom_line",
+       .func.text_get = NULL,
+       .func.content_get = NULL,
+       .func.state_get = NULL,
+       .func.del = NULL,
+};
+
 #define DEFINE_ITC1(style, name) \
-const Elm_Genlist_Item_Class name = {\
+EXPORT_PUBLIC const Elm_Genlist_Item_Class name = {\
        .item_style = style,\
        .func.text_get = _gl_Gendial_text_get,\
        .func.content_get = _gl_Gendial_content_get,\
@@ -57,38 +76,67 @@ const Elm_Genlist_Item_Class name = {\
        .func.del = _gl_Gendial_del,\
 };
 
-DEFINE_ITC1("dialogue/1text", itc_1text);
-DEFINE_ITC1("dialogue/1text.1icon.2", itc_1text_1icon_2);
+DEFINE_ITC1("1line", itc_1text);
+DEFINE_ITC1("1line", itc_1text_1icon_2);
+DEFINE_ITC1("1line", itc_1text_1icon_2_tb);
 
 DEFINE_ITC1("dialogue/editfield/title", itc_dialogue_editfield_title);
-DEFINE_ITC1("dialogue/1icon", itc_1icon);
-DEFINE_ITC1("dialogue/1text.1icon/expandable2", itc_1icon_1text_sub);
-DEFINE_ITC1("dialogue/1text.1icon", itc_1text_1icon);
-DEFINE_ITC1("dialogue/1text.2icon", itc_1text_2icon);
-DEFINE_ITC1("dialogue/1text.2icon.2", itc_1text_2icon_2);
-
-DEFINE_ITC1("dialogue/2text.2", itc_2text_2);
-DEFINE_ITC1("dialogue/2text", itc_2text);
-DEFINE_ITC1("multiline/2text.1icon", itc_multiline_2text_1icon);
-DEFINE_ITC1("dialogue/2text.1icon.3", itc_2text_1icon_3);
-DEFINE_ITC1("dialogue/2text.1icon.6", itc_2text_1icon_6);
-DEFINE_ITC1("dialogue/2text.1icon.10.tb", itc_2text_1icon_7);
-
-DEFINE_ITC1("dialogue/2text.3/expandable", itc_2text_3_parent);
-DEFINE_ITC1("dialogue/2text.3", itc_2text_3);
-DEFINE_ITC1("dialogue/2text.2icon.3", itc_2text_2icon_3);
-
-DEFINE_ITC1("multiline/1text", itc_multiline_text);
-DEFINE_ITC1("1text.1icon.3", itc_1text_1icon_3_tb);
-DEFINE_ITC1("1text.1icon.2", itc_cm_1text_1icon_2);
+DEFINE_ITC1("1icon", itc_1icon);
+DEFINE_ITC1("1line", itc_1icon_1text_sub);
+DEFINE_ITC1("1line", itc_1text_1icon);
+DEFINE_ITC1("1line", itc_1text_1icon_3);
+DEFINE_ITC1("1line", itc_1text_2icon);
+DEFINE_ITC1("1line", itc_1text_2icon_2);
+DEFINE_ITC1("1line", itc_1text_2icon_10);
+
+DEFINE_ITC1("2line.top", itc_2text_2);
+DEFINE_ITC1("2line.top", itc_2text);
+DEFINE_ITC1("multiline_sub.main", itc_multiline_2text_1icon);
+DEFINE_ITC1("2line.top", itc_2text_1icon_3);
+DEFINE_ITC1("2line.top", itc_2text_1icon_2);
+DEFINE_ITC1("2line.top", itc_2text_1icon_6);
+DEFINE_ITC1("2line.top", itc_2text_1icon_7);
+DEFINE_ITC1("2line.top", itc_2text_1icon_10);
+
+DEFINE_ITC1("2line.top.2", itc_2text_3_parent);
+DEFINE_ITC1("2line.top", itc_1text_parent);
+
+DEFINE_ITC1("2line.top", itc_2text_3);
+DEFINE_ITC1("2line.top", itc_2text_2icon_3);
+
+//DEFINE_ITC1("multiline/1text", itc_multiline_text);
+DEFINE_ITC1("multiline_sub", itc_multiline_text);
+DEFINE_ITC1("1line", itc_1text_1icon_3_tb);
+DEFINE_ITC1("1line", itc_cm_1text_1icon_2);
 DEFINE_ITC1("select_all", itc_sel_all);
 //DEFINE_ITC1("dialogue/bg/1icon", itc_bg_1icon);
 DEFINE_ITC1("1icon", itc_bg_1icon);
-DEFINE_ITC1("dialogue/title", itc_group_item);
+DEFINE_ITC1("groupindex", itc_group_item);
+DEFINE_ITC1("1icon", itc_1icon_with_no_line);
+DEFINE_ITC1("1icon", itc_1icon_with_no_padding);
+DEFINE_ITC1("1line", itc_multiline_1text_1icon);
+DEFINE_ITC1("1line", itc_1text_2icon_divider);
+DEFINE_ITC1("1line", itc_no_group_1text_1icon_2);
+
+DEFINE_ITC1("entry.main", itc_editfield);
+DEFINE_ITC1("2line.top", itc_multiline_2text);
+DEFINE_ITC1("1line",itc_1text_1icon_divider);
+DEFINE_ITC1("1text", itc_normal_1text);
+
+typedef struct _tagParamData
+{
+       Setting_GenGroupItem_Data *item_data;
+       Evas_Object *parent;
+//     Evas_Object *btn_left;
+//     Evas_Object *btn_right;
+       Evas_Object *box;
+} Datefield_Paramdata;
+
 
 /**
  * Do process when clicking on a common genlist item
  */
+EXPORT_PUBLIC
 void setting_mouse_up_Gendial_list_radio_cb(void *data, Evas_Object *obj,
                                            void *event_info)
 {
@@ -142,36 +190,41 @@ static void __entry_unfocused(void *data, Evas_Object *obj, void *event_info) //
 {
        ret_if(!data);
        SETTING_TRACE_BEGIN;
-       #if 0
        Evas_Object *entry_container = data;
        //whe entry unfocused, its guidetext will becomes "Input here"
-       elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+
        if (elm_entry_is_empty(obj))
+       {
+               elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
                elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
+       }
        elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
-       #endif
 }
 
 static void __entry_focused(void *data, Evas_Object *obj, void *event_info) // Focused callback will show X marked button and hide guidetext.
 {
        ret_if(!data);
        SETTING_TRACE_BEGIN;
-       #if 0
        Evas_Object *entry_container = data;
        //whe entry focused, its guidetext will becomes "Input here"
-       elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+
        if (!elm_entry_is_empty(obj))
+       {
                elm_object_signal_emit(entry_container, "elm,state,eraser,show", "elm");
+       }
+       else
+       {
+               elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+       }
        elm_object_signal_emit(entry_container, "elm,state,guidetext,hide", "elm");
 
        Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(obj);
        if (imf_context) ecore_imf_context_input_panel_show(imf_context);
-       #endif
 }
+
 static void __eraser_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button is clicked, empty entry's contents.
 {
        ret_if(!data);
-       SETTING_TRACE_BEGIN;
        Evas_Object *entry = data;
        elm_entry_entry_set(entry, "");
        elm_object_focus_set(entry, EINA_TRUE);
@@ -180,20 +233,16 @@ static void __eraser_clicked(void *data, Evas_Object *obj, const char *emission,
 static void __chk_changed(void *data, Evas_Object *obj, void *event_info)
 {
        retm_if(data == NULL, "Data parameter is NULL");
-       SETTING_TRACE_BEGIN;
        Setting_GenGroupItem_Data *list_item =
            (Setting_GenGroupItem_Data *) data;
        list_item->chk_status = elm_check_state_get(obj);       /*  for update */
 }
 
-void __error_popup_response_cb(void *data, Evas_Object *obj,
+static void __error_popup_response_cb(void *data, Evas_Object *obj,
                                     void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data parameter is NULL");
-       retm_if(obj == NULL, "Data parameter is NULL");
-       retm_if(event_info == NULL, "Data parameter is NULL");
-
        Setting_GenGroupItem_Data *list_item = data;
        if (list_item->notify) {
                evas_object_del(list_item->notify);
@@ -214,12 +263,12 @@ static void __max_len_reached(void *data, Evas_Object *obj, void *event_info)
                                                         NULL, _(EXCEED_LIMITATION_STR),
                                                         __error_popup_response_cb,
                                                         POPUP_INTERVAL, FALSE, FALSE);
-               // elm_object_focus_set(list_item->eo_check, EINA_FALSE);
+               elm_object_focus_set(list_item->eo_check, EINA_FALSE);
        } else {
                //postpone 2 seconds again
-
                elm_popup_timeout_set(list_item->notify, POPUP_INTERVAL);
        }
+
 }
 
 static void __entry_keydown(void *data, Evas *e, Evas_Object *obj, void *event_info)
@@ -228,12 +277,13 @@ static void __entry_keydown(void *data, Evas *e, Evas_Object *obj, void *event_i
        retm_if(event_info == NULL, "event_info is NULL");
        Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
        Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
-       SETTING_TRACE_BEGIN;
+       list_item->enterKeyPressFlag = FALSE;
+       list_item->spaceKeyPressFlag = FALSE;
        if(safeStrCmp(ev->key, "KP_Enter") == 0 //it is for Japanese keyboard to fix N_SE-10719
           || safeStrCmp(ev->key, "Return") == 0) //to disable the 'Enter' orginal function
        {
                SETTING_TRACE("ENTER %s ev->key:%s", __FUNCTION__, ev->key);
-               list_item->enterKeyPressFlag = true;
+               list_item->enterKeyPressFlag = TRUE;
                //hide the eraser button
                //format like:xx<br/>
                if (list_item->isSinglelineFlag == FALSE) {
@@ -244,12 +294,10 @@ static void __entry_keydown(void *data, Evas *e, Evas_Object *obj, void *event_i
                }
                setting_hide_input_pannel_cb(obj);
        } else {
-               list_item->enterKeyPressFlag = false;
-               Evas_Object *entry_container = elm_object_parent_widget_get(obj);
-               if(safeStrLen(elm_entry_entry_get(obj)) > 0) {
-                       elm_object_signal_emit(entry_container, "elm,state,guidetext,hide", "elm");
+               if (safeStrCmp(ev->key, "space") == 0) {
+                       list_item->spaceKeyPressFlag = TRUE;
                } else {
-                       elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
+                       list_item->spaceKeyPressFlag =FALSE;
                }
        }
 }
@@ -257,6 +305,7 @@ static void __entry_keydown(void *data, Evas *e, Evas_Object *obj, void *event_i
 /**
  * Do process when clicking radio in subitem of expandable item
  */
+EXPORT_PUBLIC
 void setting_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -284,6 +333,7 @@ void setting_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
 /**
  * Do process when clicking on subitem of expandable item
  */
+EXPORT_PUBLIC
 void setting_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
@@ -303,23 +353,57 @@ void setting_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
                                data_subItem->chk_status, &err);
        setting_retm_if(0 != err, "Set vconf error[%d]",data_parentItem->int_slp_setting_binded);
 
-       data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
+       data_parentItem->sub_desc = (char *)g_strdup(data_subItem->keyStr);
        elm_object_item_data_set(data_parentItem->item, data_parentItem);
        elm_genlist_item_update(data_parentItem->item);
+       elm_genlist_item_expanded_set(parentItem, EINA_FALSE);
 }
 
+#if 0
+static Eina_Bool __upadte_list_on_idler(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retv_if(data == NULL, FALSE);
+       Elm_Object_Item *item = data;
+       elm_genlist_item_update(item);
+       return ECORE_CALLBACK_CANCEL;
+       //return EINA_FALSE;
+}
+#endif
 static void __exp_list_smart_cb(void *data, Evas_Object *obj, void *event_info)
 {
        ret_if(data == NULL || event_info == NULL);
        Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(item);    /* parent data */
        char *cb_type = data;
 
+       //SETTING_TRACE_DEBUG("cb_type: %s", cb_type);
        if (0 == safeStrCmp(cb_type, "drag")
            || 0 == safeStrCmp(cb_type, "longpressed")) {
-               //Evas_Object *base_view = (Evas_Object *) elm_genlist_item_object_get(item);
-               //edje_object_signal_emit(base_view, "mouse,out", "touch_arrow");
        } else if (0 == safeStrCmp(cb_type, "contracted")) {
                elm_genlist_item_subitems_clear(item);
+               //SETTING_TRACE_DEBUG("%s:%d", _(data_parentItem->keyStr), data_parentItem->con_style);
+               if(data_parentItem)
+               {
+                       setting_genlist_item_groupstyle_set(data_parentItem, data_parentItem->con_style);
+                       const char *tmp = data_parentItem->r_swallow_path;
+                       data_parentItem->r_swallow_path = g_strdup(SETTING_IMAGE_PATH_CFG"00_list_button_expand_closed.png");
+                       elm_object_item_data_set(data_parentItem->item, data_parentItem);
+                       elm_genlist_item_update(data_parentItem->item);
+                       FREE(tmp);
+               }
+       } else if (0 == safeStrCmp(cb_type, "expanded")) {
+               //SETTING_TRACE_DEBUG("%s:%d", _(data_parentItem->keyStr), data_parentItem->con_style);
+               if(data_parentItem)
+               {
+                       setting_genlist_item_groupstyle_set(data_parentItem, data_parentItem->exp_style);
+                       const char *tmp = data_parentItem->r_swallow_path;
+                       data_parentItem->r_swallow_path = g_strdup(SETTING_IMAGE_PATH_CFG"00_list_button_expand_opened.png");
+                       elm_object_item_data_set(data_parentItem->item, data_parentItem);
+                       elm_genlist_item_update(data_parentItem->item);
+                       FREE(tmp);
+               }
        }
 }
 
@@ -345,15 +429,20 @@ static void _gl_Gendial_sel_expand(void *data, Evas_Object *obj,
 static char *_gl_Gendial_text_get(void *data, Evas_Object *obj,
                                   const char *part)
 {
-       /* SETTING_TRACE_BEGIN; */
+       //SETTING_TRACE_BEGIN;
        Setting_GenGroupItem_Data *item_data =
            (Setting_GenGroupItem_Data *) data;
+       /* SETTING_TRACE("part:%s", part); */
+       if (SWALLOW_Type_LAYOUT_ENTRY == item_data->swallow_type) {     /* no need to create 'text' part */
+               return NULL;
+       }
 
+       char *ret_str = NULL;
        /* for font size view */
        if (SWALLOW_Type_1RADIO_1LABLE == item_data->swallow_type) {
                char speciliztion[MAX_SPECIALIZITION_LEN] = {0,};
                int font_size = -1;
-               SETTING_TRACE("item_data->chk_status:%d", item_data->chk_status);
+               //SETTING_TRACE("item_data->chk_status:%d", item_data->chk_status);
                if (SYSTEM_SETTINGS_FONT_SIZE_SMALL == item_data->chk_status) {
                        font_size = LABEL_FONT_SIZE_SMALL;
                } else if (SYSTEM_SETTINGS_FONT_SIZE_LARGE == item_data->chk_status) {
@@ -365,51 +454,96 @@ static char *_gl_Gendial_text_get(void *data, Evas_Object *obj,
                } else {
                        font_size = LABEL_FONT_SIZE_NORMAL;
                }
-               SETTING_TRACE("font_size:%d", font_size);
+               //SETTING_TRACE("font_size:%d", font_size);
                snprintf(speciliztion, sizeof(speciliztion), "<font_size=%d>%s</font_size>",
                        font_size, _(item_data->keyStr));
-               return (char *)g_strdup(speciliztion);
+               ret_str = (char *)g_strdup(speciliztion);
+               return ret_str;
        }
 
-       if (!safeStrCmp(part, "elm.text") || !safeStrCmp(part, "elm.text.1")) { /* title */
-                       return (char *)g_strdup(_(item_data->keyStr));
+       //char buf[1024];
+       //SETTING_TRACE("part:[%s], text:[%s] ", part, _(item_data->keyStr));
+       if (!safeStrCmp(part, "elm.text.main") || !safeStrCmp(part, "elm.text.main.left") ||!safeStrCmp(part, "elm.text.main.left.top")) {      /* title */
+               if (item_data->keyStr) {
+                       ret_str = (char *)g_strdup(_(item_data->keyStr));       /* use item_data->keyStr */
+               }
 
-       } else if (!safeStrCmp(part, "elm.text.2")) {   /* bottom or right */
+       } else if (!safeStrCmp(part, "elm.text.2") || !safeStrCmp(part, "elm.text.sub.left.bottom")) {  /* bottom or right */
                if (item_data->sub_desc) {
-                       return (char *)g_strdup(item_data->sub_desc);
+                       ret_str = (char *)g_strdup(_(item_data->sub_desc));
                }
+
+       } else if (!safeStrCmp(part, "elm.text.multiline")) {   /* title */
+               if (item_data->keyStr) {
+                       ret_str = (char *)g_strdup(_(item_data->keyStr));
+               }
+       } else {
+               FREE(ret_str);
+               return NULL;
        }
 
-       return NULL;
+       return ret_str;
 }
 
 static Evas_Object *__add_check(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
-       Evas_Object *check = elm_check_add(parent);
+       Evas_Object *content = elm_layout_add(parent);
+       Evas_Object *check = elm_check_add(content);
+       //elm_layout_theme_set(content, "layout", "list/C/type.2", "default");
+       /* To fix check button flicker issue when rotate the screen*/
+       if(item_data->isItemDisableFlag)
+               elm_object_disabled_set(check, EINA_FALSE);
+
        elm_check_state_set(check, item_data->chk_status);
-       evas_object_show(check);
-       evas_object_pass_events_set(check, 1);
        evas_object_propagate_events_set(check, 0);
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       //SETTING_TRACE("item_data->swallow_type:%d", item_data->swallow_type);
+
+       if (SWALLOW_Type_1ICON_1CHECK == item_data->swallow_type
+          || SWALLOW_Type_1CHECK == item_data->swallow_type
+          || SWALLOW_Type_1CHECKICON == item_data->swallow_type)
+       {
+               //elm_object_style_set(check, "default/genlist");
+               elm_check_state_pointer_set(check, (Eina_Bool *)(&(item_data->chk_status)));
+               //evas_object_repeat_events_set(check, EINA_TRUE);
+               evas_object_pass_events_set(check, 1);
+       }
+       else
+       {
+               evas_object_pass_events_set(check, 1);
+       }
+
 
        item_data->eo_check = check;
+       setting_genlist_unregister_tts_access_highlight(item_data->eo_check,item_data->itc);
 
        if (item_data->chk_change_cb) {
                evas_object_smart_callback_add(check,"changed",item_data->chk_change_cb,item_data);
        } else {
                evas_object_smart_callback_add(check,"changed", __chk_changed, item_data);
        }
-       return check;
+       evas_object_show(check);
+
+       //Evas_Object *content = elm_layout_add(parent);
+       //"list/B/type.3"
+       elm_layout_theme_set(content, "layout", "list/B/type.4", "default");
+       elm_layout_content_set(content, "elm.swallow.content", check);
+       return content;
 }
+
 static Evas_Object *__add_check_icon(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
-       Evas_Object *check = __add_check(item_data, parent);
+       __add_check(item_data, parent);
+       Evas_Object *check = item_data->eo_check;
 
        Evas_Object *thumb = NULL;
        if (item_data->r_swallow_path) {
                thumb = elm_icon_add(parent);
-               elm_icon_file_set(thumb,
+               elm_image_file_set(thumb,
                                  item_data->r_swallow_path,
                                  NULL);
                evas_object_size_hint_aspect_set(thumb,
@@ -428,13 +562,68 @@ static Evas_Object *__add_check_icon(Setting_GenGroupItem_Data *item_data, Evas_
        evas_object_show(layout);
        return layout;
 }
+
 static Evas_Object *__add_toggle(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
-       Evas_Object *check = __add_check(item_data, parent);
+       Evas_Object* ly_toggle = elm_layout_add(parent);
+       elm_layout_theme_set(ly_toggle, "layout", "list/C/type.3", "default");
+       __add_check(item_data, parent);
+       Evas_Object *check = item_data->eo_check;
        elm_object_style_set(check, "on&off");
-       return check;
+
+       //SETTING_TRACE_DEBUG("toggleDisableFlag %u", item_data->toggleDisableFlag);
+       if(item_data->toggleDisableFlag)
+               elm_object_disabled_set(check, EINA_TRUE);
+
+       if (SWALLOW_Type_1TOGGLE == item_data->swallow_type
+          || SWALLOW_Type_1ICON_1RADIO == item_data->swallow_type)
+       {
+               //SETTING_TRACE("Re-registered");
+               char state[MAX_SPECIALIZITION_LEN] = {0,};
+               snprintf(state, sizeof(state),
+                        _("IDS_ST_BODY_P1SS_IS_CURRENTLY_P2SS_T_TTS"),
+                        _(item_data->keyStr), item_data->chk_status?_("IDS_ST_BODY_ON_M_STATUS"):_("IDS_COM_BODY_OFF_M_STATUS"));
+
+               Evas_Object *eo = elm_object_item_access_object_get(item_data->item);
+               elm_access_info_set(eo, ELM_ACCESS_STATE, isEmptyStr(state)?NULL:state);
+       }
+       setting_genlist_unregister_tts_access_highlight(item_data->eo_check,item_data->itc);
+
+       elm_layout_content_set(ly_toggle, "elm.swallow.content", check);
+       //return check;
+       return ly_toggle;
+}
+
+static Evas_Object *__add_dot_toggle(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+{
+       //SETTING_TRACE_BEGIN;
+       retv_if(!item_data || !parent || -1 == item_data->chk_status, NULL);
+       return NULL;
+       #if 0
+       Evas_Object* eo_img = NULL;
+       eo_img = elm_image_add(parent);
+
+       if (eo_img)
+       {
+               evas_object_propagate_events_set(eo_img, EINA_FALSE);
+               if (0 == item_data->chk_status)
+               {
+                       elm_image_file_set(eo_img, SETTING_ICON_PATH_CFG"A01-1_top_off.png", NULL);
+               }
+               else if (1 == item_data->chk_status)
+               {
+                       elm_image_file_set(eo_img, SETTING_ICON_PATH_CFG"A01-1_top_on.png", NULL);
+               }
+               evas_object_size_hint_min_set(eo_img, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+               evas_object_size_hint_max_set(eo_img, 40, 40);
+               evas_object_show(eo_img);
+       }
+       return eo_img;
+       #endif
 }
+
+
 static Evas_Object *__add_multiline_toggle(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
@@ -443,6 +632,7 @@ static Evas_Object *__add_multiline_toggle(Setting_GenGroupItem_Data *item_data,
        return chk;
 }
 
+
 static Evas_Object *__add_radio(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
@@ -450,7 +640,43 @@ static Evas_Object *__add_radio(Setting_GenGroupItem_Data *item_data, Evas_Objec
                item_data->rgd = elm_radio_add(parent);
                elm_radio_state_value_set(item_data->rgd, -1);
        }
+       Evas_Object* ly_radio = elm_layout_add(parent);
+       elm_layout_theme_set(ly_radio, "layout", "list/B/type.4", "default");
+       Evas_Object *radio = elm_radio_add(ly_radio);
+       evas_object_propagate_events_set(radio, EINA_FALSE);
+       evas_object_repeat_events_set(radio, EINA_TRUE);
+       elm_radio_state_value_set(radio,
+                                 item_data->chk_status);
+       elm_radio_group_add(radio, item_data->rgd);
+       evas_object_show(radio);
+       item_data->eo_check = radio;
+       if (item_data->chk_change_cb) {
+               evas_object_smart_callback_add(radio,
+                                              "changed",
+                                              item_data->chk_change_cb,
+                                              item_data);
+       } else {
+               evas_object_smart_callback_add(radio,
+                                              "changed",
+                                              __radio_changed,
+                                              item_data);
+       }
+       setting_genlist_unregister_tts_access_highlight(item_data->eo_check,item_data->itc);
+       elm_layout_content_set(ly_radio, "elm.swallow.content", radio);
+       //return check;
+       return ly_radio;
+}
+
+static Evas_Object *__add_radio_text(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+{
+       retv_if(!item_data || !parent, NULL);
+       if (!item_data->rgd) {  /* exceptional handling */
+               item_data->rgd = elm_radio_add(parent);
+               elm_radio_state_value_set(item_data->rgd, -1);
+       }
        Evas_Object *radio = elm_radio_add(parent);
+       evas_object_propagate_events_set(radio, EINA_FALSE);
+       evas_object_repeat_events_set(radio, EINA_FALSE);
        elm_radio_state_value_set(radio,
                                  item_data->chk_status);
        elm_radio_group_add(radio, item_data->rgd);
@@ -469,49 +695,309 @@ static Evas_Object *__add_radio(Setting_GenGroupItem_Data *item_data, Evas_Objec
        }
        return radio;
 }
+
+
 static Evas_Object *__add_button(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
        Evas_Object *btn = elm_button_add(parent);
+       elm_object_text_set(btn, "Edit");
        evas_object_show(btn);
        if (item_data->r_swallow_path)
        {
                elm_object_style_set(btn, item_data->r_swallow_path);
        }
-       if (item_data->keyStr)
+       if (item_data->keyStr && item_data->swallow_type != SWALLOW_Type_1RADIO_1BTN)
        {
                elm_object_text_set(btn, _(item_data->keyStr));
        }
        evas_object_propagate_events_set(btn, EINA_FALSE);
-       if (item_data->chk_change_cb)
+
+       if(item_data->stop_change_cb)   /* just only for 1radio_1btn type */
+       {
+               /* arrow button's tts info */
+               if(safeStrCmp(item_data->keyStr, "IDS_ST_BODY_SIMPLE_PASSWORD") == 0)
+                       setting_set_tts_info(btn, "Change simple password", NULL, NULL, NULL);
+               else if(safeStrCmp(item_data->keyStr, "IDS_ST_BODY_PASSWORD") == 0)
+                       setting_set_tts_info(btn, "Change password", NULL, NULL, NULL);
+
+               evas_object_smart_callback_add(btn,
+                                              "clicked",
+                                              item_data->stop_change_cb,
+                                              item_data);
+       }
+       else if(item_data->chk_change_cb)       /* for other types */
+       {
                evas_object_smart_callback_add(btn,
                                               "clicked",
                                               item_data->chk_change_cb,
                                               item_data);
+       }
+       SETTING_TRACE_DEBUG("toggleDisableFlag %u", item_data->toggleDisableFlag);
+       if(item_data->toggleDisableFlag)
+               elm_object_disabled_set(btn, EINA_TRUE);
        return btn;
 }
 
-static Evas_Object *__add_entry(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+
+static Evas_Object *__add_gif(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
+       Evas_Object *image = NULL;
+       const char **png_list = (const char **)item_data->belongs_to;
+
+       //SETTING_TRACE("item_data->belongs_to:%p", png_list);
+       if (png_list && *png_list) {
+               if (png_list[1]) {      //png_list is an array end with 'NULL', and it has at least 2 png file,
+                       image = setting_create_gif(parent, png_list);
+               } else {        //png_list just has one png file,
+                       image = setting_create_image(parent, *png_list);
+               }
+       }
+
+       return image;
+}
+
+static Evas_Object *__add_image(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+{
+       retv_if(!item_data || !parent || !item_data->l_swallow_path, NULL);
+       Evas_Object *image = NULL;
+       image = setting_create_image(parent, item_data->l_swallow_path);
+       return image;
+}
+
+static void __entry_without_layout_focused_cb(void *data, Evas_Object *obj, void *ei) // Focused callback will show X marked button and hide guidetext.
+{
+       SETTING_TRACE_BEGIN;
+       Setting_GenGroupItem_Data *id = data;
+       if (!elm_entry_is_empty(obj))
+       {
+               elm_object_item_signal_emit(id->item, "elm,state,eraser,show", "");
+       }
+       elm_object_item_signal_emit(id->item, "elm,state,rename,hide", "");
+
+       // accessibiliy
+       Evas_Object *acc = elm_object_item_access_object_get(id->item);
+       if (!acc) return;
+
+       const char *txt = elm_entry_entry_get(obj);
+       if (!txt || 0 == strlen(txt))
+               txt = elm_object_part_text_get(obj, "elm.guide");
+
+       // Say entry focused
+       Eina_Stringshare *str = eina_stringshare_printf("%s, Edit Field, Keyboard opened", txt);
+       elm_access_say((char *)str);
+       eina_stringshare_del(str);
+       SETTING_TRACE_END;
+}
+
+static void __entry_without_layout_unfocused_cb(void *data, Evas_Object *obj, void *event_info) // Unfocused callback will show guidetext and hide X marked button.
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(data == NULL, "invalid parameter: data is NULL");
+       Setting_GenGroupItem_Data *id = data;
+       setting_retm_if(id->item == NULL, "item is NULL");
+       elm_object_item_signal_emit(id->item, "elm,state,eraser,hide", "");
+       elm_object_item_signal_emit(id->item, "elm,state,rename,show", "");
+       SETTING_TRACE_END;
+}
+
+static void __rejected_char_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+
+       //SETTING_TRACE_DEBUG("Input char is not an Alphanumeric&Symbol.");
+       setting_create_simple_popup(NULL, elm_object_parent_widget_get(obj), NULL, _("IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"));
+}
+
+static Evas_Object *__add_entry_without_layout(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+{
        elm_genlist_mode_set(parent, ELM_LIST_COMPRESS);        /* resolve abnormal height issue */
        Evas_Object *entry = NULL;
-       entry = ea_editfield_add(parent, EA_EDITFIELD_SINGLELINE);
+       Ea_Editfield_Type type;
+
+       if(item_data->isPasswordFlag){
+               type = EA_EDITFIELD_SCROLL_SINGLELINE_PASSWORD;
+       }else if(item_data->isSinglelineFlag){
+               type = EA_EDITFIELD_SINGLELINE;
+       }else{
+               type = EA_EDITFIELD_MULTILINE;
+       }
+       item_data->eo_check = entry = ea_editfield_add(parent, type);
+       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       if(item_data->focus_unallowed){
+               elm_object_focus_allow_set(entry,EINA_FALSE);
+       }
+       elm_entry_input_panel_layout_set(entry,
+                                        item_data->input_type);
+       //elm_entry_context_menu_disabled_set(entry, TRUE);
+       //elm_entry_magnifier_disabled_set(entry, TRUE);
+       elm_entry_prediction_allow_set(entry, FALSE);
+       elm_entry_input_panel_return_key_type_set(entry, item_data->return_key_type);
+       if (item_data->disable_auto_cap) {
+               elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
+       }
+
+       if (item_data->isSinglelineFlag) {
+               elm_entry_scrollable_set(entry, EINA_TRUE);
+               elm_entry_single_line_set(entry, EINA_TRUE);
+               elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
+       }else{
+               /*for multi-line editfield or entry, need to disable clear button,refer to P130802-3553*/
+               ea_editfield_clear_button_disabled_set(entry, EINA_TRUE);
+       }
+
+       if (item_data->isPasswordFlag) {
+               //elm_entry_single_line_set(entry, EINA_TRUE);
+               elm_entry_password_set(entry, EINA_TRUE);
+               elm_entry_input_panel_return_key_disabled_set(entry, EINA_TRUE);
+
+               static Elm_Entry_Filter_Accept_Set accept_filter_data;
+               accept_filter_data.accepted = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!""#$%&'()*+,-./:;<=>?@[]\\^_`{|}~";
+               accept_filter_data.rejected = NULL;
+               elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, &accept_filter_data);
+
+               evas_object_smart_callback_add(entry, "rejected", __rejected_char_cb, item_data);
+       }
+
+       if (item_data->limit_filter_data) {
+               elm_entry_markup_filter_append
+                   (entry,
+                    elm_entry_filter_limit_size,
+                    item_data->limit_filter_data);
+
+               if (item_data->maxlength_reached_cb) {
+                       evas_object_smart_callback_add(entry,
+                                                     "maxlength,reached",
+                                                     item_data->maxlength_reached_cb,
+                                                     item_data);
+               } else {
+                       evas_object_smart_callback_add(entry,
+                                                     "maxlength,reached",
+                                                     __max_len_reached,
+                                                     item_data);
+               }
+       }
+
+       //SETTING_TRACE("item_data->stop_change_cb:%p", item_data->stop_change_cb);
+       if (item_data->stop_change_cb) {//invoked when stop focusing on
+               evas_object_smart_callback_add(entry,
+                                             "unfocused",
+                                             item_data->stop_change_cb,
+                                             item_data);
+       }
+       else
+       {
+               evas_object_smart_callback_add(entry,
+                                             "unfocused",
+                                             __entry_without_layout_unfocused_cb,
+                                             item_data);
+       }
+       if (item_data->digits_filter_data) {
+               elm_entry_markup_filter_append(entry,
+                                               elm_entry_filter_accept_set,
+                                               item_data->digits_filter_data);
+       }
 
-       char* def_str = NULL;
-       def_str = item_data->sub_desc;
 
-       if (def_str && safeStrLen(def_str) > 0) {
-               elm_entry_entry_set(entry, def_str);
+       if (item_data->sub_desc && safeStrLen(item_data->sub_desc) > 0) {
+               elm_entry_entry_set(entry, item_data->sub_desc);
        } else {
-               elm_object_part_text_set(entry , "elm.guide", _("IDS_ST_BODY_TAP_TO_INSERT"));
+               if(item_data->guide_text)
+               {
+                       elm_object_part_text_set(entry, "elm.guide", _(item_data->guide_text)); // Add guide text to elm_entry.
+               }
+               else
+               {
+                       elm_object_part_text_set(entry, "elm.guide", _("IDS_ST_BODY_TAP_TO_INSERT"));
+               }
+       }
+
+
+       /* for Setting App, All the entrys's context popup shouldn't be able */
+       /* to insert images, text is the only one can be inserted. */
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+
+       if (item_data->chk_change_cb)
+       {
+               evas_object_smart_callback_add(entry,
+                                               "changed",
+                                               item_data->chk_change_cb,
+                                               item_data);
+               evas_object_smart_callback_add(entry,
+                                               "preedit,changed",
+                                               item_data->chk_change_cb,
+                                               item_data);
+       }
+       else
+       {
+               //default handle
+               evas_object_smart_callback_add(entry, "changed", __entry_changed, item_data);
+       }
+
+       /* callback for handling enter key */
+       if(item_data->activated_cb)
+       {
+               evas_object_smart_callback_add(entry,
+                                               "activated",
+                                               item_data->activated_cb,
+                                               item_data);
+       }
+
+       //SETTING_TRACE("item_data->focus_cb:%p", item_data->focus_cb);
+
+       if (item_data->focus_cb)
+       {
+               evas_object_smart_callback_add(entry, "focused", item_data->focus_cb, item_data);
+       } else
+       {
+               evas_object_smart_callback_add(entry, "focused", __entry_without_layout_focused_cb, item_data);
        }
 
-       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0);
-       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0);
+       //elm_object_signal_callback_add(ed_name, "elm,eraser,clicked", "elm", __eraser_clicked, entry);
+
+       if (item_data->start_change_cb) {
+               evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, (Evas_Object_Event_Cb)(item_data->start_change_cb), item_data->userdata);
+       }
+       else
+       {
+               evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, __entry_keydown, item_data);
+       }
+
+       Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(entry);
+       if(imf_context && item_data->x_callback_cb)
+       {
+               ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                               ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                               item_data->x_callback_cb,
+                                                               item_data->userdata);
+       }
+       if (item_data->input_panel_disable_flag)
+       {
+               elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+       }
+       if(entry && item_data->entry_auto_focus){
+               evas_object_show(entry);
+               elm_object_focus_set(entry, EINA_TRUE);
+       }
+
+       return entry;
+}
 
+static Evas_Object *__add_entry(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+{
+       retv_if(!item_data || !parent, NULL);
+       elm_genlist_mode_set(parent, ELM_LIST_COMPRESS);        /* resolve abnormal height issue */
+       Evas_Object *ed_name =
+           setting_create_editfiled(parent, _(item_data->keyStr),
+                                    item_data->sub_desc, item_data->guide_text);
+       evas_object_pass_events_set(ed_name, 1);
+       evas_object_propagate_events_set(ed_name, 0);
+       Evas_Object *entry = elm_object_part_content_get(ed_name, "elm.swallow.content");
        item_data->eo_check = entry;
-       elm_entry_input_panel_layout_set(entry, item_data->input_type);
+       elm_entry_input_panel_layout_set(entry,
+                                        item_data->input_type);
 
        if (item_data->isSinglelineFlag) {
                elm_entry_scrollable_set(entry, EINA_TRUE);
@@ -524,51 +1010,101 @@ static Evas_Object *__add_entry(Setting_GenGroupItem_Data *item_data, Evas_Objec
        }
 
        if (item_data->limit_filter_data) {
-               elm_entry_markup_filter_append (entry,
+               elm_entry_markup_filter_append
+                   (entry,
                     elm_entry_filter_limit_size,
                     item_data->limit_filter_data);
 
                if (item_data->maxlength_reached_cb) {
-                       evas_object_smart_callback_add(entry, "maxlength,reached", item_data->maxlength_reached_cb, item_data);
+                       evas_object_smart_callback_add(entry,
+                                                     "maxlength,reached",
+                                                     item_data->maxlength_reached_cb,
+                                                     item_data);
                } else {
-                       evas_object_smart_callback_add(entry, "maxlength,reached", __max_len_reached, item_data);
+                       evas_object_smart_callback_add(entry,
+                                                     "maxlength,reached",
+                                                     __max_len_reached,
+                                                     item_data);
                }
        }
        if (item_data->stop_change_cb) {//invoked when stop focusing on
-               evas_object_smart_callback_add(entry, "unfocused", item_data->stop_change_cb, item_data);
-       } else {
-               evas_object_smart_callback_add(entry, "unfocused", __entry_unfocused, item_data);
+               evas_object_smart_callback_add(entry,
+                                                     "unfocused",
+                                                     item_data->stop_change_cb,
+                                                     item_data);
+       }
+       else
+       {
+               evas_object_smart_callback_add(entry,
+                                             "unfocused",
+                                             __entry_unfocused,
+                                             ed_name);
        }
-
        if (item_data->digits_filter_data) {
-               elm_entry_markup_filter_append ( entry, elm_entry_filter_accept_set, item_data->digits_filter_data);
+               elm_entry_markup_filter_append(entry,
+                                                                               elm_entry_filter_accept_set,
+                                                                               item_data->digits_filter_data);
        }
 
        /* for Setting App, All the entrys's context popup shouldn't be able */
        /* to insert images, text is the only one can be inserted. */
        elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
 
-       if (item_data->chk_change_cb) {
-               evas_object_smart_callback_add (entry, "changed", item_data->chk_change_cb, item_data);
+       if (item_data->chk_change_cb)
+       {
+               evas_object_smart_callback_add(entry,
+                                                                       "changed",
+                                                                       item_data->chk_change_cb,
+                                                                       item_data);
+       }
+       else
+       {
+               //default handle
+               evas_object_smart_callback_add(entry, "changed", __entry_changed, item_data);
+       }
+
+       /* callback for handling enter key */
+       if(item_data->activated_cb)
+       {
+               evas_object_smart_callback_add(entry,
+                                                                       "activated",
+                                                                       item_data->activated_cb,
+                                                                       item_data);
        }
-       //default handle
-       evas_object_smart_callback_add(entry, "changed", __entry_changed, item_data);
-       evas_object_smart_callback_add(entry, "focused", __entry_focused, entry);
-       elm_object_signal_callback_add(entry, "elm,eraser,clicked", "elm", __eraser_clicked, entry);
+
+       if (item_data->focus_cb)
+       {
+               evas_object_smart_callback_add(entry, "focused", item_data->focus_cb, item_data);
+       } else
+       {
+               evas_object_smart_callback_add(entry, "focused", __entry_focused, ed_name);
+       }
+
+       elm_object_signal_callback_add(ed_name, "elm,eraser,clicked", "elm", __eraser_clicked, entry);
 
        if (item_data->start_change_cb) {
                evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, (Evas_Object_Event_Cb)(item_data->start_change_cb), item_data->userdata);
        }
-       evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, __entry_keydown, item_data);
+       else
+       {
+               evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, __entry_keydown, item_data);
+       }
 
-       if (item_data->input_panel_disable_flag) {
+       Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(entry);
+       if(imf_context)
+       {
+               ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                                                       ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                                                       item_data->x_callback_cb,
+                                                                                       item_data->userdata);
+       }
+       if (item_data->input_panel_disable_flag)
+       {
                elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
        }
-       return entry;
-
-       // ??? 
-       //elm_entry_prediction_allow_set(entry, FALSE);
+       return ed_name;
 }
+
 static Evas_Object *__add_slider(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
@@ -590,11 +1126,44 @@ static Evas_Object *__add_slider(Setting_GenGroupItem_Data *item_data, Evas_Obje
        return li_slider;
 }
 
-static inline void _datefield_back_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+static Evas_Object *__add_layout(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
-       elm_object_signal_emit(obj, "picker,hide", "");
-}
-static void _datefield_edit_start_cb(void *data, Evas_Object *obj, void *event_info)
+       retv_if(!item_data || !parent, NULL);
+       Evas_Object *layout = elm_layout_add(parent);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       int w = item_data->chk_status;
+       int h = item_data->chk_status;
+       elm_object_part_content_set(layout, "elm.swallow.bg", setting_create_blank_rect_customize(parent,w,h));
+       //elm_object_part_content_set(layout, "elm.swallow.content", navi);
+       #if 0
+       char **load_arglist = (char **)item_data->belongs_to;
+       char *load_name = item_data->keyStr;
+       char *load_style = item_data->item_style;
+       if(0 == safeStrCmp(load_style, "APP"))
+               app_launcher(load_name);//how to adjust the size
+       else if(0 == safeStrCmp(load_style, "UG"))
+       {
+               struct ug_cbs cbs = {0,};
+
+               cbs.layout_cb = __ug_layout_cb;
+               cbs.result_cb = __ug_result_cb;
+               cbs.destroy_cb = __ug_destroy_cb;
+               cbs.priv = ad;
+
+               ad->camera_ug = setting_ug_create(NULL, load_name, UG_MODE_FULLVIEW, ad->app_control_handle, &cbs);
+       }
+
+       #endif
+       return layout;
+}
+
+static inline void _datefield_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_signal_emit(obj, "picker,hide", "");
+}
+static void _datefield_edit_start_cb(void *data, Evas_Object *obj, void *event_info)
 {
        ea_object_event_callback_add(obj, EA_CALLBACK_BACK, _datefield_back_cb, NULL);
 }
@@ -604,42 +1173,265 @@ static void _datefield_edit_end_cb(void *data, Evas_Object *obj, void *event_inf
        ea_object_event_callback_del(obj, EA_CALLBACK_BACK, _datefield_back_cb);
 }
 
+static void __picker_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *popup = data;
+       evas_object_del(popup);
+}
+
+static void __picker_popup_set_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       //printf("Set clicked\n");
+       SETTING_TRACE_BEGIN;
+       SETTING_TRACE("DEFAULT @@@");
+       elm_object_signal_emit(data, "picker,action,value,set", "");
+       //Evas_Object *popup = evas_object_data_get((Evas_Object *)data, "popup");
+       //evas_object_del(popup);
+}
+
+static Evas_Object* _datefield_picker_popup_add(Evas_Object *parent, Evas_Object *datetime, void* data)
+{
+       Datefield_Paramdata*  param = (Datefield_Paramdata*)data;
+
+       Setting_GenGroupItem_Data *item_data = param->item_data;
+
+       Evas_Object *popup = elm_popup_add(parent);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       Evas_Object *cancel_btn = elm_button_add(popup);
+       elm_object_style_set(cancel_btn, "popup");
+       elm_object_text_set(cancel_btn, "Cancel");
+       elm_object_part_content_set(popup, "button1", cancel_btn);
+       evas_object_smart_callback_add(cancel_btn, "clicked", __picker_popup_cancel_btn_clicked_cb, popup);
+
+       Evas_Object *set_btn = elm_button_add(popup);
+       elm_object_style_set(set_btn, "popup");
+       elm_object_text_set(set_btn,"Set");
+       elm_object_part_content_set(popup, "button2", set_btn);
+
+       if (item_data->activated_cb)
+               //evas_object_smart_callback_add(set_btn, "clicked", item_data->activated_cb, datetime);
+               evas_object_smart_callback_add(set_btn, "clicked", item_data->activated_cb, item_data);
+       else
+               evas_object_smart_callback_add(set_btn, "clicked", __picker_popup_set_btn_clicked_cb, datetime);
+
+       return popup;
+}
+
+static void _datefield_date_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+
+       //Evas_Object *parent = data;
+       Datefield_Paramdata*  param = (Datefield_Paramdata*)data;
+       Evas_Object *popup = _datefield_picker_popup_add(param->parent, obj/*elm_button*/, param/* context */);
+
+       elm_object_part_text_set(popup, "title,text", "Set date");
+
+       Evas_Object* datetime = elm_datetime_add(param->parent);
+
+       evas_object_data_set(datetime, "popup", popup); 
+
+       //---------------------------------------
+       param->item_data->eo_check = datetime;
+       //---------------------------------------
+
+       elm_object_content_set(popup, datetime);
+       evas_object_show(popup);
+
+       //---------------------------------------
+       //param->item_data->eo_check = param->box;
+       //---------------------------------------
+}
+
+static void _datefield_time_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Datefield_Paramdata*  param = (Datefield_Paramdata*)data;
+
+       Evas_Object* datetime = elm_datetime_add(param->parent);
+
+       elm_object_style_set(datetime, "date_layout");
+
+       char* pa_time_format = get_pa_time_format_str();
+       if(!strncmp(pa_time_format,"IDS_COM_BODY_12_HOURS",strlen("IDS_COM_BODY_12_HOURS")))
+               elm_datetime_format_set(datetime, "%l:%M %P");
+       else
+               elm_datetime_format_set(datetime, "%H:%M");
+
+       evas_object_size_hint_align_set(datetime, 0.5 , 0.5);
+       evas_object_show(datetime);
+
+       Evas_Object *popup = _datefield_picker_popup_add(param->parent, obj, (void*)data);
+       elm_object_part_text_set(popup, "title,text", "Set time");
+
+       evas_object_data_set(datetime, "popup", popup); 
+
+       //---------------------------------------
+       param->item_data->eo_check = datetime;
+       //---------------------------------------
+
+       elm_object_content_set(popup, datetime);
+       evas_object_show(popup);
+
+       FREE(pa_time_format);
+       //---------------------------------------
+       //param->item_data->eo_check = param->box;
+       //---------------------------------------
+}
+
+EXPORT_PUBLIC char *__setting_phone_lang_get_by_pattern(const char *locale, const char *skeleton)
+{
+       //setting_retvm_if(!locale, NULL, "locale parameter is NULL");
+       //setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
+
+       //remove ".UTF-8" in locale
+       char locale_tmp[DEF_BUF_SIZE] = {0,};
+       strcpy(locale_tmp, locale);
+       locale_tmp[DEF_BUF_SIZE-1] = '\0';
+
+       char *p = safeStrStr(locale_tmp, ".UTF-8");
+       if (p) {
+               *p = 0;
+       }
+
+       char *ret_str = NULL;
+       UChar customSkeleton[SETTING_STR_SLP_LEN] = { 0, };
+       UErrorCode status = U_ZERO_ERROR;
+       UDateFormat *formatter = NULL;
+
+       UChar bestPattern[SETTING_STR_SLP_LEN] = { 0, };
+       UChar formatted[SETTING_STR_SLP_LEN] = { 0, };
+
+       char bestPatternString[SETTING_STR_SLP_LEN] = { 0, };
+       char formattedString[SETTING_STR_SLP_LEN] = { 0, };
+
+       u_uastrncpy(customSkeleton, skeleton, safeStrLen(skeleton));
+
+       UDateTimePatternGenerator *pattern_generator;
+       pattern_generator = udatpg_open(locale_tmp, &status);
+
+       int32_t bestPatternCapacity = (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0]));
+       (void)udatpg_getBestPattern(pattern_generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status);
+
+       u_austrcpy(bestPatternString, bestPattern);
+       SETTING_TRACE("BestPattern is %s", bestPatternString);
+
+       UDate date = ucal_getNow();
+       formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale_tmp, NULL, -1, bestPattern, -1, &status);
+       int32_t formattedCapacity = (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
+       (void)udat_format(formatter, date, formatted, formattedCapacity, NULL, &status);
+       u_austrcpy(formattedString, formatted);
+       SETTING_TRACE("DATE & TIME is %s", formattedString);
+
+       udat_close(formatter);
+
+       ret_str = g_strdup(formattedString);
+       return ret_str;
+}
+
+
+/**
+ * eo_check ??
+ */
+static Evas_Object *__add_datefield_new(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!item_data || !parent, NULL);
+
+       Datefield_Paramdata*  param = malloc(sizeof(Datefield_Paramdata));
+
+       param->item_data = item_data;
+       //param->parent = parent;
+       param->parent = item_data->nf;
+
+       char *date = __setting_phone_lang_get_by_pattern("en_US", "MMM/d/yyyy");
+       char *pa_time_format = get_pa_time_format_str();
+       char *time;
+
+       if(!strncmp(pa_time_format, "IDS_COM_BODY_12_HOURS", strlen("IDS_COM_BODY_12_HOURS")))
+               time = __setting_phone_lang_get_by_pattern("en_US", "hhmm");
+       else
+               time = __setting_phone_lang_get_by_pattern("en_US", "Hm");
+
+       SETTING_TRACE("DATE : %s ", date);
+       SETTING_TRACE("TIME : %s ", time);
+
+       Evas_Object *btn_left = elm_button_add(parent);
+       elm_object_style_set(btn_left, "datetime");
+    evas_object_size_hint_weight_set(btn_left, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_min_set(btn_left, ELM_SCALE_SIZE(90), -1);
+       evas_object_resize(btn_left, 300, -1);
+
+       elm_object_text_set(btn_left, date);
+       //param->btn_left = btn_left;
+       evas_object_smart_callback_add(btn_left, "clicked", _datefield_date_btn_clicked_cb , param);
+       evas_object_show(btn_left);
+
+       Evas_Object *btn_right = elm_button_add(parent);
+       elm_object_style_set(btn_right, "datetime");
+    evas_object_size_hint_weight_set(btn_right, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_min_set(btn_right, ELM_SCALE_SIZE(90), -1);
+       evas_object_resize(btn_right, 270, -1);
+       elm_object_text_set(btn_right, time);
+       //param->btn_right = btn_right;
+       evas_object_smart_callback_add(btn_right, "clicked", _datefield_time_btn_clicked_cb , param);
+       evas_object_show(btn_right);
+
+       Evas_Object *box = elm_box_add(parent);
+    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    //evas_object_size_hint_align_set(box, 0.0, EVAS_HINT_FILL);
+       elm_box_horizontal_set(box, 1);
+       elm_box_align_set(box, 0.5, 0.0);
+    elm_box_padding_set(box, ELM_SCALE_SIZE(15), ELM_SCALE_SIZE(5));
+
+       param->item_data->btn_left = btn_left;
+       param->item_data->btn_right = btn_right;
+
+       elm_box_pack_end(box, btn_left);
+       elm_box_pack_end(box, btn_right);
+       evas_object_show(box);
+
+       //item_data->eo_check = box;
+       FREE(pa_time_format);
+       return box;
+}
+
+
+
 static Evas_Object *__add_datefield(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
+       SETTING_TRACE_BEGIN;
        retv_if(!item_data || !parent, NULL);
        /* **********create time/date field */
        Evas_Object *datetimefield = item_data->eo_check = elm_datetime_add(parent);
        evas_object_size_hint_weight_set(datetimefield, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(datetimefield, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_align_set(datetimefield, 0.3, 0.5);
        evas_object_show(datetimefield);
 
-       evas_object_pass_events_set(datetimefield, 1);
-       evas_object_propagate_events_set(datetimefield, 0);
-
        evas_object_smart_callback_add(datetimefield, "edit,start", _datefield_edit_start_cb, NULL);
-        evas_object_smart_callback_add(datetimefield, "edit,end", _datefield_edit_end_cb, NULL);
+    evas_object_smart_callback_add(datetimefield, "edit,end", _datefield_edit_end_cb, NULL);
 
-       char date_format[MAX_DATETIME_FORMAT_LEN + 1] = {0, };
-       const char *time_format = NULL;
-       if (item_data->chk_status)//12 hours
-       {
-               time_format = "%I:%M%p";
-       } else { //24 hours
-               time_format = "%H:%M";
-       }
+       evas_object_smart_callback_add(datetimefield, "date,btn,clicked", _datefield_date_btn_clicked_cb, parent);
+       evas_object_smart_callback_add(datetimefield, "time,btn,clicked", _datefield_time_btn_clicked_cb, parent);
 
 #if SUPPORT_DATEFIELD_DATE_FORMAT_AUTOSET //Get date-format from datefiled itself, if elm_datetime_add() supports set date-format via ICU.
+       char date_format[MAX_DATETIME_FORMAT_LEN + 1] = {0, };
        char *old_format = elm_datetime_format_get(datetimefield);
        snprintf(date_format, MAX_DATE_FORMAT_LEN + 1, //add one space " "
                 "%s", old_format);
        safeStrNCat(date_format, time_format, MAX_DATETIME_FORMAT_LEN);
        FREE(old_format);
        SETTING_TRACE("datefield_format:%s", date_format);
+       elm_datetime_format_set(datetimefield, date_format);
 #else
-       snprintf(date_format, MAX_DATETIME_FORMAT_LEN,
-                "%s %s", item_data->sub_desc, time_format);
-#endif
+       char *date_format = NULL;
+       date_format = get_pa_datetime_format_str();
+       SETTING_TRACE_DEBUG("datetime format : %s", date_format);
        elm_datetime_format_set(datetimefield, date_format);
+       FREE(date_format);
+#endif
 
        // min : 2000 1, 01
        // max : 2036 12, 31
@@ -672,11 +1464,24 @@ static Evas_Object *__add_datefield(Setting_GenGroupItem_Data *item_data, Evas_O
                                               item_data);
        }
 
+       if (item_data->activated_cb) {
+               evas_object_smart_callback_add(datetimefield,
+                                              "picker,value,set",
+                                              item_data->activated_cb,
+                                              item_data);
+       }
+
        if (item_data->isItemDisableFlag) {
                setting_disable_evas_object(datetimefield);
        }
-       return datetimefield;
+
+       Evas_Object *box = elm_box_add(parent);
+       elm_box_horizontal_set(box, 1);
+       elm_box_pack_end(box, datetimefield);
+       evas_object_show(box);
+       return box;
 }
+
 static Evas_Object *__add_radio_search(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
@@ -684,7 +1489,7 @@ static Evas_Object *__add_radio_search(Setting_GenGroupItem_Data *item_data, Eva
        elm_box_horizontal_set(box, 1);
 
        //a.radio..
-       Evas_Object *radio = __add_radio(item_data, parent);
+       /*Evas_Object *radio = __add_radio(item_data, parent);
        setting_disable_evas_object(radio);
        elm_box_pack_end(box, radio);
 
@@ -693,11 +1498,11 @@ static Evas_Object *__add_radio_search(Setting_GenGroupItem_Data *item_data, Eva
                setting_create_blank_rect_customize(box,
                                SETTING_HALF_SCREEN_WIDTH,
                                SETTING_PADDING_HEIGHT);
-       elm_box_pack_end(box, separator);
+       elm_box_pack_end(box, separator);*/
 
        //c.progressbar..
        Evas_Object *progressbar = elm_progressbar_add(parent);
-       elm_object_style_set(progressbar, "list_process");
+       elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
        evas_object_size_hint_align_set(progressbar,
                                        EVAS_HINT_FILL, 0.5);
        evas_object_size_hint_weight_set(progressbar,
@@ -710,6 +1515,7 @@ static Evas_Object *__add_radio_search(Setting_GenGroupItem_Data *item_data, Eva
        evas_object_show(box);
        return box;
 }
+
 static Evas_Object *__add_search(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
@@ -725,7 +1531,7 @@ static Evas_Object *__add_search(Setting_GenGroupItem_Data *item_data, Evas_Obje
 
        //c.progressbar..
        Evas_Object *progressbar = elm_progressbar_add(parent);
-       elm_object_style_set(progressbar, "list_process");
+       elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
        evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
        evas_object_size_hint_weight_set(progressbar,
                                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -737,11 +1543,12 @@ static Evas_Object *__add_search(Setting_GenGroupItem_Data *item_data, Evas_Obje
        return box;
 
 }
+
 static Evas_Object *__add_process(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
        retv_if(!item_data || !parent, NULL);
        Evas_Object *progressbar = elm_progressbar_add(parent);
-       elm_object_style_set(progressbar, "list_process");
+       elm_object_style_set(progressbar, PROGRESSBAR_STYLE);
        evas_object_size_hint_align_set(progressbar,
                                        EVAS_HINT_FILL, 0.5);
        evas_object_size_hint_weight_set(progressbar,
@@ -764,19 +1571,70 @@ static Evas_Object *__add_radio_lable(Setting_GenGroupItem_Data *item_data, Evas
 
 static Evas_Object *__add_left_default(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
-       retv_if(!item_data || !parent || !item_data->l_swallow_path, NULL);
-       Evas_Object *icon = elm_icon_add(parent);
-       elm_icon_file_set(icon, item_data->l_swallow_path,NULL);
-       evas_object_size_hint_aspect_set(icon,EVAS_ASPECT_CONTROL_VERTICAL,1, 1);
-       return icon;
+       if(!item_data || !parent || !item_data->l_swallow_path)
+       {
+               return NULL;
+       }
+
+       if (SWALLOW_Type_1ICON_WITHOUT_CIRCLE_BG == item_data->swallow_type
+           || SWALLOW_Type_1ICON_1DOTTOOGLE == item_data->swallow_type
+           || SWALLOW_Type_1ICON_1IMAGE == item_data->swallow_type)
+       {
+               Evas_Object *icon = elm_icon_add(parent);
+               elm_image_file_set(icon, item_data->l_swallow_path,NULL);
+               evas_object_size_hint_aspect_set(icon,EVAS_ASPECT_CONTROL_VERTICAL,1, 1);
+               return icon;
+       }
+
+       Evas_Object *ic = NULL;
+       ic = elm_layout_add(parent);
+       Evas_Object *c = NULL;
+
+       elm_layout_theme_set(ic, "layout", "list/B/type.4", "default");
+       c = elm_image_add(parent);
+       elm_image_file_set(c, item_data->l_swallow_path, NULL);
+       setting_decorate_image(c, "W011");//W011:bg, T051:text
+       evas_object_size_hint_align_set(c, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(c, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_content_set(ic, "elm.swallow.content", c);
+
+       return ic;
 }
+
 static Evas_Object *__add_right_default(Setting_GenGroupItem_Data *item_data, Evas_Object *parent)
 {
-       retv_if(!item_data || !parent || !item_data->r_swallow_path, NULL);
+       if(!item_data || !parent || !item_data->r_swallow_path)
+       {
+               return NULL;
+       }
+
+#if 0
        Evas_Object *icon = elm_icon_add(parent);
-       elm_icon_file_set(icon, item_data->r_swallow_path,NULL);
+       elm_image_file_set(icon, item_data->r_swallow_path,NULL);
        evas_object_size_hint_aspect_set(icon,EVAS_ASPECT_CONTROL_VERTICAL,1, 1);
+       if(!safeStrCmp(item_data->r_swallow_path, SETTING_IMAGE_PATH_CFG"00_list_button_expand_closed.png"))
+               setting_decorate_image(icon, "W011");//
+       else if(!safeStrCmp(item_data->r_swallow_path, SETTING_IMAGE_PATH_CFG"00_list_button_expand_opened.png"))
+               setting_decorate_image(icon, "W011");//
        return icon;
+#else
+       Evas_Object *ic = NULL;
+       ic = elm_layout_add(parent);
+       Evas_Object *icon = NULL;
+
+       elm_layout_theme_set(ic, "layout", "list/C/type.3", "default");
+       icon = elm_image_add(parent);
+       if(!safeStrCmp(item_data->r_swallow_path, SETTING_IMAGE_PATH_CFG"00_list_button_expand_closed.png"))
+               setting_decorate_image(icon, "W011");//
+       else if(!safeStrCmp(item_data->r_swallow_path, SETTING_IMAGE_PATH_CFG"00_list_button_expand_opened.png"))
+               setting_decorate_image(icon, "W011");//
+       elm_image_file_set(icon, item_data->r_swallow_path, NULL);
+       evas_object_size_hint_align_set(icon, 0.0, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_content_set(ic, "elm.swallow.content", icon);
+       return ic;
+
+#endif
 }
 
 // draw handler
@@ -789,14 +1647,19 @@ typedef struct
 static __Content_Drawer __cd_left[SWALLOW_Type_MAX] = {
        //base objects
        {SWALLOW_Type_1CHECK, __add_check},
+       {SWALLOW_Type_1ICON_1CHECK, __add_check},
        {SWALLOW_Type_1TOGGLE, __add_toggle},
        {SWALLOW_Type_1RADIO, __add_radio},
        {SWALLOW_Type_1BUTTON, __add_button},
+       {SWALLOW_Type_1GIF, __add_gif},
+       {SWALLOW_Type_1IMAGE, __add_image},
+       {SWALLOW_Type_1TEXT_1IMAGE, __add_image},
 
        //base objects in an layout
        {SWALLOW_Type_LAYOUT_ENTRY, __add_entry},
        {SWALLOW_Type_LAYOUT_SLIDER, __add_slider},
-       {SWALLOW_Type_LAYOUT_DATEFIELD, __add_datefield},
+       //{SWALLOW_Type_LAYOUT_DATEFIELD, __add_datefield2},
+       {SWALLOW_Type_LOAD_LAYOUT, __add_layout},
 
        //other compelx objects
        {SWALLOW_Type_1SEARCH, __add_search},
@@ -805,6 +1668,8 @@ static __Content_Drawer __cd_left[SWALLOW_Type_MAX] = {
        {SWALLOW_Type_1CHECKICON, __add_check_icon},
        {SWALLOW_Type_1RADIO_1SEARCH, __add_radio_search},
        {SWALLOW_Type_1RADIO_1LABLE, __add_radio_lable},
+       {SWALLOW_Type_1RADIO_1BTN, __add_radio},
+       {SWALLOW_Type_1RADIO_1TEXT, __add_radio_text},
 
        //left part object of the type
        {SWALLOW_Type_1ICON_1RADIO, __add_left_default},
@@ -813,60 +1678,107 @@ static __Content_Drawer __cd_left[SWALLOW_Type_MAX] = {
 };
 static __Content_Drawer __cd_right[SWALLOW_Type_MAX] = {
        //right part object of the type
+       {SWALLOW_Type_1CHECK_RIGHT, __add_check},
        {SWALLOW_Type_1ICON_1RADIO, __add_toggle},
+       {SWALLOW_Type_1ICON_1CHECK, __add_right_default},
+       {SWALLOW_Type_1ICON_1DOTTOOGLE, __add_dot_toggle},
        {SWALLOW_Type_1ICON_1PROCESS, __add_process},
        {SWALLOW_Type_1RADIO_1PROCESS, __add_process},
+       {SWALLOW_Type_1RADIO_1BTN, __add_button},
 };
 
 static __Content_Drawer __cd_end[SWALLOW_Type_MAX] = {
        //end part object of the type
        {SWALLOW_Type_1RADIO, __add_radio},
 };
-/*static __Part_Drawer __pd[__MAX_PART_NUM] = {
-       {"elm.icon", __cd_left},
-       {"elm.icon.1", __cd_left},
-       {"elm.icon.2", __cd_right},
-       {"elm.swallow.end", __cd_end},
-};*/
+
+static void __multiline_eraser_clicked(void *data, Evas_Object *obj, void *event_info) // When X marked button clicked, make string as empty.
+{
+       Setting_GenGroupItem_Data *list_item = data;
+       Evas_Object *entry = elm_object_item_part_content_get(list_item->item, "elm.icon.entry");
+       elm_object_focus_set(entry, EINA_TRUE); // After button is clicked, entry should get focus again.
+       elm_entry_entry_set(entry, "");
+}
 
 static Evas_Object *_gl_Gendial_content_get(void *data, Evas_Object *obj,
                                         const char *part)
 {
-//     SETTING_TRACE_BEGIN;
        retv_if(!data, NULL);
        Setting_GenGroupItem_Data *item_data = data;
        retv_if(!data, NULL);
        __Content_Drawer *cd_list = NULL;
        __drawer_fp fp = NULL;
-       //SETTING_TRACE(" ----> part : %s", part);
+       //SETTING_TRACE("content get [%s]",part);
+
 
-       if (!safeStrCmp(part, "elm.icon")
-               || !safeStrCmp(part, "elm.icon.1")
-               || !safeStrCmp(part, "elm.icon.entry")
-               )
+       if (!safeStrCmp(part, "elm.icon.1"))/* LEFT AREA */
        {
+               if(item_data->swallow_type == SWALLOW_Type_LAYOUT_EDITFIELD
+                       && item_data->isPasswordFlag == TRUE)
+                       return NULL;
                fp = __add_left_default; //hold default drawer
                cd_list = __cd_left;
        }
-       else if (!safeStrCmp(part, "elm.icon.2"))
+       else if (!safeStrCmp(part, "elm.icon.2"))/* RIGHT AREA */
        {
+               if(item_data->swallow_type == SWALLOW_Type_LAYOUT_EDITFIELD
+                       && item_data->isPasswordFlag == TRUE)
+                       return NULL;
                fp = __add_right_default; //hold default drawer
                cd_list = __cd_right;
        }
+       else if (!safeStrCmp(part, "elm.icon"))/* CENTER WHOLE */
+       {
+               fp = __add_left_default; //hold default drawer
+               cd_list = __cd_left;
+       }
        else if (!safeStrCmp(part, "elm.swallow.end"))
        {
                //the default value of fp is NULL here
                cd_list = __cd_end;
        }
-       if (!cd_list) return NULL;//invalid part
+       // To do : add code for editfield
+       else if(!safeStrCmp(part, "elm.icon.entry"))
+       {
+               if(item_data->swallow_type == SWALLOW_Type_LAYOUT_DATEFIELD)
+               {
+                       //fp = __add_datefield;
+                       fp = __add_datefield_new;
+               }
+               else
+               {
+                       fp = __add_entry_without_layout;
+               }
+       }
+       else if(!safeStrCmp(part, "elm.icon.eraser"))
+       {
+               //fp = __add_button_eraser;
+               Evas_Object *btn = elm_button_add(obj);
+               elm_object_style_set(btn, "editfield_clear"); //Make "X" marked button by changing style.
+               evas_object_smart_callback_add(btn, "clicked", __multiline_eraser_clicked, item_data);
+               return btn;
+       }
+       else if (!safeStrCmp(part, "elm.icon.edit"))
+       {
+               Evas_Object * btn = elm_button_add(obj);
+               elm_object_style_set(btn, "minus");
+               evas_object_propagate_events_set(btn, EINA_FALSE);
+               return btn;
+       }
+       // End.
 
-       int idx = 0;
-       for (; idx < SWALLOW_Type_MAX; idx++)
+       //if (!cd_list) return NULL;//invalid part
+
+       if(cd_list)
        {
-               if (item_data->swallow_type == cd_list[idx].type)//match using swallow type
+               int idx = 0;
+               for (; idx < SWALLOW_Type_MAX; idx++)
                {
-                       fp = cd_list[idx].draw;
-                       break;
+                       if (item_data->swallow_type == cd_list[idx].type)//match using swallow type
+                       {
+                               fp = cd_list[idx].draw;
+                               break;
+                       }
                }
        }
        return fp ? fp(item_data, obj) : NULL;
@@ -878,22 +1790,14 @@ static void _gl_Gendial_del(void *data, Evas_Object *obj)
        Setting_GenGroupItem_Data *item_data =
            (Setting_GenGroupItem_Data *) data;
        if (item_data) {
+               item_data->eo_check = NULL;//set to NULL at once
                G_FREE(item_data->keyStr);
                G_FREE(item_data->sub_desc);
+               G_FREE(item_data->guide_text);
                G_FREE((item_data->l_swallow_path));
                G_FREE((item_data->r_swallow_path));
                G_FREE(item_data->item_style);
 
-#if 1
-               if (item_data->stop_change_cb)
-               {
-                       SETTING_TRACE("remove unfocused handler callback");
-                       evas_object_smart_callback_del(item_data->eo_check,
-                                       "unfocused", item_data->stop_change_cb);
-                       item_data->stop_change_cb = NULL;
-               }
-#endif
-
 
                if (item_data->digits_filter_data)
                {
@@ -911,6 +1815,7 @@ static void _gl_Gendial_del(void *data, Evas_Object *obj)
                FREE(item_data->limit_filter_data);
                __BACK_POINTER_UNSET(item_data);
                FREE(item_data);
+               data = NULL;
        }
        /* SETTING_TRACE_END; */
 }
@@ -921,6 +1826,7 @@ static void _gl_Gendial_del(void *data, Evas_Object *obj)
  * @param[in] item_style
  * @param[in/out] itc
  */
+EXPORT_PUBLIC
 bool setting_create_Gendial_itc(const char *item_style,
                                Elm_Genlist_Item_Class *itc)
 {
@@ -937,6 +1843,7 @@ bool setting_create_Gendial_itc(const char *item_style,
  *
  * @return a pointer to Setting_GenGroupItem_Data
  */
+EXPORT_PUBLIC
 Setting_GenGroupItem_Data *setting_create_Gendial_field_group_titleItem(Evas_Object *genlist,
                                                const Elm_Genlist_Item_Class *itc,
                                                Elm_Object_Item *parent,
@@ -945,12 +1852,17 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_group_titleItem(Evas_Obj
                                                setting_call_back_func gl_sel)
 {
        /* SETTING_TRACE_BEGIN; */
+
+       ADD_GL_SEPARATOR(genlist);
        Setting_GenGroupItem_Data *item_data =
            (Setting_GenGroupItem_Data *) calloc(1,
                                                 sizeof
                                                 (Setting_GenGroupItem_Data));
        setting_retvm_if(!item_data, NULL, "calloc failed");
        item_data->keyStr = (char *)g_strdup(keyStr);
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
        if (gl_sel) {
                item_data->item =
                    elm_genlist_item_append(genlist, itc, item_data, parent,
@@ -960,6 +1872,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_group_titleItem(Evas_Obj
                    elm_genlist_item_append(genlist, itc, item_data, parent,
                                            flag, _gl_Gendial_sel, NULL);
        }
+       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        return item_data;
 }
 
@@ -968,7 +1881,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_group_titleItem(Evas_Obj
  *
  * @return a pointer to Setting_GenGroupItem_Data
  */
-Setting_GenGroupItem_Data *setting_create_Gendial_field_titleItem(
+EXPORT_PUBLIC Setting_GenGroupItem_Data *setting_create_Gendial_field_titleItem(
                                                Evas_Object *genlist,
                                                const Elm_Genlist_Item_Class *itc,
                                                const char *keyStr,
@@ -981,6 +1894,9 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_titleItem(
                                                 (Setting_GenGroupItem_Data));
        setting_retvm_if(!item_data, NULL, "calloc failed");
        item_data->keyStr = (char *)g_strdup(keyStr);
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
        if (gl_sel) {
                item_data->item =
                    elm_genlist_item_append(genlist, itc, item_data, NULL,
@@ -992,6 +1908,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_titleItem(
                                            ELM_GENLIST_ITEM_NONE,
                                            _gl_Gendial_sel, NULL);
        }
+       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        return item_data;
 }
 
@@ -1000,7 +1917,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_titleItem(
  *
  * @return a pointer to Setting_GenGroupItem_Data
  */
-
+EXPORT_PUBLIC
 Setting_GenGroupItem_Data *setting_create_Gendial_field_1radio(
                                        Evas_Object *genlist,
                                        const Elm_Genlist_Item_Class *itc,
@@ -1022,6 +1939,9 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_1radio(
        item_data->chk_status = chk_status;
        item_data->chk_change_cb = chk_change_cb;
        item_data->rgd = rgd;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
 
        if (gl_sel) {
                item_data->item =
@@ -1037,6 +1957,99 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_1radio(
        return item_data;
 }
 
+/**
+ * Create 1radio-2text style item
+ *
+ * @return a pointer to Setting_GenGroupItem_Data
+ */
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_1radio_2text(
+                                       Evas_Object *genlist,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       setting_call_back_func gl_sel,
+                                       void *sel_data,
+                                       SWALLOW_Type swallow_type,
+                                       Evas_Object *rgd, int chk_status,
+                                       const char *keyStr,
+                                       char *sub_desc,
+                                       setting_call_back_func chk_change_cb)
+{
+       /* SETTING_TRACE_BEGIN; */
+       Setting_GenGroupItem_Data *item_data =
+           (Setting_GenGroupItem_Data *) calloc(1,
+                                                sizeof
+                                                (Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+       item_data->keyStr = (char *)g_strdup(keyStr);
+       item_data->swallow_type = swallow_type;
+       item_data->chk_status = chk_status;
+       item_data->chk_change_cb = chk_change_cb;
+       item_data->rgd = rgd;
+       item_data->sub_desc = (char *)g_strdup(sub_desc);
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
+
+       if (gl_sel) {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE, gl_sel,
+                                           sel_data);
+       } else {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE,
+                                           _gl_Gendial_sel, sel_data);
+       }
+       return item_data;
+}
+
+
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_1radio_1button(
+                                       Evas_Object *genlist,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       setting_call_back_func gl_sel,
+                                       void *sel_data,
+                                       SWALLOW_Type swallow_type,
+                                       char *button_style,
+                                       Evas_Object *rgd, int chk_status,
+                                       const char *keyStr,
+                                       setting_call_back_func chk_change_cb,
+                                       setting_call_back_func btn_clicked_cb)
+{
+       /* SETTING_TRACE_BEGIN; */
+       Setting_GenGroupItem_Data *item_data =
+           (Setting_GenGroupItem_Data *) calloc(1,
+                                                sizeof
+                                                (Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+       item_data->keyStr = (char *)g_strdup(keyStr);
+       item_data->swallow_type = swallow_type;
+       item_data->r_swallow_path = (char *)g_strdup(button_style);
+       item_data->chk_status = chk_status;
+       item_data->chk_change_cb = chk_change_cb;
+       item_data->stop_change_cb = btn_clicked_cb;
+       item_data->rgd = rgd;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
+
+       if (gl_sel) {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE, gl_sel,
+                                           sel_data);
+       } else {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE,
+                                           _gl_Gendial_sel, sel_data);
+       }
+       return item_data;
+}
+
+EXPORT_PUBLIC
 Setting_GenGroupItem_Data *setting_create_Gendial_field_2radio(
                                        Evas_Object *genlist,
                                        const Elm_Genlist_Item_Class *itc,
@@ -1060,6 +2073,9 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_2radio(
        item_data->chk_status = chk_status;
        item_data->chk_change_cb = chk_change_cb;
        item_data->rgd = rgd;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
 
        if (gl_sel) {
                item_data->item =
@@ -1080,6 +2096,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_2radio(
  *
  * @return a pointer to Setting_GenGroupItem_Data
  */
+EXPORT_PUBLIC
 Setting_GenGroupItem_Data *setting_create_Gendial_field_groupitem(
                                        Evas_Object *genlist,
                                        const Elm_Genlist_Item_Class *itc,
@@ -1141,42 +2158,189 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_groupitem(
                item_data->keyStr = (char *)g_strdup(keyStr);
        }
 
-       item_data->sub_desc = (char *)g_strdup(sub_desc);
+       item_data->sub_desc = NULL;
+       if (sub_desc)
+               item_data->sub_desc = (char *)g_strdup(sub_desc);
+
        item_data->swallow_type = swallow_type;
        item_data->l_swallow_path = (char *)g_strdup(l_icon_path);
        item_data->r_swallow_path = (char *)g_strdup(r_icon_path);
        item_data->chk_status = chk_status;
        item_data->chk_change_cb = chk_change_cb;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
 
-       if (gl_sel) {
+       const char *insert_type = evas_object_data_get(genlist, "InsertType");
+       //SETTING_TRACE("insert_type:%s", insert_type);
+       if (!gl_sel) gl_sel = _gl_Gendial_sel;
+       if(0 == safeStrCmp(insert_type, "Insert before"))
+       {
+               item_data->item =
+                       elm_genlist_item_insert_before(genlist, itc, item_data, parent, parent,
+                                   ELM_GENLIST_ITEM_NONE, gl_sel,
+                                   sel_data);
+       }
+       else if(0 == safeStrCmp(insert_type, "Insert after"))
+       {
+               item_data->item =
+                       elm_genlist_item_insert_after(genlist, itc, item_data, parent, parent,
+                                   ELM_GENLIST_ITEM_NONE, gl_sel,
+                                   sel_data);
+       }
+       else if(0 == safeStrCmp(insert_type, "Prepend"))
+       {
+               item_data->item =
+                       elm_genlist_item_prepend(genlist, itc, item_data, parent,
+                                   ELM_GENLIST_ITEM_NONE, gl_sel,
+                                   sel_data);
+       }
+       else
+       {
                item_data->item =
                    elm_genlist_item_append(genlist, itc, item_data, parent,
                                            ELM_GENLIST_ITEM_NONE, gl_sel,
                                            sel_data);
-       } else {
-               item_data->item =
-                   elm_genlist_item_append(genlist, itc, item_data, parent,
-                                           ELM_GENLIST_ITEM_NONE,
-                                           _gl_Gendial_sel, sel_data);
+       }
+       //help text clicking issue
+       if (SWALLOW_Type_LAYOUT_SPECIALIZTION_X == swallow_type)
+               elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       evas_object_data_set(genlist, "InsertType", NULL);//redundant process,it should be due to invokers,but maybe they forget it
+
+       return item_data;
+}
 
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_helpitem_without_bottom_separator(
+                                       Evas_Object *genlist,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       SWALLOW_Type swallow_type,
+                                       const char *keyStr)
+{
+//     SETTING_TRACE_BEGIN;
+       Setting_GenGroupItem_Data *item_data = (
+               Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+       char speciliztion[MAX_SPECIALIZITION_LEN] = { 0, };
+       char* temp1 = (char *)keyStr;
+       char*temp2 = strchr(temp1, '&');
+       char* temp = NULL;
+
+       while (NULL != temp2) {
+               if (0 == safeStrNCmp(temp2, "&amp;", strlen("&amp;")) ||//'&'
+                   0 == safeStrNCmp(temp2, "&lt;", strlen("&lt;")) ||//'<'
+                   0 == safeStrNCmp(temp2, "&gt;", strlen("&gt;")) ||//'>'
+                   0 == safeStrNCmp(temp2, "&quot;", strlen("&quot;")) ||//double quotes
+                   0 == safeStrNCmp(temp2, "&apos;", strlen("&apos;")) ||//single quotes
+                   0 == safeStrNCmp(temp2, "&nbsp;", strlen("&nbsp;")) ||//space character
+                   0 == safeStrNCmp(temp2, "&copy;", strlen("&copy;")) ||//copyright character
+                   0 == safeStrNCmp(temp2, "&reg;", strlen("&reg;"))//registeration character
+                  ) {//escape character,do nothing
+                  temp = temp2 + 1;
+                  if ('\0' == temp[0]) break;
+                  temp2 = strchr(temp, '&');
+               }
+               else
+               {
+                       g_strlcat(speciliztion, temp1, temp2 - temp1 +1);
+                       g_strlcat(speciliztion, "&amp;", MAX_SPECIALIZITION_LEN);
+                       temp1 = temp2 + 1;
+                       if ('\0' == temp1[0]) break;
+                       temp2 = strchr(temp1, '&');
+               }
+       }
+       if ('\0' != temp1[0]) {
+               g_strlcat(speciliztion, temp1, MAX_SPECIALIZITION_LEN);
        }
-       if (SWALLOW_Type_LAYOUT_SPECIALIZTION == swallow_type) {
-               Elm_Object_Item *item = elm_genlist_item_append(genlist,
-                                                               &(itc_sep_line),
-                                                               NULL, NULL,
-                                                               ELM_GENLIST_ITEM_NONE,
-                                                               NULL, NULL);
-               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+
+       item_data->keyStr = (char *)g_strdup(speciliztion);
+       item_data->swallow_type = swallow_type;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
        }
 
+       item_data->item =
+           elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                   ELM_GENLIST_ITEM_NONE,
+                                   NULL, NULL);
+
+       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        return item_data;
 }
 
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_insert_help_without_bottom_separator(
+                                       Evas_Object *genlist,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       Elm_Object_Item *after_it,
+                                       SWALLOW_Type swallow_type,
+                                       const char *keyStr)
+{
+//     SETTING_TRACE_BEGIN;
+       Setting_GenGroupItem_Data *item_data = (
+               Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+       char speciliztion[MAX_SPECIALIZITION_LEN] = { 0, };
+       char* temp1 = (char *)keyStr;
+       char*temp2 = strchr(temp1, '&');
+       char* temp = NULL;
+
+       while (NULL != temp2) {
+               if (0 == safeStrNCmp(temp2, "&amp;", strlen("&amp;")) ||//'&'
+                   0 == safeStrNCmp(temp2, "&lt;", strlen("&lt;")) ||//'<'
+                   0 == safeStrNCmp(temp2, "&gt;", strlen("&gt;")) ||//'>'
+                   0 == safeStrNCmp(temp2, "&quot;", strlen("&quot;")) ||//double quotes
+                   0 == safeStrNCmp(temp2, "&apos;", strlen("&apos;")) ||//single quotes
+                   0 == safeStrNCmp(temp2, "&nbsp;", strlen("&nbsp;")) ||//space character
+                   0 == safeStrNCmp(temp2, "&copy;", strlen("&copy;")) ||//copyright character
+                   0 == safeStrNCmp(temp2, "&reg;", strlen("&reg;"))//registeration character
+                  ) {//escape character,do nothing
+                  temp = temp2 + 1;
+                  if ('\0' == temp[0]) break;
+                  temp2 = strchr(temp, '&');
+               }
+               else
+               {
+                       g_strlcat(speciliztion, temp1, temp2 - temp1 +1);
+                       g_strlcat(speciliztion, "&amp;", MAX_SPECIALIZITION_LEN);
+                       temp1 = temp2 + 1;
+                       if ('\0' == temp1[0]) break;
+                       temp2 = strchr(temp1, '&');
+               }
+       }
+       if ('\0' != temp1[0]) {
+               g_strlcat(speciliztion, temp1, MAX_SPECIALIZITION_LEN);
+       }
+
+
+       item_data->keyStr = (char *)g_strdup(speciliztion);
+       item_data->swallow_type = swallow_type;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
+
+       item_data->item =
+           elm_genlist_item_insert_after(genlist, itc, item_data, NULL, after_it,
+                                   ELM_GENLIST_ITEM_NONE,
+                                   NULL, NULL);
+
+       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       return item_data;
+}
+
+
 /**
  * Common function to create a genlist item
  * @return a pointer to Setting_GenGroupItem_Data
  */
-Setting_GenGroupItem_Data *setting_create_Gendial_field_def(Evas_Object *
+EXPORT_PUBLIC Setting_GenGroupItem_Data *setting_create_Gendial_field_def(Evas_Object *
                                                            genlist,
                                                            const Elm_Genlist_Item_Class *itc,
                                                            setting_call_back_func
@@ -1200,31 +2364,251 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_def(Evas_Object *
 }
 
 /**
- * Create 1entry style item
+ * Create 1entry style item
+ * focus out
+ * @return a pointer to Setting_GenGroupItem_Data
+ */
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
+                                                                 Evas_Object * genlist,
+                                                             const Elm_Genlist_Item_Class *itc,
+                                                             setting_call_back_func gl_sel,
+                                                             void *sel_data,
+                                                             SWALLOW_Type swallow_type,
+                                                             char *l_icon_path,
+                                                             char *r_icon_path,
+                                                             int chk_status,
+                                                             const char *keyStr,
+                                                             char *sub_desc,
+                                                             setting_call_back_func chk_change_cb,
+                                                             setting_call_back_func chk_focus_out_cb,
+                                                             Elm_Input_Panel_Layout input_type,
+                                                             bool isPasswordFlag,
+                                                             bool isFocusFlag,
+                                                             int min_char_count,
+                                                             int max_char_count,
+                                                             int max_byte_count,
+                                                             char *accepted,
+                                                             char *rejected)
+{
+       /* SETTING_TRACE_BEGIN; */
+       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof (Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+       item_data->keyStr = (char *)g_strdup(keyStr);
+       item_data->sub_desc = (char *)g_strdup(sub_desc);
+       item_data->swallow_type = swallow_type;
+       item_data->l_swallow_path = (char *)g_strdup(l_icon_path);
+       item_data->r_swallow_path = (char *)g_strdup(r_icon_path);
+       item_data->chk_status = chk_status;
+       item_data->chk_change_cb = chk_change_cb;
+       item_data->stop_change_cb = chk_focus_out_cb;
+       item_data->isSinglelineFlag = true;
+
+       item_data->input_type = input_type;
+       item_data->isPasswordFlag = isPasswordFlag;
+       item_data->isFocusFlag = isFocusFlag;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
+
+       Elm_Entry_Filter_Accept_Set *digits_filter_data =
+           (Elm_Entry_Filter_Accept_Set *) calloc(1, sizeof (Elm_Entry_Filter_Accept_Set));
+       if(!digits_filter_data) {
+               SETTING_TRACE_ERROR("calloc Elm_Entry_Filter_Accept_Set failed");
+               // free allocated data
+               G_FREE(item_data->keyStr);
+               G_FREE(item_data->sub_desc);
+               G_FREE(item_data->l_swallow_path);
+               G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->itc);
+               FREE(item_data);
+               return NULL;
+       }
+
+
+       Elm_Entry_Filter_Limit_Size *limit_filter_data =
+           (Elm_Entry_Filter_Limit_Size *) calloc(1, sizeof (Elm_Entry_Filter_Limit_Size));
+       if(!limit_filter_data) {
+               SETTING_TRACE_ERROR("calloc Elm_Entry_Filter_Limit_Size failed");
+
+               // free allocated data
+               G_FREE(item_data->keyStr);
+               G_FREE(item_data->sub_desc);
+               G_FREE(item_data->l_swallow_path);
+               G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->itc);
+               FREE(item_data);
+               FREE(digits_filter_data);
+               return NULL;
+       }
+
+       limit_filter_data->max_char_count = max_char_count;
+       limit_filter_data->max_byte_count = max_byte_count;
+       digits_filter_data->accepted = (char *)g_strdup(accepted);
+       digits_filter_data->rejected = (char *)g_strdup(rejected);
+
+       item_data->digits_filter_data = digits_filter_data;
+       item_data->limit_filter_data = limit_filter_data;
+       item_data->userdata = sel_data;
+
+       item_data->minlength = min_char_count;
+
+       if (gl_sel) {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE, gl_sel,
+                                           sel_data);
+       } else {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE,
+                                           _gl_Gendial_sel, sel_data);
+       }
+       return item_data;
+}
+
+/**
+ * Create 1entry style item
+ * @return a pointer to Setting_GenGroupItem_Data
+ */
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_entry(Evas_Object *
+                                                             genlist,
+                                                             const Elm_Genlist_Item_Class *itc,
+                                                             setting_call_back_func gl_sel,
+                                                             void *sel_data,
+                                                             SWALLOW_Type
+                                                             swallow_type,
+                                                             char *l_icon_path,
+                                                             char *r_icon_path,
+                                                             int chk_status,
+                                                             const char *keyStr,
+                                                             char *sub_desc,
+                                                             setting_call_back_func
+                                                             chk_change_cb,
+                                                             Elm_Input_Panel_Layout
+                                                             input_type,
+                                                             bool isPasswordFlag,
+                                                             bool isFocusFlag,
+                                                             int max_char_count,
+                                                             int max_byte_count,
+                                                             char *accepted,
+                                                             char *rejected)
+{
+       /* SETTING_TRACE_BEGIN; */
+       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,
+                                                sizeof (Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+       item_data->keyStr = (char *)g_strdup(keyStr);
+       item_data->sub_desc = (char *)g_strdup(sub_desc);
+       item_data->swallow_type = swallow_type;
+       item_data->l_swallow_path = (char *)g_strdup(l_icon_path);
+       item_data->r_swallow_path = (char *)g_strdup(r_icon_path);
+       item_data->chk_status = chk_status;
+       item_data->chk_change_cb = chk_change_cb;
+
+       item_data->input_type = input_type;
+       item_data->isPasswordFlag = isPasswordFlag;
+       item_data->isFocusFlag = isFocusFlag;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
+
+       Elm_Entry_Filter_Accept_Set *digits_filter_data =
+           (Elm_Entry_Filter_Accept_Set *) calloc(1, sizeof (Elm_Entry_Filter_Accept_Set));
+       if(!digits_filter_data) {
+               SETTING_TRACE_ERROR("calloc Elm_Entry_Filter_Accept_Set failed");
+               // free allocated data
+               G_FREE(item_data->keyStr);
+               G_FREE(item_data->sub_desc);
+               G_FREE(item_data->l_swallow_path);
+               G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->itc);
+               FREE(item_data);
+               return NULL;
+       }
+
+
+       Elm_Entry_Filter_Limit_Size *limit_filter_data =
+           (Elm_Entry_Filter_Limit_Size *) calloc(1, sizeof (Elm_Entry_Filter_Limit_Size));
+       if(!limit_filter_data) {
+               SETTING_TRACE_ERROR("calloc Elm_Entry_Filter_Limit_Size failed");
+
+               // free allocated data
+               G_FREE(item_data->keyStr);
+               G_FREE(item_data->sub_desc);
+               G_FREE(item_data->l_swallow_path);
+               G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->itc);
+               FREE(item_data);
+               FREE(digits_filter_data);
+               return NULL;
+       }
+
+       limit_filter_data->max_char_count = max_char_count;
+       limit_filter_data->max_byte_count = max_byte_count;
+       digits_filter_data->accepted = (char *)g_strdup(accepted);
+       digits_filter_data->rejected = (char *)g_strdup(rejected);
+
+       item_data->digits_filter_data = digits_filter_data;
+       item_data->limit_filter_data = limit_filter_data;
+       item_data->userdata = sel_data;
+
+       if (gl_sel) {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE, gl_sel,
+                                           sel_data);
+       } else {
+               item_data->item =
+                   elm_genlist_item_append(genlist, itc, item_data, NULL,
+                                           ELM_GENLIST_ITEM_NONE,
+                                           _gl_Gendial_sel, sel_data);
+       }
+
+       if(swallow_type == SWALLOW_Type_LAYOUT_EDITFIELD)
+               elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       return item_data;
+}
+
+/**
+ * Create 1entry style item with parameter return_key_type
  * @return a pointer to Setting_GenGroupItem_Data
  */
-Setting_GenGroupItem_Data *setting_create_Gendial_field_entry(
-                                                                 Evas_Object * genlist,
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_with_return_key(Evas_Object *
+                                                             genlist,
                                                              const Elm_Genlist_Item_Class *itc,
                                                              setting_call_back_func gl_sel,
                                                              void *sel_data,
-                                                             SWALLOW_Type swallow_type,
+                                                             SWALLOW_Type
+                                                             swallow_type,
                                                              char *l_icon_path,
                                                              char *r_icon_path,
                                                              int chk_status,
                                                              const char *keyStr,
                                                              char *sub_desc,
-                                                             setting_call_back_func chk_change_cb,
-                                                             Elm_Input_Panel_Layout input_type,
+                                                             setting_call_back_func
+                                                             chk_change_cb,
+                                                             setting_call_back_func
+                                                             max_reach_cb,
+                                                             Elm_Input_Panel_Layout
+                                                             input_type,
                                                              bool isPasswordFlag,
                                                              bool isFocusFlag,
                                                              int max_char_count,
                                                              int max_byte_count,
                                                              char *accepted,
-                                                             char *rejected)
+                                                             char *rejected,
+                                                             Elm_Input_Panel_Return_Key_Type return_key_type,
+                                                                 setting_call_back_func
+                                                                 activated_cb,
+                                                             setting_call_back_func x_callback_cb)
 {
        /* SETTING_TRACE_BEGIN; */
-       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof (Setting_GenGroupItem_Data));
+       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,
+                                                sizeof (Setting_GenGroupItem_Data));
        setting_retvm_if(!item_data, NULL, "calloc failed");
        item_data->keyStr = (char *)g_strdup(keyStr);
        item_data->sub_desc = (char *)g_strdup(sub_desc);
@@ -1233,14 +2617,18 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry(
        item_data->r_swallow_path = (char *)g_strdup(r_icon_path);
        item_data->chk_status = chk_status;
        item_data->chk_change_cb = chk_change_cb;
-
-    //setting_call_back_func chk_focus_out_cb,
-
+       item_data->maxlength_reached_cb = max_reach_cb;
+       item_data->x_callback_cb = x_callback_cb;
 
        item_data->input_type = input_type;
        item_data->isPasswordFlag = isPasswordFlag;
+       item_data->isSinglelineFlag = isPasswordFlag;
        item_data->isFocusFlag = isFocusFlag;
-
+       item_data->return_key_type = return_key_type;
+       item_data->disable_auto_cap = EINA_TRUE;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
        Elm_Entry_Filter_Accept_Set *digits_filter_data =
            (Elm_Entry_Filter_Accept_Set *) calloc(1, sizeof (Elm_Entry_Filter_Accept_Set));
        if(!digits_filter_data) {
@@ -1250,6 +2638,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry(
                G_FREE(item_data->sub_desc);
                G_FREE(item_data->l_swallow_path);
                G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->itc);
                FREE(item_data);
                return NULL;
        }
@@ -1265,6 +2654,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry(
                G_FREE(item_data->sub_desc);
                G_FREE(item_data->l_swallow_path);
                G_FREE(item_data->r_swallow_path);
+               FREE(item_data->itc);
                FREE(item_data);
                FREE(digits_filter_data);
                return NULL;
@@ -1290,53 +2680,72 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry(
                                            ELM_GENLIST_ITEM_NONE,
                                            _gl_Gendial_sel, sel_data);
        }
+
+       if(swallow_type == SWALLOW_Type_LAYOUT_EDITFIELD)
+               elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
        return item_data;
 }
 
 /**
  * Create 1entry style item
- * focus out
  * @return a pointer to Setting_GenGroupItem_Data
  */
-Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
-                                                                 Evas_Object * genlist,
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_field_editfield(Evas_Object *
+                                                             genlist,
                                                              const Elm_Genlist_Item_Class *itc,
                                                              setting_call_back_func gl_sel,
                                                              void *sel_data,
-                                                             SWALLOW_Type swallow_type,
-                                                             char *l_icon_path,
-                                                             char *r_icon_path,
-                                                             int chk_status,
+                                                             SWALLOW_Type
+                                                             swallow_type,
                                                              const char *keyStr,
                                                              char *sub_desc,
-                                                             setting_call_back_func chk_change_cb,
-                                                             setting_call_back_func chk_focus_out_cb,
-                                                             Elm_Input_Panel_Layout input_type,
+                                                             setting_call_back_func
+                                                             chk_change_cb,
+                                                             setting_call_back_func
+                                                             focused_cb,
+                                                             setting_call_back_func
+                                                             unfocused_cb,
+                                                             setting_call_back_func
+                                                             activated_cb,
+                                                             setting_call_back_func
+                                                             max_reached_cb,
+                                                             Elm_Input_Panel_Layout
+                                                             input_type,
                                                              bool isPasswordFlag,
                                                              bool isFocusFlag,
-                                                             int min_char_count,
                                                              int max_char_count,
                                                              int max_byte_count,
                                                              char *accepted,
                                                              char *rejected)
 {
        /* SETTING_TRACE_BEGIN; */
-       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof (Setting_GenGroupItem_Data));
+       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,
+                                                sizeof (Setting_GenGroupItem_Data));
        setting_retvm_if(!item_data, NULL, "calloc failed");
        item_data->keyStr = (char *)g_strdup(keyStr);
        item_data->sub_desc = (char *)g_strdup(sub_desc);
        item_data->swallow_type = swallow_type;
-       item_data->l_swallow_path = (char *)g_strdup(l_icon_path);
-       item_data->r_swallow_path = (char *)g_strdup(r_icon_path);
-       item_data->chk_status = chk_status;
+       item_data->l_swallow_path = NULL;
+       item_data->r_swallow_path = NULL;
+       item_data->chk_status = 0;
        item_data->chk_change_cb = chk_change_cb;
-       item_data->stop_change_cb = chk_focus_out_cb;
-       item_data->isSinglelineFlag = true;
+       item_data->focus_cb = focused_cb;
+       item_data->stop_change_cb = unfocused_cb;
+       item_data->activated_cb = activated_cb;
+       item_data->maxlength_reached_cb = max_reached_cb;
 
        item_data->input_type = input_type;
        item_data->isPasswordFlag = isPasswordFlag;
+       if(isPasswordFlag)
+               item_data->guide_text = (char *)g_strdup(_("IDS_ST_BODY_ENTER_PASSWORD"));
+       item_data->isSinglelineFlag = isPasswordFlag;
        item_data->isFocusFlag = isFocusFlag;
-
+       item_data->userdata = sel_data;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
        Elm_Entry_Filter_Accept_Set *digits_filter_data =
            (Elm_Entry_Filter_Accept_Set *) calloc(1, sizeof (Elm_Entry_Filter_Accept_Set));
        if(!digits_filter_data) {
@@ -1344,12 +2753,13 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
                // free allocated data
                G_FREE(item_data->keyStr);
                G_FREE(item_data->sub_desc);
-               G_FREE(item_data->l_swallow_path);
-               G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->guide_text);
+               G_FREE(item_data->itc);
                FREE(item_data);
                return NULL;
        }
 
+
        Elm_Entry_Filter_Limit_Size *limit_filter_data =
            (Elm_Entry_Filter_Limit_Size *) calloc(1, sizeof (Elm_Entry_Filter_Limit_Size));
        if(!limit_filter_data) {
@@ -1358,8 +2768,8 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
                // free allocated data
                G_FREE(item_data->keyStr);
                G_FREE(item_data->sub_desc);
-               G_FREE(item_data->l_swallow_path);
-               G_FREE(item_data->r_swallow_path);
+               G_FREE(item_data->guide_text);
+               G_FREE(item_data->itc);
                FREE(item_data);
                FREE(digits_filter_data);
                return NULL;
@@ -1374,8 +2784,6 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
        item_data->limit_filter_data = limit_filter_data;
        item_data->userdata = sel_data;
 
-       item_data->minlength = min_char_count;
-
        if (gl_sel) {
                item_data->item =
                    elm_genlist_item_append(genlist, itc, item_data, NULL,
@@ -1387,6 +2795,8 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
                                            ELM_GENLIST_ITEM_NONE,
                                            _gl_Gendial_sel, sel_data);
        }
+       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
        return item_data;
 }
 
@@ -1395,6 +2805,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_field_entry_fo(
  *
  * @return a pointer to Setting_GenGroupItem_Data
  */
+EXPORT_PUBLIC
 Setting_GenGroupItem_Data *setting_create_Gendial_exp_parent_field(
                                                Evas_Object *genlist,
                                                const Elm_Genlist_Item_Class *itc,
@@ -1402,7 +2813,9 @@ Setting_GenGroupItem_Data *setting_create_Gendial_exp_parent_field(
                                                void *sel_data,
                                                SWALLOW_Type swallow_type,
                                                const char *keyStr,
-                                               char *sub_desc)
+                                               char *sub_desc,
+                                               setting_group_style exp_style,
+                                               setting_group_style con_style)
 {
        /* SETTING_TRACE_BEGIN; */
        Setting_GenGroupItem_Data *item_data =
@@ -1413,7 +2826,13 @@ Setting_GenGroupItem_Data *setting_create_Gendial_exp_parent_field(
        item_data->keyStr = (char *)g_strdup(keyStr);
        item_data->sub_desc = (char *)g_strdup(sub_desc);
        item_data->swallow_type = swallow_type;
-
+       item_data->exp_style = exp_style;
+       item_data->con_style = con_style;
+       item_data->group_style = con_style;
+       item_data->r_swallow_path = (char *)g_strdup(SETTING_IMAGE_PATH_CFG"00_list_button_expand_closed.png");
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
        if (gl_sel) {
                item_data->item =
                    elm_genlist_item_append(genlist, itc, item_data, NULL,
@@ -1433,6 +2852,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_exp_parent_field(
  *
  * @return a pointer to Setting_GenGroupItem_Data
  */
+EXPORT_PUBLIC
 Setting_GenGroupItem_Data *setting_create_Gendial_exp_sub_field(
                                        Evas_Object *genlist,
                                        const Elm_Genlist_Item_Class *itc,
@@ -1455,7 +2875,56 @@ Setting_GenGroupItem_Data *setting_create_Gendial_exp_sub_field(
        item_data->swallow_type = swallow_type;
        item_data->chk_status = chk_status;
        item_data->rgd = rgd;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
+       if (!gl_sel) {
+               gl_sel = setting_sub_list_sel_cb;
+       }
+       if (!chk_change_cb) {
+               chk_change_cb = setting_sub_list_rd_change;
+       }
+
+       item_data->chk_change_cb = chk_change_cb;
+       item_data->item =
+           elm_genlist_item_append(genlist, itc, item_data, parent,
+                                   ELM_GENLIST_ITEM_NONE, gl_sel, sel_data);
+
+       return item_data;
+}
 
+/**
+ * General function to create a subitem of expandable item with group style
+ *
+ * @return a pointer to Setting_GenGroupItem_Data
+ */
+EXPORT_PUBLIC
+Setting_GenGroupItem_Data *setting_create_Gendial_exp_sub_field_with_group_style(
+                                       Evas_Object *genlist,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       setting_call_back_func gl_sel,
+                                       void *sel_data,
+                                       Elm_Object_Item *parent,
+                                       SWALLOW_Type swallow_type,
+                                       Evas_Object *rgd, int chk_status,
+                                       const char *keyStr,
+                                       setting_call_back_func
+                                       chk_change_cb,
+                                       setting_group_style group_style)
+{
+       SETTING_TRACE_BEGIN
+       Setting_GenGroupItem_Data *item_data =
+           (Setting_GenGroupItem_Data *) calloc(1,
+                                                sizeof
+                                                (Setting_GenGroupItem_Data));
+       setting_retvm_if(!item_data, NULL, "calloc failed");
+       item_data->keyStr = (char *)g_strdup(keyStr);
+       item_data->swallow_type = swallow_type;
+       item_data->chk_status = chk_status;
+       item_data->rgd = rgd;
+       if(itc && itc->item_style){
+               item_data->itc = (char *)g_strdup(itc->item_style);
+       }
        if (!gl_sel) {
                gl_sel = setting_sub_list_sel_cb;
        }
@@ -1464,6 +2933,7 @@ Setting_GenGroupItem_Data *setting_create_Gendial_exp_sub_field(
        }
 
        item_data->chk_change_cb = chk_change_cb;
+       item_data->group_style = group_style;
        item_data->item =
            elm_genlist_item_append(genlist, itc, item_data, parent,
                                    ELM_GENLIST_ITEM_NONE, gl_sel, sel_data);
@@ -1473,12 +2943,13 @@ Setting_GenGroupItem_Data *setting_create_Gendial_exp_sub_field(
 /**
  * To make genlist support expandable style item
  */
+EXPORT_PUBLIC
 void setting_enable_expandable_genlist(Evas_Object *genlist, void *data,
                                       setting_call_back_func gl_exp_cb,
                                       setting_call_back_func gl_smart_cb)
 {
        ret_if(NULL == genlist);
-       elm_genlist_tree_effect_enabled_set(genlist, TRUE);
+       elm_genlist_tree_effect_enabled_set(genlist, EINA_FALSE);
        if (!gl_smart_cb) {
                gl_smart_cb = __exp_list_smart_cb;
        }
@@ -1486,6 +2957,7 @@ void setting_enable_expandable_genlist(Evas_Object *genlist, void *data,
        if (gl_exp_cb)
                evas_object_smart_callback_add(genlist, "expanded", gl_exp_cb, data);
        evas_object_smart_callback_add(genlist, "contracted", gl_smart_cb, "contracted");
+       evas_object_smart_callback_add(genlist, "expanded", gl_smart_cb, "expanded");
 
        evas_object_smart_callback_add(genlist, "drag", gl_smart_cb, "drag");
        evas_object_smart_callback_add(genlist, "longpressed", gl_smart_cb, "longpressed");
@@ -1514,6 +2986,7 @@ ad->data_searching_net = setting_create_Gendial_field_1radio(scroller, &(ad->itc
 setting_begin_progress_genlist_item(ad->data_searching_net); -- change from UNPROCESS->PROCESS
 setting_finish_progress_genlist_item(ad->data_searching_net);--change from PROCESS->UNPROCESS
 */
+EXPORT_PUBLIC
 void setting_begin_progress_genlist_item(Setting_GenGroupItem_Data *data_item)
 {
        if (data_item) {
@@ -1527,6 +3000,7 @@ void setting_begin_progress_genlist_item(Setting_GenGroupItem_Data *data_item)
        }
 }
 
+EXPORT_PUBLIC
 void setting_finish_progress_genlist_item(Setting_GenGroupItem_Data *data_item)
 {
        if (data_item) {
@@ -1542,7 +3016,7 @@ void setting_finish_progress_genlist_item(Setting_GenGroupItem_Data *data_item)
 /**
 * Check if some item is selected in done-list
 */
-
+EXPORT_PUBLIC
 bool setting_done_list_is_some_item_selected(Setting_Done_List_Data *list_data)
 {
        SETTING_TRACE_BEGIN;
@@ -1565,11 +3039,6 @@ static void __setting_done_list_item_sel(void *data)
 
        int sel_num = 0;
        int idx = 0;
-
-       setting_create_sel_info_popup(list_data->ly_parent,
-                                     &(list_data->selInfoPop_layout),
-                                     &(list_data->selInfoPop));
-
        /* else for other checks, do rotinue checking */
        bool isFound = FALSE;   /* wether found the item not checked */
        for (idx = 0; idx < list_data->cur_item_num; idx++) {
@@ -1583,6 +3052,7 @@ static void __setting_done_list_item_sel(void *data)
                }
        }
 
+       list_data->cur_item_selnum = sel_num;
        if (isFound) {  /* reset state of chk_sel_all */
                list_data->select_all_checked = 0;
                elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
@@ -1591,31 +3061,39 @@ static void __setting_done_list_item_sel(void *data)
                elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
        }
 
+       if(sel_num > 0) {
+               char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
+               //snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%d %s",sel_num, _("IDS_ST_OPT_SELECTED"));
+               snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, _("IDS_ST_HEADER_PD_SELECTED"),sel_num);
+               //elm_object_item_part_text_set(list_data->navi_it, "subtitle", text);
+               elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", text);
+       } else {
+               //elm_object_item_part_text_set(list_data->navi_it, "subtitle", "");
+               //elm_object_item_signal_emit(list_data->navi_it, "elm,state,subtitle,hide", "elm");
+               elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", _(list_data->navi_title));
+               //elm_object_item_signal_emit(list_data->navi_it, "elm,state,title,hide", "elm");
+       }
+
        /* SETTING_TRACE("sel_num:%d", sel_num); */
        if (!sel_num) {
                if (list_data->navi_it) {
-                       Evas_Object  *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
-                       elm_object_disabled_set(button, EINA_TRUE);
+                       Evas_Object  *toolbar = elm_object_item_part_content_get(list_data->navi_it, "toolbar");
+                       elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
                }
                evas_object_hide(list_data->selInfoPop);
                return;
        }
 
-       char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
-       snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s (%d)", _("IDS_ST_OPT_SELECTED"), sel_num);
-
-       /*  text set and timeout set */
-       edje_object_part_text_set(_EDJ(list_data->selInfoPop_layout), "elm.text", text);
-
        if (list_data->navi_it) {
-               Evas_Object  *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
-               elm_object_disabled_set(button, EINA_FALSE);
+               Evas_Object  *toolbar = elm_object_item_part_content_get(list_data->navi_it, "toolbar");
+               elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
        }
 }
 
 /**
 * Do process when clicking the check object in the done-list item
 */
+EXPORT_PUBLIC
 void setting_done_list_Gendial_chk_btn_cb(void *data, Evas_Object *obj,
                                          void *event_info)
 {
@@ -1625,7 +3103,7 @@ void setting_done_list_Gendial_chk_btn_cb(void *data, Evas_Object *obj,
        Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
 
        /* new status */
-       list_item->chk_status = elm_check_state_get(list_item->eo_check);
+       list_item->chk_status = elm_check_state_get(obj);
 
        Setting_Done_List_Data *list_data = list_item->userdata;
        __setting_done_list_item_sel(list_data);
@@ -1641,10 +3119,8 @@ static void setting_done_list_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
        Setting_GenGroupItem_Data *list_item =
            (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
 
-       int old_status = elm_check_state_get(list_item->eo_check);
        /* new status */
-       list_item->chk_status = !old_status;
-       elm_check_state_set(list_item->eo_check, list_item->chk_status);
+       setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
 
        /* other process.. */
        Setting_Done_List_Data *list_data = list_item->userdata;
@@ -1660,10 +3136,6 @@ static void __setting_select_all_done(void *data)
        int sel_num = 0;
        int idx = 0;
 
-       setting_create_sel_info_popup(list_data->ly_parent,
-                                     &(list_data->selInfoPop_layout),
-                                     &(list_data->selInfoPop));
-
        if (list_data->select_all_checked) {
                /* set all other checks state to be 1 */
                SETTING_TRACE_DEBUG("Select All checked");
@@ -1684,91 +3156,120 @@ static void __setting_select_all_done(void *data)
                sel_num = 0;
        }
 
+       /*  text set and timeout set */
+       if(sel_num > 0) {
+               char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
+               //snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%d %s",sel_num, _("IDS_ST_OPT_SELECTED"));
+               snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, _("IDS_ST_HEADER_PD_SELECTED"),sel_num);
+               //elm_object_item_part_text_set(list_data->navi_it, "subtitle", text);
+               elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", text);
+       } else {
+               //elm_object_item_part_text_set(list_data->navi_it, "subtitle", "");
+               //elm_object_item_signal_emit(list_data->navi_it, "elm,state,subtitle,hide", "elm");
+               elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", _(list_data->navi_title));
+               //elm_object_item_signal_emit(list_data->navi_it, "elm,state,title,hide", "elm");
+       }
        /* SETTING_TRACE("sel_num:%d", sel_num); */
        if (!sel_num) {
                if (list_data->navi_it) {
-                       Evas_Object *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
-                       elm_object_disabled_set(button, EINA_TRUE);
+                       Evas_Object *toolbar = elm_object_item_part_content_get(list_data->navi_it, "toolbar");
+                       elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
                }
 
                evas_object_hide(list_data->selInfoPop);
                return;
        }
-       char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
-       snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s (%d)", _("IDS_ST_OPT_SELECTED"), sel_num);
-
-       /*  text set and timeout set */
-       edje_object_part_text_set(_EDJ(list_data->selInfoPop_layout), "elm.text", text);
 
        if (list_data->navi_it) {
-               Evas_Object *button = elm_object_item_part_content_get(list_data->navi_it, "toolbar_button1");
-               elm_object_disabled_set(button, EINA_FALSE);
+               Evas_Object *toolbar = elm_object_item_part_content_get(list_data->navi_it, "toolbar");
+               elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
        }
 }
 
-static void __setting_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+static void __setting_select_all_layout_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "data == NULL");
        Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)data;
 
        list_data->select_all_checked = !list_data->select_all_checked;
-       elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
+       //elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
 
        __setting_select_all_done(list_data);
 }
 
-static void __setting_select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+/*static void __setting_select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "data == NULL");
        Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)data;
-
+       list_data->select_all_checkbox = obj;
        list_data->select_all_checked = elm_check_state_get(list_data->select_all_checkbox);
        elm_check_state_pointer_set(list_data->select_all_checkbox, &list_data->select_all_checked);
        __setting_select_all_done(data);
+}*/
+static void setting_callback_select_all_button_pressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *select_button_ic = (Evas_Object *)data;
+       elm_image_file_set(select_button_ic, SETTING_ICON_PATH_CFG"select_all.png", NULL);
 }
+static void setting_callback_select_all_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "data is NULL");
 
+       Evas_Object *select_button_ic = (Evas_Object *)data;
+       elm_image_file_set(select_button_ic, SETTING_ICON_PATH_CFG"select_all.png", NULL);
+}
 /**
 * The API to create done-list.
 *
 * @param[in] list_data
 * @return a done-list
 */
-Evas_Object *setting_create_done_list(Setting_Done_List_Data *list_data)
+EXPORT_PUBLIC
+Evas_Object *setting_create_done_list(Setting_Done_List_Data *list_data, const char *title)
 {
        SETTING_TRACE_BEGIN;
        retvm_if(list_data == NULL, NULL, "list_data == NULL");
-       Evas_Object *sub_layout = elm_layout_add(list_data->win_main);
-       elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
-       evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
-       evas_object_show(sub_layout);
-
-       setting_create_Gendial_itc("1text.1icon.3", &(list_data->itc_1text_1icon));
-
-       Evas_Object *select_all_layout = elm_layout_add(sub_layout);
-       retvm_if(select_all_layout == NULL, NULL, "select_all_layout == NULL");
-       elm_layout_theme_set(select_all_layout, "genlist", "item", "select_all/default"); //select_all/default
-       evas_object_size_hint_weight_set(select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
-       evas_object_size_hint_align_set(select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_event_callback_add(select_all_layout, EVAS_CALLBACK_MOUSE_DOWN, __setting_select_all_layout_mouse_down_cb, list_data);
-
-       Eina_Bool select_all_checked = list_data->select_all_checked;
-       Evas_Object *select_all_checkbox = elm_check_add(select_all_layout);
-       elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
-       evas_object_smart_callback_add(select_all_checkbox, "changed", __setting_select_all_check_changed_cb, list_data);
-       evas_object_propagate_events_set(select_all_checkbox, EINA_FALSE);
-       elm_object_part_content_set(select_all_layout, "elm.icon", select_all_checkbox);
-
-       list_data->select_all_checkbox = select_all_checkbox;
-       elm_object_part_text_set(select_all_layout, "elm.text", _(KeyStr_Select_All));
+       setting_create_Gendial_itc("1line", &(list_data->itc_1text_1icon));
+       if(title) {
+               elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", _(title));
+       } else {
+               title = elm_object_item_part_text_get(list_data->navi_it, "elm.text.title");
+       }
+
+       memset((char*)(list_data->navi_title), 0, sizeof(list_data->navi_title));
+       safeCopyStr((char*)(list_data->navi_title), title, sizeof(list_data->navi_title));
+       SETTING_TRACE("list_data->navi_title:%s", list_data->navi_title);
+
+       Evas_Object *allbtn = elm_button_add(list_data->win_main);
+       elm_object_style_set(allbtn, "naviframe/title_icon");
+
+       Evas_Object *icon = elm_icon_add(allbtn);
+       elm_image_file_set(icon, SETTING_ICON_PATH_CFG"select_all.png", NULL);
+
+       //evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1 , 1);
+       //elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(allbtn, icon);
+       elm_object_focus_allow_set(allbtn, EINA_FALSE);
+       evas_object_propagate_events_set(allbtn, EINA_FALSE);
+       evas_object_smart_callback_add(allbtn, "clicked", __setting_select_all_layout_mouse_up_cb, list_data);
+       evas_object_smart_callback_add(allbtn, "pressed", setting_callback_select_all_button_pressed_cb, icon);
+       evas_object_smart_callback_add(allbtn, "unpressed", setting_callback_select_all_button_unpressed_cb, icon);
+
+       evas_object_show(allbtn);
+       elm_object_item_part_content_set(list_data->navi_it, "title_right_btn", allbtn);
 
        Evas_Object *scroller = elm_genlist_add(list_data->win_main);
        retvm_if(scroller == NULL, NULL, "scroller == NULL");
+       elm_genlist_realization_mode_set(scroller, EINA_TRUE);
        elm_genlist_clear(scroller);    /* first to clear list */
+       evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
 
-       elm_object_part_content_set(sub_layout, "search_list", scroller);
-       elm_object_part_content_set(sub_layout, "search_bar", select_all_layout);
 
        int index = 0;
        for (; index < list_data->cur_item_num; index++) {
@@ -1790,7 +3291,73 @@ Evas_Object *setting_create_done_list(Setting_Done_List_Data *list_data)
 
        }
 
-       return sub_layout;
+       return scroller;
+}
+
+/**
+* The API to create done-list-with-image
+*
+* @param[in] list_data
+* @return a done-list-with-image
+*/
+EXPORT_PUBLIC
+Evas_Object *setting_create_done_list_with_image(Setting_Done_List_Data *list_data, const char *title)
+{
+       SETTING_TRACE_BEGIN;
+       retvm_if(list_data == NULL, NULL, "list_data == NULL");
+       setting_create_Gendial_itc("1text.2icon.4", &(list_data->itc_1text_2icon));
+       if(title)
+       {
+               elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", title);
+       }
+       //elm_object_item_part_text_set(list_data->navi_it, "elm.text.title", _(KeyStr_Select_Item));
+       memset((char*)(list_data->navi_title), 0, sizeof(list_data->navi_title));
+       safeCopyStr((char*)(list_data->navi_title), elm_object_item_part_text_get(list_data->navi_it, "elm.text.title"), sizeof(list_data->navi_title));
+       SETTING_TRACE("list_data->navi_title:%s", list_data->navi_title);
+
+       Evas_Object *allbtn = elm_button_add(list_data->win_main);
+       elm_object_style_set(allbtn, "naviframe/title_icon");
+       Evas_Object *icon = elm_icon_add(allbtn);
+       elm_image_file_set(icon, SETTING_ICON_PATH_CFG"select_all.png", NULL);
+
+       //evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1 , 1);
+       //elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(allbtn, icon);
+       elm_object_focus_allow_set(allbtn, EINA_FALSE);
+       evas_object_propagate_events_set(allbtn, EINA_FALSE);
+       evas_object_smart_callback_add(allbtn, "clicked", __setting_select_all_layout_mouse_up_cb, list_data);
+       evas_object_smart_callback_add(allbtn, "pressed", setting_callback_select_all_button_pressed_cb, icon);
+       evas_object_smart_callback_add(allbtn, "unpressed", setting_callback_select_all_button_unpressed_cb, icon);
+
+       evas_object_show(allbtn);
+       elm_object_item_part_content_set(list_data->navi_it, "title_right_btn", allbtn);
+
+       Evas_Object *scroller = elm_genlist_add(list_data->win_main);
+       retvm_if(scroller == NULL, NULL, "scroller == NULL");
+       elm_genlist_realization_mode_set(scroller, EINA_TRUE);
+       elm_genlist_clear(scroller);    /* first to clear list */
+       evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
+
+       int index = 0;
+       for (; index < list_data->cur_item_num; index++) {
+               list_data->chk_items[index].data_GenItem =
+                       setting_create_Gendial_field_def(scroller,
+                                       &(list_data->itc_1text_2icon),
+                                       setting_done_list_Gendial_mouse_up_cb,
+                                       list_data,
+                                       SWALLOW_Type_1CHECK, NULL,
+                                       list_data->allow_items[index].thumb_path, 0,
+                                       list_data->chk_items
+                                       [index].item_name, NULL,
+                                       setting_done_list_Gendial_chk_btn_cb);
+               if (list_data->chk_items[index].data_GenItem) {
+                       list_data->chk_items[index].data_GenItem->userdata = list_data;
+               } else {
+                       SETTING_TRACE_ERROR("list_data->chk_items[index].data_GenItem is NULL");
+               }
+       }
+
+       return scroller;
 }
 
 /**
@@ -1798,10 +3365,12 @@ Evas_Object *setting_create_done_list(Setting_Done_List_Data *list_data)
 *
 * @param[in] item
 */
+EXPORT_PUBLIC
 void setting_disable_genlist_item(Elm_Object_Item *item)
 {
        if (item) {
                elm_object_item_disabled_set(item, EINA_TRUE); /* make it be dim displayed */
+               //elm_genlist_item_update(item);/*no need to call it*/
        }
 }
 
@@ -1810,10 +3379,354 @@ void setting_disable_genlist_item(Elm_Object_Item *item)
 *
 * @param[in] item
 */
+EXPORT_PUBLIC
 void setting_enable_genlist_item(Elm_Object_Item *item)
 {
        if (item) {
                elm_object_item_disabled_set(item, EINA_FALSE); /* make it be normally displayed */
+               //elm_genlist_item_update(item);/*no need to call it*/
+       }
+}
+
+EXPORT_PUBLIC
+void setting_genlist_item_disabled_set(Setting_GenGroupItem_Data *item_data, int disable)
+{
+       if (item_data && item_data->item) {
+               elm_object_item_disabled_set(item_data->item, disable); /* make it be dim displayed */
+       }
+}
+EXPORT_PUBLIC void setting_genlist_unregister_tts_access_highlight(Evas_Object *obj, const char *itc )
+{
+       setting_retm_if(!obj,"obj is NULL");
+       if (!itc || (itc && 0 != safeStrCmp(itc, "dialogue/1text.2icon.divider")
+                       && 0 != safeStrCmp(itc, "dialogue/1text.1icon.divider")
+                       && 0 != safeStrCmp(itc,"dialogue/setting.1text.2icon.4.divider.tb")
+                       && 0 != safeStrCmp(itc,"dialogue/setting.1text.2icon.divider")
+                       && 0 != safeStrCmp(itc,"dialogue/newset.1text.2icon.divider"))) {
+
+                       //SETTING_TRACE("check/radio highlight is unregistered");
+                       elm_access_object_unregister(obj);
+       }
+}
+
+
+EXPORT_PUBLIC
+void __add_gl_tts_feature(Elm_Object_Item *item)
+{
+       //SETTING_TRACE_BEGIN;
+       ret_if(!item);
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       ret_if(!itc);
+       //SETTING_TRACE("itc->item_style:%s", itc->item_style);
+       if (0 == safeStrCmp(itc->item_style, "dialogue/separator"))
+       {
+               elm_object_item_access_unregister(item);
+               return;
+       }
+
+       //all items which may have text to read
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
+       ret_if(!list_item);
+       if (isSpaceStr(list_item->keyStr))
+       {
+               elm_object_item_access_unregister(item);
+               return;
+       }
+
+       if (!safeStrCmp(itc->item_style, "1icon/with_no_line")
+               && list_item->swallow_type == SWALLOW_Type_1BUTTON) {
+               elm_object_item_access_unregister(item);
+               return;
+       }
+
+       char lable[MAX_SPECIALIZITION_LEN] = {0,};
+       char state[MAX_SPECIALIZITION_LEN] = {0,};
+       char guide[MAX_SPECIALIZITION_LEN] = {0,};
+
+
+
+       if (list_item) {
+               //SETTING_TRACE("list_item->keyStr:%s", _(list_item->keyStr));
+               if(list_item->swallow_type == SWALLOW_Type_1TOGGLE
+                       || list_item->swallow_type == SWALLOW_Type_1ICON_1RADIO
+                       || list_item->swallow_type == SWALLOW_Type_1RADIO
+                       || list_item->swallow_type == SWALLOW_Type_1CHECK
+                       || list_item->swallow_type == SWALLOW_Type_1RADIO_1LABLE
+                       || list_item->swallow_type == SWALLOW_Type_1ICON_1DOTTOOGLE){
+                       //unregister_access_highlight(list_item);
+
+               }
+               switch (list_item->swallow_type)
+               {
+                       case SWALLOW_Type_1TOGGLE:
+                       case SWALLOW_Type_1ICON_1RADIO:
+                       {
+                               //SETTING_TRACE("case SWALLOW_Type_1TOGGLE or SWALLOW_Type_1ICON_1RADIO");
+                               //"dialogue/1text.2icon.divider".keystr current is on/off,switch the switcher to chaneg it,click the item for detail settings"
+                               //not:keystr current is on/off,switch the switcher or click the item to chaneg it.
+                               g_strlcat(lable, _(list_item->keyStr), MAX_SPECIALIZITION_LEN);
+                               snprintf(state, sizeof(state),
+                                        _("IDS_ST_BODY_P1SS_IS_CURRENTLY_P2SS_T_TTS"),
+                                        _(list_item->keyStr), list_item->chk_status?_("IDS_ST_BODY_ON_M_STATUS"):_("IDS_COM_BODY_OFF_M_STATUS"));
+
+                               if (0 == safeStrCmp(itc->item_style, "dialogue/1text.2icon.divider")
+                                   || 0 == safeStrCmp(itc->item_style, "dialogue/1text.1icon.divider"))
+                               {
+                                       //g_strlcat(guide, _("Tap switcher to change it, or double tap the item for detail settings"), MAX_SPECIALIZITION_LEN);
+                                       g_strlcat(guide, _("IDS_ST_BODY_TOGGLE_THE_BUTTON_TO_ENABLE_OR_DISABLE_SCREEN_READER_OR_DOUBLE_TAP_TO_OPEN_THE_MENU_T_TTS"), MAX_SPECIALIZITION_LEN);
+                               }
+                               else
+                               {
+                                       //g_strlcat(guide, _("Tap item or switcher to chaneg it."), MAX_SPECIALIZITION_LEN);
+                                       g_strlcat(guide, _("IDS_ST_BODY_DOUBLE_TAP_TO_EDIT_THIS_FIELD_T_TTS"), MAX_SPECIALIZITION_LEN);
+                               }
+                               break;
+                       }
+                       case SWALLOW_Type_1CHECK:
+                       case SWALLOW_Type_1RADIO:
+                       case SWALLOW_Type_1RADIO_1LABLE:
+                       {
+                               //SETTING_TRACE("case SWALLOW_Type_1CHECK or SWALLOW_Type_1RADIO or SWALLOW_Type_1RADIO_1LABLE");
+                               //keystr, click to select it
+                               g_strlcat(lable, _(list_item->keyStr), MAX_SPECIALIZITION_LEN);
+                               //g_strlcat(guide, _("Double tap it to select"), MAX_SPECIALIZITION_LEN);
+                               g_strlcat(guide, _("IDS_ST_BODY_DOUBLE_TAP_TO_EDIT_THIS_FIELD_T_TTS"), MAX_SPECIALIZITION_LEN);
+                               break;
+                       }
+                       case SWALLOW_Type_1ICON_1PROCESS :
+                       {
+                               //SETTING_TRACE("case SWALLOW_Type_1ICON_1PROCESS");
+                               //keystr,its setting is in processing
+                               g_strlcat(lable, _(list_item->keyStr), MAX_SPECIALIZITION_LEN);
+                               g_strlcat(guide, _("IDS_ST_BODY_YOUR_CHANGES_ARE_BEING_MADE_T_TTS"), MAX_SPECIALIZITION_LEN);
+                               break;
+                       }
+                       case SWALLOW_Type_LAYOUT_ENTRY:
+                       case SWALLOW_Type_LAYOUT_EDITFIELD:
+                       {
+                               //SETTING_TRACE("case SWALLOW_Type_LAYOUT_ENTRY");
+                               //keystr is substr,to tap and modify it if you want
+                               g_strlcat(lable, _(list_item->keyStr), MAX_SPECIALIZITION_LEN);
+                               snprintf(state, sizeof(state), _("IDS_ST_BODY_P1SS_IS_CURRENTLY_P2SS_T_TTS"), _(list_item->keyStr), list_item->sub_desc);
+                               g_strlcat(guide, _("IDS_ST_BODY_DOUBLE_TAP_TO_EDIT_THIS_FIELD_T_TTS"), MAX_SPECIALIZITION_LEN);
+                               break;
+                       }
+                       case SWALLOW_Type_LAYOUT_DATEFIELD:
+                       {
+                               //year month ...
+                               //to do..
+                               //SETTING_TRACE("case SWALLOW_Type_LAYOUT_DATEFIELD");
+                               break;
+                       }
+                       case SWALLOW_Type_INVALID:
+                       case SWALLOW_Type_1ICON_1DOTTOOGLE:
+                       {
+                               //SETTING_TRACE("case SWALLOW_Type_INVALID");
+                               //"dialogue/1text.1icon.2",menu
+                               //"dialogue/1text",menu
+                               //"dialogue/multiline/2text",keystr is substr
+                               //"dialogue/2text.1icon.3",keystr is substr
+                               //"dialogue/2text.3/expandable":keystr is substr, click it to open the child menus
+                               //"dialogue/2text.3":keystr is substr, menu
+                               g_strlcat(lable, _(list_item->keyStr), MAX_SPECIALIZITION_LEN);
+                               //SETTING_TRACE("list_item->sub_desc:%s", list_item->sub_desc);
+                               if (list_item->sub_desc)
+                               {
+                                       snprintf(state, sizeof(state), _("IDS_ST_BODY_P1SS_IS_CURRENTLY_P2SS_T_TTS"), _(list_item->keyStr), _(list_item->sub_desc));
+                               }
+                               //SETTING_TRACE("state:%s", state);
+
+                               if (0 != safeStrCmp(itc->item_style, "dialogue/multiline/2text")
+                                   && 0 != safeStrCmp(itc->item_style, "dialogue/2text.1icon.3"))
+                               {
+                                       if (0 == safeStrCmp(itc->item_style, "dialogue/2text.3/expandable"))
+                                       {
+                                               g_strlcat(guide, _("IDS_ST_BODY_DOUBLE_TAP_TO_OPEN_THE_MENU_T_TTS"), MAX_SPECIALIZITION_LEN);
+                                       }
+                                       else
+                                               g_strlcat(guide, _(TTS_CONTENT_MENU_CLICK_INFO), MAX_SPECIALIZITION_LEN);
+                               }
+                               //SETTING_TRACE("guild:%s", guide);
+
+#if 0
+                               char speciliztion[MAX_SPECIALIZITION_LEN] = {0,};
+                               if (item_data->keyStr)
+                               g_strlcat(speciliztion, _(item_data->keyStr), MAX_SPECIALIZITION_LEN);
+
+
+                               if (item_data->sub_desc)
+                               {
+                               g_strlcat(speciliztion, "        is    ", MAX_SPECIALIZITION_LEN);
+                               g_strlcat(speciliztion, item_data->sub_desc, MAX_SPECIALIZITION_LEN);
+                               }
+#endif
+                               break;
+                       }
+                       //read the KEYSTR directly
+                       case SWALLOW_Type_1TEXT_1IMAGE:
+                       {
+                               g_strlcat(lable, _(list_item->keyStr), MAX_SPECIALIZITION_LEN);
+                               break;
+                       }
+                       case SWALLOW_Type_LAYOUT_SPECIALIZTION:
+                       default: //skip them
+                       {
+                               return;
+                       }
+               }
+
+               //SETTING_TRACE("speciliztion:%s", speciliztion);
+               Evas_Object *eo = elm_object_item_access_object_get(item);
+               //setting_set_tts_info(eo, speciliztion, " ", NULL, TTS_CONTENT_MENU_CLICK_INFO);
+               setting_set_tts_info(eo, lable, " ", isEmptyStr(state)?NULL:state, isEmptyStr(guide)?NULL:guide);
+       }
+}
+
+EXPORT_PUBLIC
+void setting_check_genlist_item_bottom_line(Elm_Object_Item *item)
+{//SETTING_TRACE_BEGIN;
+       ret_if(!item);
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (itc && itc->item_style)
+       {
+               //SETTING_TRACE("itc->item_style:%s", itc->item_style);
+               if (0 == safeStrCmp(itc->item_style, "groupindex")
+                   || 0 == safeStrNCmp(itc->item_style, "dialogue/separator", safeStrLen("dialogue/separator"))
+                   || 0 == safeStrNCmp(itc->item_style, "bottom_line", safeStrLen("bottom_line"))
+                   || 0 == safeStrNCmp(itc->item_style, "multiline_sub", safeStrLen("multiline_sub"))
+                   || 0 == safeStrNCmp(itc->item_style, "1icon", safeStrLen("1icon"))
+                  )
+               {
+                       if (0 == safeStrCmp(itc->item_style, "groupindex"))
+                       {
+                               Elm_Object_Item *prev_item = elm_genlist_item_prev_get(item);
+                               if(prev_item)
+                               {
+                                       const Elm_Genlist_Item_Class *itc2 = elm_genlist_item_item_class_get(prev_item);
+                                       if (itc2 && !safeStrCmp(itc2->item_style, "bottom_line"))
+                                       {
+                                               elm_object_item_del(prev_item);
+                                       }
+                               }
+                       }
+                       return;
+               }
+               else
+               {
+                       #if 0
+                       Elm_Object_Item *prev_item = elm_genlist_item_prev_get(item);
+                       if(prev_item)
+                       {
+                               const Elm_Genlist_Item_Class *itc2 = elm_genlist_item_item_class_get(prev_item);
+                               //if(itc2) SETTING_TRACE("itc2->item_style:%s", itc2->item_style);
+                               if (!safeStrCmp(itc->item_style, "bottom_line")
+                                   && itc2 && !safeStrCmp(itc2->item_style, "bottom_line"))
+                               {
+                                       return;
+                               }
+                       }
+                       Elm_Object_Item *next_item = elm_genlist_item_next_get(item);
+                       if(next_item)
+                       {
+                               const Elm_Genlist_Item_Class *itc2 = elm_genlist_item_item_class_get(next_item);
+                               //if(itc2) SETTING_TRACE("itc2->item_style:%s", itc2->item_style);
+                               if (itc2 && !safeStrCmp(itc2->item_style, "bottom_line"))//already has the bottom line
+                               {
+                                       return;
+                               }
+                       }
+                       #endif
+
+                       //SETTING_TRACE("Adding[prev_item:%p, next_item:%p].....", prev_item, next_item);
+                       Evas_Object *scroller = elm_object_item_widget_get(item);
+                       Elm_Object_Item *parent = elm_genlist_item_parent_get(item);
+                       //SETTING_TRACE("parent:%p", parent);
+                       if(parent) //expandable
+                       {
+                               Elm_Object_Item *it = elm_genlist_item_insert_before(scroller, &(itc_bottom_line), NULL, parent,
+                                                           item, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                               elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                               Evas_Object *real_obj = elm_object_item_edje_get(item);
+                               setting_decorate_image(real_obj, "W021L2");//
+                       }
+
+               }
+       }
+}
+
+EXPORT_PUBLIC
+void __gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       //SETTING_TRACE_BEGIN;
+       setting_retm_if(event_info == NULL, "invalid parameter: event_info is NULL");
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
+#if SUPPORT_TTS
+       __add_gl_tts_feature(item);
+#endif
+       setting_check_genlist_item_bottom_line(item);
+
+       if (list_item) {
+               //SETTING_TRACE("%s:%d", _(list_item->keyStr), list_item->group_style);
+               if (list_item->group_style == SETTING_GROUP_STYLE_TOP) {
+                       elm_object_item_signal_emit(item, "elm,state,top", "");
+               } else if (list_item->group_style == SETTING_GROUP_STYLE_BOTTOM) {
+                       elm_object_item_signal_emit(item, "elm,state,bottom", "");
+               } else if (list_item->group_style == SETTING_GROUP_STYLE_CENTER) {
+                       elm_object_item_signal_emit(item, "elm,state,center", "");
+               } else {
+                       elm_object_item_signal_emit(item, "elm,state,normal", "");
+               }
+       } else {
+               /* item is used for description */
+               elm_object_item_signal_emit(item, "elm,state,center", "");
+       }
+}
+
+EXPORT_PUBLIC void setting_genlist_item_groupstyle_set(Setting_GenGroupItem_Data *list_item, setting_group_style group_style)
+{
+       if (list_item) {
+               list_item->group_style = group_style;
+               //SETTING_TRACE("list_item->group_style:%d", list_item->group_style);
+               if (list_item->item)
+               {
+                       //SETTING_TRACE("%s:%d", _(list_item->keyStr), list_item->group_style);
+                       if (list_item->group_style == SETTING_GROUP_STYLE_TOP) {
+                               elm_object_item_signal_emit(list_item->item, "elm,state,top", "");
+                       } else if (list_item->group_style == SETTING_GROUP_STYLE_BOTTOM) {
+                               elm_object_item_signal_emit(list_item->item, "elm,state,bottom", "");
+                       } else if (list_item->group_style == SETTING_GROUP_STYLE_CENTER) {
+                               elm_object_item_signal_emit(list_item->item, "elm,state,center", "");
+                       } else {
+                               elm_object_item_signal_emit(list_item->item, "elm,state,normal", "");
+                       }
+               }
+       }
+}
+
+//for check,radio,slider etc..
+EXPORT_PUBLIC void setting_update_gl_item_chk_status(Setting_GenGroupItem_Data *item_data, int status)
+{
+       if (item_data && item_data->chk_status != status) {
+               item_data->chk_status = status;
+               if(item_data->item)
+               {
+                       //SETTING_TRACE_DEBUG("update item %d", item_data->chk_status);
+                       elm_genlist_item_fields_update(item_data->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               }
+       }
+}
+
+//do not check current status, only update the icon.2 of item which has 2 icons.
+EXPORT_PUBLIC void setting_force_update_gl_item_chk_status(Setting_GenGroupItem_Data *item_data, int status)
+{
+       if (item_data) {
+               item_data->chk_status = status;
+               if(item_data->item)
+               {
+                       //SETTING_TRACE_DEBUG("update item %s : %d", item_data->keyStr, item_data->chk_status);
+                       elm_genlist_item_fields_update(item_data->item, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               }
        }
 }