tizen 2.3 release
[apps/home/settings.git] / setting-font / src / setting-font-font-size.c
index 67356db..5f814ef 100755 (executable)
@@ -1,40 +1,30 @@
 /*
  * 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-font-font-size.h>
 
-typedef struct {
-       const char* key_font_name;
-       int font_size;
-} settings_font_size_table;
-
-static char* result_str_arr[] = {"Small","Normal","Large","Huge","Giant"};
-static const settings_font_size_table font_size_table[] = {
-                               {"IDS_EMAIL_POP_GIANT_M_TEXTSIZE", SYSTEM_SETTINGS_FONT_SIZE_GIANT},
-                               {"IDS_EMAIL_OPT_HUGE_M_TEXTSIZE", SYSTEM_SETTINGS_FONT_SIZE_HUGE},
-                               {"IDS_ST_BODY_TEXTSTYLE_LARGE", SYSTEM_SETTINGS_FONT_SIZE_LARGE},
-                               {"IDS_ST_BODY_NORMAL_T_PROFILE", SYSTEM_SETTINGS_FONT_SIZE_NORMAL},
-                               {"IDS_ST_BODY_SMALL_M_TEXTSIZE", SYSTEM_SETTINGS_FONT_SIZE_SMALL},
-                               {NULL, 0}
-                       };
 
 #define STR_FONT_SIZE_CHANGING "IDS_ST_BODY_CHANGING_THE_FONT_SIZE_IN_ACCESSIBILITY_SETTINGS_WILL_OVERRIDE_THE_FONT_SIZE_IN_EACH_APPLICATION"
 
-static void __setting_font_font_size_click_softkey_back_cb(void *data, Evas_Object * obj, void *event_info);
+static Eina_Bool __setting_font_font_size_click_softkey_back_cb(void *data, Elm_Object_Item *it);
 
 static int setting_font_font_size_create(void *cb);
 static int setting_font_font_size_destroy(void *cb);
@@ -48,21 +38,59 @@ setting_view setting_view_font_font_size = {
        .cleanup = setting_font_font_size_cleanup,
 };
 
+static char* result_str_arr[] = {"Small","Normal","Large","Huge","Giant"};
+
+static int convert_font_size(int size)
+{
+       int font_size;
+       if (SYSTEM_SETTINGS_FONT_SIZE_SMALL == size) {
+                       font_size = LABEL_FONT_SIZE_SMALL;
+               } else if (SYSTEM_SETTINGS_FONT_SIZE_LARGE == size) {
+                       font_size = LABEL_FONT_SIZE_LARGE;
+               } else if (SYSTEM_SETTINGS_FONT_SIZE_HUGE == size) {
+                       font_size = LABEL_FONT_SIZE_HUGE;
+               } else if (SYSTEM_SETTINGS_FONT_SIZE_GIANT == size) {
+                       font_size = LABEL_FONT_SIZE_GIANT;
+               } else {
+                       font_size = LABEL_FONT_SIZE_NORMAL;
+               }
+       return font_size;
+}
+
+char *get_font_size_name_by_id(char* font_size_id)
+{
+       SETTING_TRACE_BEGIN;
+       int i = 0;
+       while(font_size_table[i].key_font_name){
+               if(!safeStrCmp(font_size_table[i].key_font_name, font_size_id)){
+                       return setting_customize_text(_(font_size_table[i].key_font_name), convert_font_size(font_size_table[i].font_size),NULL,NULL);
+               }
+               i++;
+       }
+       return NULL;
+
+}
+char *_item_text_font_size_keystr2_get(void *data, Evas_Object *obj, const char *part)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
+       Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
+
+       if (!strcmp(part, "elm.text.main.left")) {
+               if (item_data->keyStr2) {
+                       //SETTING_TRACE("gl update item_data->keyStr2[%s]",item_data->keyStr2);
+                       return get_font_size_name_by_id(item_data->keyStr2);
+               }
+       }
+       SETTING_TRACE_END;
+       return NULL;
+}
+
 /* ***************************************************
 **
 ** basic func
 **
 ** **************************************************/
-static void __process_after_item_realized(void *data, Evas_Object *obj, void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       SettingFontUG *ad = data;
-       if (ad->popup)
-       {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
-       }
-}
 
 static int setting_font_font_size_create(void *cb)
 {
@@ -72,7 +100,8 @@ static int setting_font_font_size_create(void *cb)
 
        SettingFontUG *ad = (SettingFontUG *) cb;
        Evas_Object *scroller;
-
+       setting_create_Gendial_itc("dialogue/1text.1icon.3.tb", &(ad->itc_1text_1icon_2_font_size));
+       ad->itc_1text_1icon_2_font_size.func.text_get = _item_text_font_size_keystr2_get;
        retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
                 "win_main_layout is NULL");
 
