4 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6 * Contact: Tomasz Olszak <t.olszak@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include "setting-accessibility-screen-reader.h"
23 #include "setting-accessibility-screen-reader-settings.h"
25 static void screen_reader_key_change_vconf_cb(keynode_t *node, void *user_data)
28 Setting_GenGroupItem_Data *screenReaderItem = user_data;
29 SETTING_TRACE_DEBUG("check_status: %i, node->value.i: %i", screenReaderItem->chk_status, node->value.i);
30 /* I don't know why following code does not update check box to checked/unchecked */
31 setting_update_gl_item_chk_status(screenReaderItem, node->value.b ? 1 : 0);
32 elm_genlist_item_update(screenReaderItem->item);
36 static Eina_Bool __setting_accessibility_screen_reader_page_hide(void *data, Elm_Object_Item *it)
40 retv_if(data == NULL, EINA_TRUE);
41 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
42 vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, screen_reader_key_change_vconf_cb);
43 elm_naviframe_item_pop(ad->navi_bar);
48 static void setting_accessibility_main_chk_screenreader_vconf_update(int state)
50 vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, state ? 1 : 0);
53 static void setting_accessibility_main_chk_screenreader_cb(void *data,
54 Evas_Object *obj, void *event_info)
57 retm_if(data == NULL, "Data parameter is NULL");
58 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
59 SettingAccessibilityUG *ad = list_item->userdata;
61 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
63 SETTING_TRACE_DEBUG("check_status: %i", list_item->chk_status);
64 setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status);
67 static void setting_accessibility_screenreader_settings_mouse_up_Gendial_list_cb(void *data,
68 Evas_Object *obj, void *event_info)
71 retm_if(data == NULL, "Invalid argument: data is NULL");
72 retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
73 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
74 SettingAccessibilityUG *ad = (SettingAccessibilityUG *)data;
76 elm_genlist_item_selected_set(item, 0);
78 setting_accessibility_screen_reader_settings_page_create(ad);
83 static void setting_accessibility_screenreader_mouse_up_Gendial_list_cb(void *data,
84 Evas_Object *obj, void *event_info)
87 retm_if(data == NULL, "Invalid argument: data is NULL");
88 retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
89 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
90 SettingAccessibilityUG *ad = (SettingAccessibilityUG *)data;
92 elm_genlist_item_selected_set(item, 0);
94 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
95 setting_retm_if(data == NULL, "Data parameter is NULL");
96 setting_update_gl_item_chk_status(list_item, list_item->chk_status ? 0 : 1);
97 setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status ? 1 : 0);
101 void setting_accessibility_screen_reader_page_create(SettingAccessibilityUG *data)
103 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
104 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
105 retvm_if(genlist == NULL, NULL, "Cannot set genlist object as content of layout");
106 elm_genlist_realization_mode_set(genlist, EINA_TRUE);
107 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
108 elm_object_style_set(genlist, "dialogue");
109 elm_genlist_clear(genlist);
110 /*elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); */
113 Setting_GenGroupItem_Data *screenreader_checkbox =
114 setting_create_Gendial_field_def(genlist, &itc_1text_1icon,
115 setting_accessibility_screenreader_mouse_up_Gendial_list_cb,
116 ad, SWALLOW_Type_1ICON_1RADIO, NULL,
117 NULL, 1, _(DEVOPTION_STR_ACCESSIBILITY_SCREENREADER),
118 NULL, setting_accessibility_main_chk_screenreader_cb);
119 screenreader_checkbox->userdata = ad;
120 __BACK_POINTER_SET(screenreader_checkbox);
121 int screen_reader = 0;
122 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &screen_reader);
123 screenreader_checkbox->chk_status = screen_reader ? 1 : 0;
124 /*---------------------------------------------------------------------------------------------- */
125 int vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
126 screen_reader_key_change_vconf_cb, screenreader_checkbox);
127 if (vconf_ret != 0) {
128 SETTING_TRACE("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS)");
129 return SETTING_RETURN_FAIL;
132 Setting_GenGroupItem_Data *multiline_screen_reader_comment =
133 setting_create_Gendial_field_def(genlist, &itc_multiline_text,
135 ad, SWALLOW_Type_INVALID, NULL,
137 _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_DESCRIPTION), NULL, NULL);
138 multiline_screen_reader_comment->userdata = ad;
139 __BACK_POINTER_SET(multiline_screen_reader_comment);
141 Setting_GenGroupItem_Data *screen_reader_settings =
142 setting_create_Gendial_field_def(genlist, &itc_1text,
143 setting_accessibility_screenreader_settings_mouse_up_Gendial_list_cb,
144 ad, SWALLOW_Type_INVALID, NULL,
146 DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS, NULL, NULL);
147 screen_reader_settings->userdata = ad;
148 __BACK_POINTER_SET(screen_reader_settings);
150 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(DEVOPTION_STR_ACCESSIBILITY_SCREENREADER), NULL, NULL, genlist, NULL);
151 elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
153 elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)__setting_accessibility_screen_reader_page_hide, ad);