fix for applying wayland (removing X)
[apps/home/settings.git] / setting-accessibility / setting-accessibility-main.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-main.h"
23 #include "app_control.h"
24
25 static int setting_accessibility_main_create(void *cb);
26 static int setting_accessibility_main_destroy(void *cb);
27 static int setting_accessibility_main_update(void *cb);
28 static int setting_accessibility_main_cleanup(void *cb);
29
30 setting_view setting_view_accessibility_main = {
31         .create = setting_accessibility_main_create,
32         .destroy = setting_accessibility_main_destroy,
33         .update = setting_accessibility_main_update,
34         .cleanup = setting_accessibility_main_cleanup,
35 };
36
37 /**
38 * @brief Do process when clicking '<-' button
39 *
40 * @param data application context
41 * @param obj evas object
42 * @param event_info event type
43 */
44 static Eina_Bool
45 setting_accessibility_main_click_softkey_back_cb(void *data, Evas_Object *obj,
46                                                  void *event_info)
47 {
48         SETTING_TRACE_BEGIN;
49         setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
50         SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
51         if (ad->empty_flag) {
52                 return EINA_FALSE;
53         }
54         /* Send destroy request */
55         ug_destroy_me(ad->ug);
56         SETTING_TRACE_END;
57         return EINA_FALSE;
58 }
59
60 static void screen_reader_key_change_vconf_cb(keynode_t *node, void *user_data)
61 {
62         SETTING_TRACE_BEGIN;
63         Setting_GenGroupItem_Data *screenReaderItem = user_data;
64         SETTING_TRACE_DEBUG("check_status: %i, node->value.i: %i", screenReaderItem->chk_status, node->value.i);
65         /* I don't know why following code does not update check box to checked/unchecked */
66         setting_update_gl_item_chk_status(screenReaderItem, node->value.b ? 1 : 0);
67         elm_genlist_item_update(screenReaderItem->item);
68         SETTING_TRACE_END;
69 }
70
71 static void setting_accessibility_main_chk_magnifier_cb(void *data,
72                                                         Evas_Object *obj, void *event_info)
73 {
74         SETTING_TRACE_BEGIN;
75         retm_if(data == NULL, "Data parameter is NULL");
76         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
77         SettingAccessibilityUG *ad = list_item->userdata;
78
79         list_item->chk_status = elm_check_state_get(obj);   /* for genlist update status */
80
81         SETTING_TRACE_DEBUG("check_status: %i", list_item->chk_status);
82         const char magnifierAppId[]  = "com.samsung.xmagnifier";
83         if (list_item->chk_status) {
84                 app_control_h appControl;
85                 app_control_create(&appControl);
86                 app_control_set_app_id(appControl, magnifierAppId);
87                 SETTING_TRACE_DEBUG("Trying to launch %s app.", magnifierAppId);
88                 if (app_control_send_launch_request(appControl, NULL, NULL) != APP_CONTROL_ERROR_NONE) {
89                         SETTING_TRACE_WARNING("Failed to launch %s app.", magnifierAppId);
90                 }
91                 app_control_destroy(appControl);
92         } else {
93                 vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_ZOOM, 0);
94         }
95
96         SETTING_TRACE_END;
97 }
98
99 static void setting_accessibility_magnifier_mouse_up_Gendial_list_cb(void *data,
100                                                                      Evas_Object *obj, void *event_info)
101 {
102         SETTING_TRACE_BEGIN;
103         retm_if(data == NULL, "Invalid argument: data is NULL");
104         retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
105         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
106         SettingAccessibilityUG *ad = (SettingAccessibilityUG *)data;
107
108         elm_genlist_item_selected_set(item, 0);
109
110         SETTING_TRACE_END;
111 }
112
113 static void setting_accessibility_main_chk_screenreader_vconf_update(int state)
114 {
115         vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, state ? 1 : 0);
116 }
117
118 static void setting_accessibility_main_chk_screenreader_cb(void *data,
119                                                            Evas_Object *obj, void *event_info)
120 {
121         SETTING_TRACE_BEGIN;
122         retm_if(data == NULL, "Data parameter is NULL");
123         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
124         SettingAccessibilityUG *ad = list_item->userdata;
125
126         list_item->chk_status = elm_check_state_get(obj);   /* for genlist update status */
127
128         SETTING_TRACE_DEBUG("check_status: %i", list_item->chk_status);
129         setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status);
130         SETTING_TRACE_END;
131 }
132
133 static void setting_accessibility_screenreader_mouse_up_Gendial_list_cb(void *data,
134                                                                         Evas_Object *obj, void *event_info)
135 {
136         SETTING_TRACE_BEGIN;
137         retm_if(data == NULL, "Invalid argument: data is NULL");
138         retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
139         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
140         SettingAccessibilityUG *ad = (SettingAccessibilityUG *)data;
141
142         elm_genlist_item_selected_set(item, 0);
143
144         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
145         setting_retm_if(data == NULL, "Data parameter is NULL");
146         setting_update_gl_item_chk_status(list_item, list_item->chk_status ? 0 : 1);
147         setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status ? 1 : 0);
148         SETTING_TRACE_END;
149 }
150
151
152
153 /**
154  * @brief create main view genlist items
155  *
156  * @param data application data
157  *
158  * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
159  */
160 int setting_accessibility_main_generate_genlist(void *data)
161 {
162         SETTING_TRACE_BEGIN;
163         /* error check */
164         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
165
166         SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
167         /*bool is_emul_bin = isEmulBin(); */
168
169         Evas_Object *scroller = ad->genlist;
170
171         ad->screenreader_checkbox =
172             setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
173                                              setting_accessibility_screenreader_mouse_up_Gendial_list_cb,
174                                              ad, SWALLOW_Type_1ICON_1RADIO, NULL,
175                                              NULL, 1, DEVOPTION_STR_ACCESSIBILITY_SCREENREADER,
176                                              NULL, setting_accessibility_main_chk_screenreader_cb);
177
178         if (ad->screenreader_checkbox) {
179                 ad->screenreader_checkbox->userdata = ad;
180                 __BACK_POINTER_SET(ad->screenreader_checkbox);
181                 int screen_reader = 0;
182                 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &screen_reader);
183                 ad->screenreader_checkbox->chk_status = screen_reader ? 1 : 0;
184                 /*---------------------------------------------------------------------------------------------- */
185                 int vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
186                                                          screen_reader_key_change_vconf_cb, &ad->screenreader_checkbox);
187                 if (vconf_ret != 0) {
188                         SETTING_TRACE("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS)");
189                         return SETTING_RETURN_FAIL;
190                 }
191
192         } else {
193                 SETTING_TRACE_ERROR("ad->screenreader_checkbox is NULL");
194                 return SETTING_RETURN_FAIL;
195         }
196         SETTING_TRACE_END;
197         return SETTING_RETURN_SUCCESS;
198 }
199
200
201 static int setting_accessibility_main_create(void *cb)
202 {
203         SETTING_TRACE_BEGIN;
204         /* error check */
205         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
206         SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
207         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
208         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
209                  "Cannot set scroller object  as contento of layout");
210         //elm_genlist_realization_mode_set(scroller, EINA_TRUE);
211         elm_object_style_set(scroller, "dialogue");
212         elm_genlist_clear(scroller);    /* first to clear list */
213         ad->genlist = scroller;
214         ad->ly_main =
215             setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
216                                            KeyStr_Accessibility,
217                                            _("IDS_ST_BUTTON_BACK"), NULL, NULL,
218                                            (setting_call_back_func)setting_accessibility_main_click_softkey_back_cb,
219                                            NULL, NULL, ad, scroller,
220                                            &ad->navi_bar, NULL);
221         ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
222
223         setting_accessibility_main_generate_genlist((void *)ad);
224         setting_view_accessibility_main.is_create = 1;
225         SETTING_TRACE_END;
226         return SETTING_RETURN_SUCCESS;
227 }
228
229 static int setting_accessibility_main_destroy(void *cb)
230 {
231         SETTING_TRACE_BEGIN;
232         /* error check */
233         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
234
235         SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
236         setting_view_accessibility_main.is_create = 0;
237         SETTING_TRACE_END;
238         return SETTING_RETURN_SUCCESS;
239 }
240
241 static int setting_accessibility_main_update(void *cb)
242 {
243         SETTING_TRACE_BEGIN;
244         /* error check */
245         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
246
247         SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
248         SETTING_TRACE_END;
249         return SETTING_RETURN_SUCCESS;
250 }
251
252 static int setting_accessibility_main_cleanup(void *cb)
253 {
254         SETTING_TRACE_BEGIN;
255         /* error check */
256         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
257
258         SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
259         SETTING_TRACE_END;
260         return SETTING_RETURN_SUCCESS;
261 }
262
263