--- /dev/null
+/*
+ * accessibility
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Michal Pawluk <m.pawluk@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://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,
+ * 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-accessibility-accessibility-launcher.h"
+
+#define ITEMS_COUNT 3
+#define NAME_MAX_LENGTH 64
+
+typedef struct {
+ char name[NAME_MAX_LENGTH];
+ Setting_GenGroupItem_Data *item;
+} __Item_Wrapper;
+
+static Eina_Bool __naviframe_pop_cb(void *data, Elm_Object_Item *it)
+{
+ SETTING_TRACE_BEGIN;
+ retv_if(data == NULL, EINA_TRUE);
+ __Item_Wrapper *items = data;
+ free(items);
+ SETTING_TRACE_END;
+ return EINA_TRUE;
+}
+
+static void __back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(data == NULL, "Data argument is NULL");
+ SettingAccessibility *ad = data;
+ elm_naviframe_item_pop(ad->md.naviframe);
+ SETTING_TRACE_END;
+}
+
+static void __update_vconf(__Item_Wrapper *items)
+{
+ int value = 0;
+ int i;
+ for (i = 0; i < ITEMS_COUNT; i++)
+ if (items[i].item->chk_status)
+ value = value | (1 << i);
+ vconf_set_int(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH, value);
+}
+
+static void __accessibility_launcher_item_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(data == NULL, "Input parameter is NULL");
+ Setting_GenGroupItem_Data *list_item = data;
+ list_item->chk_status = !list_item->chk_status;
+ __update_vconf(list_item->userdata);
+ SETTING_TRACE_END;
+}
+
+static void __accessibility_launcher_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
+ Elm_Object_Item *item = event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+ Setting_GenGroupItem_Data *list_item = elm_object_item_data_get(item);
+ setting_update_gl_item_chk_status(list_item, list_item->chk_status ? 0 : 1);
+ __update_vconf(list_item->userdata);
+ SETTING_TRACE_END;
+}
+
+static void __accessibility_launcher_state_update_name(Setting_GenGroupItem_Data *item)
+{
+ SETTING_TRACE_BEGIN;
+ char *item_label = item->chk_status ?
+ _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_ON) : _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_OFF);
+
+ if (item_label && strlen(item_label) > 0) {
+ free(item->keyStr);
+ item->keyStr = strdup(item_label);
+ }
+
+ elm_genlist_item_update(item->item);
+ SETTING_TRACE_END;
+}
+
+static void __updete_main_switch(Setting_GenGroupItem_Data *list_item)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(list_item == NULL, "Data parameter is NULL");
+ __accessibility_launcher_state_update_name(list_item);
+ vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE, list_item->chk_status);
+ __Item_Wrapper *items = list_item->userdata;
+ int i;
+ for (i = 0; i < ITEMS_COUNT; i++)
+ elm_object_item_disabled_set(items[i].item->item, list_item->chk_status ? EINA_FALSE : EINA_TRUE);
+
+ SETTING_TRACE_END;
+}
+
+static void __accessibility_launcher_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(data == NULL, "Data parameter is NULL");
+ Setting_GenGroupItem_Data *list_item = data;
+ list_item->chk_status = !list_item->chk_status;
+ __updete_main_switch(list_item);
+ SETTING_TRACE_END;
+}
+
+static void __accessibility_launcher_off_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ retm_if(data == NULL, "Invalid argument: data is NULL");
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+ Setting_GenGroupItem_Data *list_item = elm_object_item_data_get(item);
+ setting_update_gl_item_chk_status(list_item, list_item->chk_status ? 0 : 1);
+ __updete_main_switch(list_item);
+ SETTING_TRACE_END;
+}
+
+void setting_accessibility_accessibility_launcher_page_create(SettingAccessibility *ad)
+{
+ SETTING_TRACE_BEGIN;
+
+ __Item_Wrapper *items = calloc(sizeof(__Item_Wrapper), ITEMS_COUNT);
+ retm_if(items == NULL, "calloc failed");
+ strncpy(items[0].name, _(KeyStr_Accessibility), NAME_MAX_LENGTH);
+ strncpy(items[1].name, _(DEVOPTION_STR_ACCESSIBILITY_SCREENREADER), NAME_MAX_LENGTH);
+ strncpy(items[2].name, _(DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH), NAME_MAX_LENGTH);
+
+ int ret;
+ int state = 0;
+ Setting_GenGroupItem_Data *item = NULL;
+ Evas_Object *genlist = elm_genlist_add(ad->md.naviframe);
+ if (genlist == NULL) {
+ SETTING_TRACE_ERROR("Cannot set genlist object as content of layout");
+ free(items);
+ return;
+ }
+
+ elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+ elm_object_style_set(genlist, "dialogue");
+ elm_genlist_clear(genlist);
+
+ ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE, &state);
+ if (ret != VCONF_OK) {
+ SETTING_TRACE("FAIL: vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE)");
+ }
+
+ item = setting_create_Gendial_field_def(
+ genlist, &itc_1text_1icon,
+ __accessibility_launcher_off_mouse_up_Gendial_list_cb,
+ items, SWALLOW_Type_1ICON_1RADIO, NULL,
+ NULL, state, state ? _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_ON) : _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_OFF),
+ NULL, __accessibility_launcher_checkbox_cb);
+
+ if (item)
+ item->userdata = items;
+
+ item = setting_create_Gendial_field_def(
+ genlist, &ad->itc_multiline_sub,
+ NULL, ad, SWALLOW_Type_INVALID, NULL,
+ NULL, 0,
+ NULL,
+ _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_COMMENT),
+ NULL);
+
+ if (item) {
+ elm_genlist_item_select_mode_set(item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ }
+
+ int vconf_state;
+ ret = vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH, &vconf_state);
+ if (ret != VCONF_OK) {
+ SETTING_TRACE("FAIL: vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH)");
+ }
+ int i;
+ for (i = 0; i < ITEMS_COUNT; i++) {
+ Setting_GenGroupItem_Data *item = setting_create_Gendial_field_def(
+ genlist, &itc_1text_1icon,
+ __accessibility_launcher_item_selected,
+ ad, SWALLOW_Type_1ICON_1RADIO, NULL,
+ NULL, vconf_state & (1 << i), items[i].name,
+ NULL, __accessibility_launcher_item_checkbox_cb);
+
+ if (item) {
+ item->userdata = items;
+ item->chk_id = i;
+ items[i].item = item;
+ }
+
+ elm_object_item_disabled_set(item->item, state ? EINA_FALSE : EINA_TRUE);
+ }
+
+ ad->md.naviframe_it = elm_naviframe_item_push(ad->md.naviframe, _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER), NULL, NULL, genlist, NULL);
+ elm_naviframe_item_pop_cb_set(ad->md.naviframe_it, __naviframe_pop_cb, items);
+ elm_object_item_domain_text_translatable_set(ad->md.naviframe_it, SETTING_PACKAGE, EINA_TRUE);
+
+ Evas_Object *back_btn = setting_create_button(ad->md.naviframe, NULL, NAVI_BACK_ARROW_BUTTON_STYLE, __back_cb, ad);
+ elm_layout_content_set(ad->md.naviframe, "prev_btn", back_btn);
+ SETTING_TRACE_END;
+}
\ No newline at end of file