@@ -80,24 +109,25 @@ static int setting_font_font_size_create(void *cb)
        if (ad->view_to_load == &setting_view_font_font_size) {
                ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
                                                ad->win_get,
-                                               _("IDS_ST_MBODY_FONT_SIZE"),
+                                               "IDS_ST_MBODY_FONT_SIZE",
                                                _("IDS_COM_BODY_BACK"), NULL,
-                                               __setting_font_font_size_click_softkey_back_cb, NULL,
+                                               (setting_call_back_func)__setting_font_font_size_click_softkey_back_cb, NULL,
                                                ad, &scroller, &ad->navibar);
+               ad->navi_it_font_size = elm_naviframe_top_item_get(ad->navibar);
        } else {
-               setting_push_layout_navi_bar_genlist(ad->win_main_layout,
+               ad->navi_it_font_size = setting_push_layout_navi_bar_genlist(ad->win_main_layout,
                                                ad->win_get,
-                                               _("IDS_ST_MBODY_FONT_SIZE"),
+                                               "IDS_ST_MBODY_FONT_SIZE",
                                                _("IDS_COM_BODY_BACK"),
                                                NULL,
-                                               __setting_font_font_size_click_softkey_back_cb,
+                                               (setting_call_back_func)__setting_font_font_size_click_softkey_back_cb,
                                                NULL,
                                                ad, &scroller, ad->navibar);
        }
 
        // [UI] separator
        Elm_Object_Item *item =
-           elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
+           elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
        elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
@@ -106,34 +136,46 @@ static int setting_font_font_size_create(void *cb)
        elm_radio_state_value_set(ad->size_rdg, -1);
 
        int idx = 0;
-       Setting_GenGroupItem_Data *item_data;
+
        while(font_size_table[idx].key_font_name) {
-               item_data = setting_create_Gendial_field_1radio(scroller, &(ad->itc_1text_1icon_2),
+               /*item_data = setting_create_Gendial_field_1radio(scroller, &(ad->itc_1text_1icon_2),
                                                        setting_font_font_size_list_mouse_up_cb,
                                                        ad->size_rdg,
                                                        SWALLOW_Type_1RADIO_1LABLE,
                                                        ad->size_rdg, font_size_table[idx].font_size,
-                                                       font_size_table[idx].key_font_name,
-                                                       NULL);
-               if(item_data)   {
-                       item_data->userdata = ad;
+                                                       setting_customize_text(_(font_size_table[idx].key_font_name), convert_font_size(font_size_table[idx].font_size),NULL,NULL),
+                                                       NULL);*/
+               Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,sizeof(Setting_GenGroupItem_Data));
+               setting_retvm_if(!item_data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "calloc failed");
+               item_data->keyStr2 = (char *)g_strdup(font_size_table[idx].key_font_name);//setting_customize_text(_(font_size_table[idx].key_font_name), convert_font_size(font_size_table[idx].font_size),NULL,NULL);//for display
+               item_data->keyStr = (char *)g_strdup(_(font_size_table[idx].key_font_name));//for tts feature;
+               item_data->swallow_type = SWALLOW_Type_1RADIO_1LABLE;
+               item_data->chk_status = font_size_table[idx].font_size;
+               item_data->chk_change_cb = NULL;
+               item_data->rgd = ad->size_rdg;
+               item_data->userdata = ad;
+               if ( idx == 0) {
+                       item_data->group_style = SETTING_GROUP_STYLE_TOP;
+               } else if(idx == sizeof(font_size_table)/sizeof(font_size_table[0])-1){
+                       item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
                } else {
-                       SETTING_TRACE_ERROR("item_data is null");
-                       return SETTING_RETURN_FAIL;
+                       item_data->group_style = SETTING_GROUP_STYLE_CENTER;
                }
+
+               item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2_font_size), item_data, NULL,
+                                                       ELM_GENLIST_ITEM_NONE, setting_font_font_size_list_mouse_up_cb,ad->size_rdg);
+
                idx++;
        }
 
+
        // [UI] help text
-       setting_create_Gendial_field_def(scroller, &(ad->itc_bg_1icon), NULL,
-                                        ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
-                                        NULL, NULL, 0, STR_FONT_SIZE_CHANGING, NULL,
-                                        NULL);
+       ADD_GL_HELP(scroller,STR_FONT_SIZE_CHANGING);
 
        // update check status - init values
        setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
        setting_view_font_font_size.is_create = 1;
-       evas_object_smart_callback_add(scroller, "realized", __process_after_item_realized, ad);
+       evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, ad);
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -144,10 +186,6 @@ static int setting_font_font_size_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
        SettingFontUG *ad = (SettingFontUG *) cb;
 
