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"
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);
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,
38 * @brief Do process when clicking '<-' button
40 * @param data application context
41 * @param obj evas object
42 * @param event_info event type
45 setting_accessibility_main_click_softkey_back_cb(void *data, Evas_Object *obj,
49 setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
50 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
54 /* Send destroy request */
55 ug_destroy_me(ad->ug);
60 static void screen_reader_key_change_vconf_cb(keynode_t *node, void *user_data)
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);
71 static void setting_accessibility_main_chk_magnifier_cb(void *data,
72 Evas_Object *obj, void *event_info)
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;
79 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
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);
91 app_control_destroy(appControl);
93 vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_ZOOM, 0);
99 static void setting_accessibility_magnifier_mouse_up_Gendial_list_cb(void *data,
100 Evas_Object *obj, void *event_info)
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;
108 elm_genlist_item_selected_set(item, 0);
113 static void setting_accessibility_main_chk_screenreader_vconf_update(int state)
115 vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, state ? 1 : 0);
118 static void setting_accessibility_main_chk_screenreader_cb(void *data,
119 Evas_Object *obj, void *event_info)
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;
126 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
128 SETTING_TRACE_DEBUG("check_status: %i", list_item->chk_status);
129 setting_accessibility_main_chk_screenreader_vconf_update(list_item->chk_status);
133 static void setting_accessibility_screenreader_mouse_up_Gendial_list_cb(void *data,
134 Evas_Object *obj, void *event_info)
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;
142 elm_genlist_item_selected_set(item, 0);
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);
154 * @brief create main view genlist items
156 * @param data application data
158 * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
160 int setting_accessibility_main_generate_genlist(void *data)
164 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
166 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) data;
167 /*bool is_emul_bin = isEmulBin(); */
169 Evas_Object *scroller = ad->genlist;
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);
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;
193 SETTING_TRACE_ERROR("ad->screenreader_checkbox is NULL");
194 return SETTING_RETURN_FAIL;
197 return SETTING_RETURN_SUCCESS;
201 static int setting_accessibility_main_create(void *cb)
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;
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);
223 setting_accessibility_main_generate_genlist((void *)ad);
224 setting_view_accessibility_main.is_create = 1;
226 return SETTING_RETURN_SUCCESS;
229 static int setting_accessibility_main_destroy(void *cb)
233 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
235 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
236 setting_view_accessibility_main.is_create = 0;
238 return SETTING_RETURN_SUCCESS;
241 static int setting_accessibility_main_update(void *cb)
245 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
247 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
249 return SETTING_RETURN_SUCCESS;
252 static int setting_accessibility_main_cleanup(void *cb)
256 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
258 SettingAccessibilityUG *ad = (SettingAccessibilityUG *) cb;
260 return SETTING_RETURN_SUCCESS;