Add accessibility launcher settings. 56/166356/6
authorPawel Kurowski <p.kurowski2@samsung.com>
Tue, 9 Jan 2018 18:41:58 +0000 (19:41 +0100)
committerPawel Kurowski <p.kurowski2@samsung.com>
Thu, 11 Jan 2018 14:47:35 +0000 (15:47 +0100)
Change-Id: I3208ea97f3713aa0af184b9243caf1a5398a3b7f

setting-accessibility/include/setting-accessibility-accessibility-launcher.h [new file with mode: 0644]
setting-accessibility/include/setting-accessibility.h
setting-accessibility/src/setting-accessibility-accessibility-launcher.c [new file with mode: 0644]
setting-accessibility/src/setting-accessibility-main.c

diff --git a/setting-accessibility/include/setting-accessibility-accessibility-launcher.h b/setting-accessibility/include/setting-accessibility-accessibility-launcher.h
new file mode 100644 (file)
index 0000000..78e024b
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef SETTINGACCESSIBILITYACCESSIBILITYLAUNCHER_H
+#define SETTINGACCESSIBILITYACCESSIBILITYLAUNCHER_H
+
+#include "setting-accessibility.h"
+
+void setting_accessibility_accessibility_launcher_page_create(SettingAccessibility *data);
+
+#endif /* SETTINGACCESSIBILITYACCESSIBILITYLAUNCHER_H */
\ No newline at end of file
index ac2bca71b552082a90a4f86a01e0ee8ab940edfe..7cd03dca4b5f882f7efb3e48247eebfa7f88df69 100755 (executable)
@@ -33,6 +33,9 @@
 #define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH "db/setting/accessibility/universal-switch"
 #define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_STATE "db/setting/accessibility/universal-switch/scanning"
 
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE "db/setting/accessibility/accessibility-launcher"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH "db/setting/accessibility/accessibility-launcher/launch"
+
 #define DEVOPTION_STR_ACCESSIBILITY_VISION     "IDS_ST_HEADER_VISION"
 #define DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_SPEECH \
        "IDS_ST_BODY_SPEECH"
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_BLINK_SUB "Close your eyes for at least 2.0 seconds to allow the device to recognise this switch."
 #define DEVOPTION_STR_ACCESSIBILITY_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_MOUTH "Open mouth"
 
+#define DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER "Accessibility launcher"
+#define DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_HINT "Add shortcuts to specific settings and functions."
+#define DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_COMMENT "Open your accessibility settings by pressing the home key three times in quick succession."
+#define DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_ON "On"
+#define DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_OFF "Off"
+
 #define DEVOPTION_STR_ACCESSIBILITY_SELECT_ITEMS "Select items"
 #define DEVOPTION_STR_ACCESSIBILITY_DELETE     "Delete"
 #define DEVOPTION_STR_ACCESSIBILITY_ALL_CAPS "ALL"
diff --git a/setting-accessibility/src/setting-accessibility-accessibility-launcher.c b/setting-accessibility/src/setting-accessibility-accessibility-launcher.c
new file mode 100644 (file)
index 0000000..cdd8aa5
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * 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
index 3b4d92b860fe70c928554cd9245eb5cd480ea471..ed0c34c1c596e4024f831106532453b2f3de48bc 100644 (file)
@@ -22,6 +22,7 @@
 #include "setting-accessibility-main.h"
 #include "setting-accessibility-screen-reader.h"
 #include "setting-accessibility-universal-switch.h"
+#include "setting-accessibility-accessibility-launcher.h"
 
 static int setting_accessibility_main_create(void *cb);
 static int setting_accessibility_main_destroy(void *cb);
@@ -89,6 +90,16 @@ static void setting_accessibility_universal_switch_mouse_up_Gendial_list_cb(void
        SETTING_TRACE_END;
 }
 
+static void setting_accessibility_accessibility_launcher_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       SettingAccessibility *ad = (SettingAccessibility *)data;
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+       setting_accessibility_accessibility_launcher_page_create(ad);
+       SETTING_TRACE_END;
+}
+
 /**
  * @brief create main view genlist items
  *
@@ -137,6 +148,18 @@ int setting_accessibility_main_generate_genlist(void *data)
                __BACK_POINTER_SET(ad->universal_switch_item);
        }
 
+       Setting_GenGroupItem_Data *item = setting_create_Gendial_field_def(
+               scroller, &ad->itc_multiline_sub,
+               setting_accessibility_accessibility_launcher_mouse_up_Gendial_list_cb,
+               ad, SWALLOW_Type_INVALID, NULL,
+               NULL, 1, _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER),
+               _(DEVOPTION_STR_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_HINT),
+               NULL);
+       if (item) {
+               item->userdata = ad;
+               __BACK_POINTER_SET(item);
+       }
+
        int vconf_ret = vconf_notify_key_changed(
                        VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
                        setting_accessibility_screen_reader_key_change_vconf_cb,