-       if (ad->popup) {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
-       }
 
        if (ad->view_to_load == &setting_view_font_font_size) {
                if (ad->ly_main) {
@@ -157,6 +195,12 @@ static int setting_font_font_size_destroy(void *cb)
        } else {
                elm_naviframe_item_pop(ad->navibar);
        }
+       if(ad->navi_it_font_size){
+               ad->navi_it_font_size = NULL;
+       }
+       if(ad->size_rdg != NULL){
+               ad->size_rdg = NULL;
+       }
        setting_view_font_font_size.is_create = 0;
 
        return SETTING_RETURN_SUCCESS;
@@ -190,38 +234,75 @@ static int setting_font_font_size_cleanup(void *cb)
 **
 ** **************************************************/
 
-static void __setting_font_font_size_click_softkey_back_cb(void *data, Evas_Object * obj, void *event_info)
+static Eina_Bool __setting_font_font_size_click_softkey_back_cb(void *data, Elm_Object_Item *it)
 {
        //error check
-       ret_if(data == NULL);
+       retv_if(data == NULL, EINA_FALSE);
        SettingFontUG *ad = (SettingFontUG *) data;
 
        if (ad->view_to_load == &setting_view_font_font_size) {
 
-               int err = 0;
                int value = 0;
-               int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
-               setting_retm_if(ret != 0, "fail to get vconf");
+               int ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &value);
+               setting_retvm_if(ret != 0, EINA_FALSE, "fail to get vconf");
 
-               service_h svc;
-               if (service_create(&svc)) return;
+               app_control_h svc;
+               if (app_control_create(&svc)) {
+                       return EINA_FALSE;
+               }
 
-               service_add_extra_data(svc, "category", "FontSize");
-               service_add_extra_data(svc, "FontSize", result_str_arr[value]);
+               app_control_add_extra_data(svc, "category", "FontSize");
+               app_control_add_extra_data(svc, "FontSize", result_str_arr[value]);
 
                SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","category", "FontSize");
                SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","FontSize", result_str_arr[value]);
 
                ug_send_result(ad->ug, svc);
-               service_destroy(svc);
+               app_control_destroy(svc);
 
                ug_destroy_me(ad->ug);
        } else {
                setting_view_change(&setting_view_font_font_size, &setting_view_font_main, ad);
        }
+       return EINA_TRUE;
+}
+static void __setting_font_size_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       SettingFontUG *ad = (SettingFontUG *) data;
+       if (ad->size_popup) {
+               evas_object_del(ad->size_popup);
+               ad->size_popup = NULL;
+       }
+
+       if(ad->font_size && ad->font_size->item) {
+               elm_genlist_item_expanded_set(ad->font_size->item, FALSE);
+       }
+       //set focus for TTS.
+       //retm_if(ad->cur_focus_item == NULL, "ad->cur_focus_item is NULL");
+       //Evas_Object *eo = elm_object_item_access_object_get(ad->cur_focus_item);
+       //retm_if(eo == NULL, "eo is NULL");
+       //elm_access_highlight_set(eo);
 }
 
-static void setting_font_font_size_list_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
+static Eina_Bool __font_change_call(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       SettingFontUG *ad = (SettingFontUG *) data;
+
+       // logic
+       int ret;
+       ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
+       if(ret != 0){
+               SETTING_TRACE_ERROR("system call failed with error code %d",ret);
+       }
+
+       // finalize
+       ad->font_size_idler = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void setting_font_font_size_list_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
 {
        /* error check */
        SETTING_TRACE_BEGIN;
@@ -233,26 +314,40 @@ static void setting_font_font_size_list_mouse_up_cb(void *data, Evas_Object *obj
        setting_retm_if(data == NULL, "Data parameter is NULL");
 
        SettingFontUG *ad = list_item->userdata;
+       ad->cur_focus_item = item;
        Evas_Object *radio = data;
        elm_radio_value_set(radio, list_item->chk_status);
-       int err = 0;
+
        int ret = 0;
        int old_value = -1;
-       ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &old_value, &err);
+       ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &old_value);
+       if(ret != 0){
+               SETTING_TRACE_ERROR("system call failed with error code %d",ret);
+       }
+       if (old_value == list_item->chk_status) {
+               return;
+       }
 
-       if (old_value == list_item->chk_status) return;
+       ad->ret_font_size = list_item->chk_status;
 
        //Due to long time taken by font Setting, add the block code when font is Setting.
-       if (ad->popup) {
-               evas_object_del(ad->popup);
-               ad->popup = NULL;
-       }
-       ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
-                                "pending_list",
-                                NULL, NULL, NULL, 0, TRUE, TRUE);
-
-       ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, list_item->chk_status, &err);
-       setting_retm_if(ret == -1, "Failed to set vconf");
-       font_size_set();
- }
+       //if (ad->size_popup) {
+       //      evas_object_del(ad->size_popup);
+       //      ad->size_popup = NULL;
+       //}
+       #if 1
+       // original popup
+       ad->size_rdg = NULL;
+       ad->size_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
+                                PROGRESSBAR_STYLE,
+                                NULL, KeyStr_Loading, __setting_font_size_progress_popup_cb, 3/*0*/, TRUE, TRUE);      // 3 seconds to wait in maximum
+       #else
+       setting_create_popup_with_progressbar_withobject(ad, ad->size_popup, ad->win_get,
+                                PROGRESSBAR_STYLE,
+                                NULL, NULL, __setting_font_size_progress_popup_cb, 3/*0*/, TRUE, TRUE);        // 3 seconds to wait in maximum
+
+       //elm_config_all_flush();
+       #endif
+       ad->font_size_idler = ecore_timer_add(1, (Ecore_Task_Cb)__font_change_call, ad);
+}