tizen 2.4 release
[apps/home/settings.git] / setting-accessibility / setting-accessibility-screen-reader.c
1 /*
2  * accessibility
3  *
4  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
5  *
6  * Contact: Tomasz Olszak <t.olszak@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  *
20  */
21
22 #include "setting-accessibility-screen-reader.h"
23 #include "setting-accessibility-screen-reader-settings.h"
24
25 static void screen_reader_key_change_vconf_cb(keynode_t *node, void *user_data)
26 {
27         SETTING_TRACE_BEGIN;
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);
33         SETTING_TRACE_END;
34 }
35
36 static Eina_Bool __setting_accessibility_screen_reader_page_hide(void *data, Elm_Object_Item *it)
37 {
38         SETTING_TRACE_BEGIN;
39         /* error check */
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);
44         SETTING_TRACE_END;
45         return EINA_TRUE;
46 }
47
48 static void setting_accessibility_main_chk_screenreader_vconf_update(int state)
49 {
50         vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, state ? 1 : 0);
51 }
52
53 static void setting_accessibility_main_chk_screenreader_cb(void *data,
54                                                                                                                    Evas_Object *obj, void *event_info)
55 {
56         SETTING_TRACE_BEGIN;
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;
60
61         list_item->chk_status = elm_check_state_get(obj);   /* for genlist update status */
62
63         SETTING_TRACE_DEBUG("check_status: %i", list_item->chk_status);
64         setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status);
65         SETTING_TRACE_END;
66 }
67 static void setting_accessibility_screenreader_settings_mouse_up_Gendial_list_cb(void *data,
68                 Evas_Object *obj, void *event_info)
69 {
70         SETTING_TRACE_BEGIN;
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;
75
76         elm_genlist_item_selected_set(item, 0);
77
78         setting_accessibility_screen_reader_settings_page_create(ad);
79
80         SETTING_TRACE_END;
81 }
82
83 static void setting_accessibility_screenreader_mouse_up_Gendial_list_cb(void *data,
84                                                                                                                                                 Evas_Object *obj, void *event_info)
85 {
86         SETTING_TRACE_BEGIN;
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;
91
92         elm_genlist_item_selected_set(item, 0);
93
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);
98         SETTING_TRACE_END;
99 }
100
101 void setting_accessibility_screen_reader_page_create(SettingAccessibilityUG *data)
102 {
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); */
111
112
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;
130         }
131
132         Setting_GenGroupItem_Data *multiline_screen_reader_comment =
133                 setting_create_Gendial_field_def(genlist, &itc_multiline_text,
134                                                                                  NULL,
135                                                                                  ad, SWALLOW_Type_INVALID, NULL,
136                                                                                  NULL, 0,
137                                                                                  _(DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_DESCRIPTION), NULL, NULL);
138         multiline_screen_reader_comment->userdata = ad;
139         __BACK_POINTER_SET(multiline_screen_reader_comment);
140
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,
145                                                                                  NULL, 0,
146                                                                                  DEVOPTION_STR_ACCESSIBILITY_SCREEN_READER_SETTINGS, NULL, NULL);
147         screen_reader_settings->userdata = ad;
148         __BACK_POINTER_SET(screen_reader_settings);
149
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);
152
153         elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)__setting_accessibility_screen_reader_page_hide, ad);
154 }