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