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-main.h"
23 #include "app_control.h"
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);
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,
39 * @brief Do process when clicking '<-' button
41 * @param data application context
42 * @param obj evas object
43 * @param event_info event type
46 setting_accessibility_main_click_softkey_back_cb(void *data, Evas_Object *obj,
50 setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
51 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
55 /* Send destroy request */
56 ug_destroy_me(ad->ug);
61 static void screen_reader_key_change_vconf_cb(keynode_t *node, void *user_data)
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);
72 static void setting_accessibility_main_chk_magnifier_cb(void *data,
73 Evas_Object *obj, void *event_info)
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;
80 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
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);
92 app_control_destroy(appControl);
94 vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_ZOOM, 0);
100 static void setting_accessibility_magnifier_mouse_up_Gendial_list_cb(void *data,
101 Evas_Object *obj, void *event_info)
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;
109 elm_genlist_item_selected_set(item, 0);
114 static void setting_accessibility_main_chk_screenreader_vconf_update(int state)
116 vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, state ? 1 : 0);
119 static void setting_accessibility_main_chk_screenreader_cb(void *data,
120 Evas_Object *obj, void *event_info)
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;
127 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
129 SETTING_TRACE_DEBUG("check_status: %i", list_item->chk_status);
130 setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status);
134 static void setting_accessibility_screenreader_mouse_up_Gendial_list_cb(void *data,
135 Evas_Object *obj, void *event_info)
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;
143 elm_genlist_item_selected_set(item, 0);
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);
155 * @brief create main view genlist items
157 * @param data application data
159 * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
161 int setting_accessibility_main_generate_genlist(void *data)
165 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
167 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
168 /*bool is_emul_bin = isEmulBin(); */
170 Evas_Object *scroller = ad->genlist;
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);
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;
194 SETTING_TRACE_ERROR("ad->screenreader_checkbox is NULL");
195 return SETTING_RETURN_FAIL;
198 return SETTING_RETURN_SUCCESS;
202 static int setting_accessibility_main_create(void *cb)
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;
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);
224 setting_accessibility_main_generate_genlist((void *)ad);
225 setting_view_accessibility_main.is_create = 1;
227 return SETTING_RETURN_SUCCESS;
230 static int setting_accessibility_main_destroy(void *cb)
234 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
236 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
237 setting_view_accessibility_main.is_create = 0;
239 return SETTING_RETURN_SUCCESS;
242 static int setting_accessibility_main_update(void *cb)
246 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
248 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
250 return SETTING_RETURN_SUCCESS;
253 static int setting_accessibility_main_cleanup(void *cb)
257 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
259 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
261 return SETTING_RETURN_SUCCESS;