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.
23 #include <vconf-internal-keys.h>
24 #include <efl_extension.h>
26 #include "setting-accessibility-screen-reader-settings.h"
28 #define POPUP_CONTENT_BASE_SIZE 126
38 vconf_check_data_s vconf_check_data[] = {
40 .label = DEVOPTION_STR_ACCESSIBILITY_INDICATOR_TIME,
41 .vconf_key = VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_TIME,
45 .label = DEVOPTION_STR_ACCESSIBILITY_INDICATOR_BATTERY,
46 .vconf_key = VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BATTERY,
50 .label = DEVOPTION_STR_ACCESSIBILITY_INDICATOR_BLUETOOTH,
51 .vconf_key = VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BLUETOOTH,
55 .label = DEVOPTION_STR_ACCESSIBILITY_INDICATOR_SIGNAL_STRENGTH,
56 .vconf_key = VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_SIGNAL_STRENGHT,
60 .label = DEVOPTION_STR_ACCESSIBILITY_INDICATOR_DATE,
61 .vconf_key = VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_DATE,
65 .label = DEVOPTION_STR_ACCESSIBILITY_INDICATOR_UNREAD_NOTIFICATIONS,
66 .vconf_key = VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_MISSED_EVENTS,
70 static Eina_List *items = NULL;
76 static Eina_Bool __setting_accessibility_screen_reader_settings_page_hide(void *data, Elm_Object_Item *it)
80 retv_if(data == NULL, EINA_TRUE);
81 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
82 elm_naviframe_item_pop(ad->navi_bar);
87 static Eina_Bool _vconf_key_value_get(char *key)
89 retvm_if(!key, EINA_FALSE, "Key is NULL");
91 int ret = vconf_get_bool(key, &value);
92 /* retvm_if(ret != 0, false, "Invalid argument: data is NULL"); */
96 static void _vconf_key_value_set(char *key, int value)
98 retm_if(!key, "key == NULL");
100 int ret = vconf_set_bool(key, value);
104 LOGE("Failed to set vconf key %s. Error: %d", key, ret);
109 static void _vconf_key_foreach_check_set(void)
112 int size = sizeof(vconf_check_data) / sizeof(vconf_check_data[0]);
116 for (i = 0; i < size; ++i) {
117 key = vconf_check_data[i].vconf_key;
118 status = *(vconf_check_data[i].status);
119 _vconf_key_value_set(key, status);
123 static void _cancel_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
126 Evas_Object *popup = (Evas_Object *)data;
127 retm_if(!popup, "popup == NULL");
128 evas_object_del(popup);
132 static void _done_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
135 Evas_Object *popup = (Evas_Object *)data;
136 retm_if(!popup, "popup == NULL");
137 evas_object_del(popup);
140 _vconf_key_foreach_check_set();
144 static void _check_state_changed_cb(void *data, Evas_Object *obj, void *event_info)
148 LOGD("data == NULL");
152 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)data;
153 item_data->chk_status = elm_check_state_get(obj);
154 LOGE("Check changed: %s; status: %d, %p", item_data->keyStr, item_data->chk_status, &item_data->chk_status);
160 static void _list_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
164 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
165 retm_if(!item, "item == NULL");
167 elm_genlist_item_selected_set(item, EINA_FALSE);
169 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
170 retm_if(!list_item, "list_item == NULL");
172 LOGI("ITEM SELECTED: %s", list_item->keyStr);
173 setting_update_gl_item_chk_status(list_item, !list_item->chk_status);
178 static void setting_accessibility_screen_reader_settings_status_bar_info_mouse_up_Gendial_list_cb(void *data,
179 Evas_Object *obj, void *event_info)
182 retm_if(data == NULL, "Invalid argument: data is NULL");
183 retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
184 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
185 SettingAccessibilityUG *ad = (SettingAccessibilityUG *)data;
188 Evas_Object *genlist;
189 Setting_GenGroupItem_Data *screenreader_checkbox = NULL;
191 int size = sizeof(vconf_check_data) / sizeof(vconf_check_data[0]);
194 elm_genlist_item_selected_set(item, EINA_FALSE);
196 popup = elm_popup_add(ad->win_main_layout);
197 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
198 /* eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL); */
199 elm_object_part_text_set(popup, "title,text", _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_STATUS_BAR_INFORMATION));
200 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
203 box = elm_box_add(popup);
204 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
207 genlist = elm_genlist_add(box);
208 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
211 for (i = 0; i < size; ++i) {
212 status = _vconf_key_value_get(vconf_check_data[i].vconf_key);
214 screenreader_checkbox = setting_create_Gendial_field_def(genlist, &itc_1text_1icon,
215 _list_item_clicked_cb,
216 ad, SWALLOW_Type_1ICON_1RADIO, NULL,
217 NULL, status, _(vconf_check_data[i].label),
218 NULL, _check_state_changed_cb);
220 vconf_check_data[i].status = &screenreader_checkbox->chk_status;
221 items = eina_list_append(items, screenreader_checkbox);
224 elm_scroller_movement_block_set(genlist, ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL | ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL);
225 elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
227 evas_object_show(genlist);
228 elm_box_pack_end(box, genlist);
229 evas_object_size_hint_min_set(box, -1, ELM_SCALE_SIZE(POPUP_CONTENT_BASE_SIZE) * size);
230 evas_object_size_hint_max_set(box, -1, ELM_SCALE_SIZE(POPUP_CONTENT_BASE_SIZE) * size);
231 elm_object_content_set(popup, box);
233 const char *btnCancelText = "Cancel";
234 const char *btnDoneText = "Done";
236 Evas_Object *btnCancel = setting_create_button(popup, btnCancelText, NULL, _cancel_button_clicked_cb, popup);
237 elm_object_style_set(btnCancel, "popup");
238 elm_object_part_content_set(popup, _("button1"), btnCancel);
239 evas_object_data_set(popup, _("button1"), btnCancelText);
241 Evas_Object *btnDone = setting_create_button(popup, btnDoneText, NULL, _done_button_clicked_cb, popup);
242 elm_object_style_set(btnDone, "popup");
244 elm_object_part_content_set(popup, _("button2"), btnDone);
245 evas_object_data_set(popup, _("button2"), btnDoneText);
247 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _cancel_button_clicked_cb, popup);
249 evas_object_show(popup);
254 void setting_accessibility_screen_reader_settings_page_create(SettingAccessibilityUG *data)
256 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
257 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
258 retvm_if(genlist == NULL, NULL, "Cannot set genlist object as content of layout");
259 elm_genlist_realization_mode_set(genlist, EINA_TRUE);
260 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
261 elm_object_style_set(genlist, "dialogue");
262 elm_genlist_clear(genlist);
265 (void)setting_create_Gendial_field_titleItem(genlist, &(itc_group_item), _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_SPEECH), NULL);
266 (void)setting_create_Gendial_field_titleItem(genlist, &(itc_group_item), _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_OTHER_FEEDBACK), NULL);
268 Setting_GenGroupItem_Data *status_bar_information_item =
269 setting_create_Gendial_field_def(genlist, &itc_1text,
270 setting_accessibility_screen_reader_settings_status_bar_info_mouse_up_Gendial_list_cb,
271 ad, SWALLOW_Type_INVALID, NULL,
272 NULL, 1, _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_STATUS_BAR_INFORMATION),
276 status_bar_information_item->userdata = ad;
277 __BACK_POINTER_SET(status_bar_information_item);
280 Setting_GenGroupItem_Data *multiline_status_bar_information_description =
281 setting_create_Gendial_field_def(genlist, &itc_multiline_text,
283 ad, SWALLOW_Type_INVALID, NULL,
285 _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS_STATUS_BAR_INFORMATION_DESCRIPTION), NULL, NULL);
286 multiline_status_bar_information_description->userdata = ad;
287 __BACK_POINTER_SET(multiline_status_bar_information_description);
290 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS), NULL, NULL, genlist, NULL);
291 elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
293 elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)__setting_accessibility_screen_reader_settings_page_hide, ad);