2 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 * Created on: Oct 9, 2013
24 //#include <capability_manager.h>
25 #include "setting-motion.h"
28 static struct _motion_menu_item motion_menu_its[] = {
29 { "IDS_WMGR_MBODY_SMART_RELAY", 0, _motion_gl_smart_relay_cb },
30 { "IDS_WMGR_MBODY_WAKE_UP_GESTURE", 0, _motion_gl_wake_up_cb },
34 static char * wake_up_gesture_str[] = {
35 "IDS_ST_BODY_OFF_M_STATUS",
36 "IDS_ST_BUTTON_CLOCK",
37 "IDS_WMGR_OPT_LAST_VIEWED_SCREEN"
40 static struct _motion_data motion_data;
41 static int is_called_myself;
44 static void init_motion_value()
46 motion_data.is_enable_smart_relay = 0;
47 motion_data.is_enable_wake_up_gesture = 0;
48 motion_data.wake_up_gesture_type = SETTING_WAKE_UP_GESTURE_LAST_VIEWED_SCREEN;
50 motion_data.temp_ad = NULL;
51 motion_data.g_motion_genlist = NULL;
55 void _initialize_motion()
59 /* motion vconf changed callback */
60 register_vconf_changing(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, motion_vconf_changed_cb, NULL);
61 register_vconf_changing(VCONFKEY_WMS_SMART_RELAY, motion_vconf_changed_cb, NULL);
64 void motion_vconf_changed_cb(keynode_t * key, void * data)
66 DBG("Setting - motion_vconf_changed_cb() is called!");
68 char * vconf_name = vconf_keynode_get_name(key);
69 if(!vconf_name || is_called_myself) {
74 if( !strcmp(vconf_name, VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING) )
76 vconf_get_int(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, &motion_data.wake_up_gesture_type);
78 DBG("Setting - wake_up_gesture_type : %d", motion_data.wake_up_gesture_type);
80 else if( !strcmp(vconf_name, VCONFKEY_WMS_SMART_RELAY) )
82 vconf_get_bool(VCONFKEY_WMS_SMART_RELAY, &motion_data.is_enable_smart_relay);
84 DBG("Setting - is_enable_smart_relay : %d", motion_data.is_enable_smart_relay);
87 if(motion_data.g_motion_genlist) {
88 //elm_genlist_realized_items_update(motion_data.g_motion_genlist);
89 elm_radio_value_set(motion_data.temp_ad->wake_up_guesture_rdg, motion_data.wake_up_gesture_type);
93 Eina_Bool _clear_motion_cb(void *data, Elm_Object_Item *it)
97 /* unregister motion vconf changed callback */
98 unregister_vconf_changing(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, motion_vconf_changed_cb);
99 unregister_vconf_changing(VCONFKEY_WMS_SMART_RELAY, motion_vconf_changed_cb);
104 void _motion_gl_smart_relay_cb(void *data, Evas_Object *obj, void *event_info)
106 Elm_Object_Item* it = (Elm_Object_Item *)event_info;
111 DBG("%s", "_motion_gl_smart_relay_cb - ad or check is null");
115 is_called_myself = 1;
117 motion_data.is_enable_smart_relay = (motion_data.is_enable_smart_relay) ? 0 : 1;
119 vconf_set_bool(VCONFKEY_WMS_SMART_RELAY, motion_data.is_enable_smart_relay);
121 elm_genlist_item_selected_set(it, EINA_FALSE);
122 elm_genlist_item_update(it);
125 void _motion_gl_wake_up_guesture_radio_cb(void *data, Evas_Object *obj, void *event_info)
127 Elm_Object_Item* it = (Elm_Object_Item *)event_info;
128 elm_genlist_item_selected_set(it, EINA_FALSE);
130 int wake_up_mode = (int)data;
132 is_called_myself = 1;
134 vconf_set_int(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, wake_up_mode);
136 elm_genlist_item_update(it);
138 elm_naviframe_item_pop(motion_data.temp_ad->nf);
139 if( motion_data.temp_ad && motion_data.temp_ad->wake_up_guesture_rdg ) {
140 evas_object_del(motion_data.temp_ad->wake_up_guesture_rdg);
141 motion_data.temp_ad->wake_up_guesture_rdg = NULL;
144 if( motion_data.g_motion_genlist ) {
145 elm_genlist_realized_items_update(motion_data.g_motion_genlist);
149 char * _get_wake_up_gesture_sub_title()
151 int gusture_mode = 0;
152 vconf_get_int(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, &gusture_mode);
154 DBG("VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING : %d", gusture_mode);
156 return _(wake_up_gesture_str[gusture_mode % 3]);
159 char * _gl_wake_up_guesture_mode_title_get(void *data, Evas_Object *obj, const char *part)
162 Motion_Item_Data *id = data;
163 int index = id->index;
165 if( !strcmp(part, "elm.text") || !strcmp(part, "elm.text.1") )
167 snprintf(buf, sizeof(buf)-1, "%s", _(wake_up_gesture_str[index % 3]));
172 Evas_Object * _gl_wake_up_guesture_ridio_get(void *data, Evas_Object *obj, const char *part)
174 Evas_Object *radio = NULL;
175 Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
176 Item_Data *id = data;
177 int index = id->index;
178 int wake_up_mode = 0;
180 if( !strcmp(part, "elm.icon") )
183 radio = elm_radio_add(obj);
184 elm_object_style_set(radio, "list");
185 elm_radio_state_value_set(radio, id->index);
186 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
187 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
188 elm_radio_group_add(radio, radio_main);
189 evas_object_propagate_events_set(radio, EINA_FALSE);
190 evas_object_repeat_events_set(radio, EINA_TRUE);
191 evas_object_smart_callback_add(radio, "changed", NULL, (void *)id->index);
193 vconf_get_int(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, &wake_up_mode);
194 if( wake_up_mode == id->index ) {
195 elm_radio_value_set(radio_main, wake_up_mode);
201 static void _wake_up_guesture_gl_del(void *data, Evas_Object *obj)
203 // FIXME: Unrealized callback can be called after this.
204 // Accessing Item_Data can be dangerous on unrealized callback.
205 struct _motion_wake_up_guesture_item *id = data;
210 void _show_wake_up_guesture_list(void* data)
215 DBG("%s", "_show_wake_up_guesture_list - appdata is null");
219 Evas_Object *genlist = NULL;
220 Elm_Object_Item *nf_it = NULL;
222 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
223 itc->item_style = "1text.1icon.1";
224 itc->func.text_get = _gl_wake_up_guesture_mode_title_get;
225 itc->func.content_get = _gl_wake_up_guesture_ridio_get;
226 itc->func.del = _wake_up_guesture_gl_del;
228 Evas_Object * layout = elm_layout_add(ad->nf);
229 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
230 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
232 genlist = elm_genlist_add(layout);
233 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
234 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
237 for( idx = 0; idx < MOTION_WAKE_UP_ITEM_COUNT; idx++ ) {
238 Item_Data *id = calloc(sizeof(Item_Data), 1);
240 id->item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE,
241 _motion_gl_wake_up_guesture_radio_cb,
244 motion_data.g_motion_genlist = genlist;
245 ad->wake_up_guesture_rdg = elm_radio_add(genlist);
246 elm_radio_state_value_set(ad->wake_up_guesture_rdg, MOTION_WAKE_UP_ITEM_COUNT);
247 elm_radio_value_set(ad->wake_up_guesture_rdg, 0);
249 evas_object_data_set(genlist, "radio_main", ad->wake_up_guesture_rdg);
251 elm_genlist_item_class_free(itc);
253 motion_data.temp_ad = ad;
255 elm_object_part_content_set(layout, "elm.genlist", genlist);
257 nf_it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
258 elm_naviframe_item_pop_cb_set(nf_it, _clear_motion_cb, ad);
259 elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
262 void _motion_gl_wake_up_cb(void *data, Evas_Object *obj, void *event_info)
264 Elm_Object_Item* it = (Elm_Object_Item *)event_info;
265 elm_genlist_item_selected_set(it, EINA_FALSE);
267 _initialize_motion();
273 DBG("%s", "_motion_gl_smart_relay_cb - ad or check is null");
277 _show_wake_up_guesture_list(ad);
280 void _motion_chk_changed_cb(void *data, Evas_Object *obj, void *event_info)
282 Evas_Object *check = obj;
287 // check state callback
288 DBG("%s : %d", "_motion_chk_changed_cb - current state", elm_check_state_get(check));
291 char * _gl_motion_title_get(void *data, Evas_Object *obj, const char *part)
293 char buf[1024] = {0,};
294 Motion_Item_Data *id = data;
295 int index = id->index;
297 if( !strcmp(part, "elm.text.1") )
299 bool is_operator_dcm = 0;
300 char *salescode = vconf_get_str(VCONFKEY_CSC_SALESCODE);
301 if(salescode && (!strcmp(salescode, "DCM") || !strcmp(salescode, "KDI") || !strcmp(salescode, "XJP")))
305 if(is_operator_dcm && !strcmp(motion_menu_its[index % 3].name, "IDS_WMGR_MBODY_SMART_RELAY"))
307 strncpy(buf, _("IDS_WMGR_MBODY_SMART_TOSS_JPN"), sizeof(buf)-1);
311 snprintf(buf, sizeof(buf)-1, "%s", _(motion_menu_its[index % 3].name));
314 else if( !strcmp(part, "elm.text.2") )
318 vconf_get_bool(VCONFKEY_WMS_SMART_RELAY, &motion_data.is_enable_smart_relay);
319 snprintf(buf, sizeof(buf)-1, "%s", (motion_data.is_enable_smart_relay) ? _("IDS_ST_BODY_ON_M_STATUS") : _("IDS_ST_BODY_OFF_M_STATUS"));
323 snprintf(buf, sizeof(buf)-1, "%s", _get_wake_up_gesture_sub_title());
330 Evas_Object * _gl_motion_check_get(void *data, Evas_Object *obj, const char *part)
332 Evas_Object *check = NULL;
333 Motion_Item_Data *id = data;
334 int index = id->index;
336 if( !strcmp(part, "elm.icon") )
338 check = elm_check_add(obj);
339 vconf_get_bool(VCONFKEY_WMS_SMART_RELAY, &motion_data.is_enable_smart_relay);
340 elm_check_state_set(check, (motion_data.is_enable_smart_relay) ? EINA_TRUE : EINA_FALSE);
341 evas_object_smart_callback_add(check, "changed", _motion_chk_changed_cb, (void *)1);
342 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
343 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
351 static void _motion_gl_del(void *data, Evas_Object *obj)
353 // FIXME: Unrealized callback can be called after this.
354 // Accessing Item_Data can be dangerous on unrealized callback.
355 Motion_Item_Data *id = data;
360 Evas_Object* _create_motion_list(void* data)
365 DBG("%s", "_create_motion_list - appdata is null");
368 Evas_Object *genlist = NULL;
369 Elm_Genlist_Item_Class *temp_itc = NULL;
370 struct _motion_menu_item *menu_its = NULL;
373 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
374 itc->item_style = "2text.1icon.1";
375 itc->func.text_get = _gl_motion_title_get;
376 itc->func.content_get = _gl_motion_check_get;
377 itc->func.del = _motion_gl_del;
379 Elm_Genlist_Item_Class *itc_wake_up = elm_genlist_item_class_new();
380 itc_wake_up->item_style = "2text";
381 itc_wake_up->func.text_get = _gl_motion_title_get;
382 itc_wake_up->func.del = _motion_gl_del;
384 Evas_Object * layout = elm_layout_add(ad->nf);
385 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
386 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
388 genlist = elm_genlist_add(layout);
389 elm_genlist_block_count_set(genlist, 14);
390 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
392 menu_its = motion_menu_its;
394 // device_info_h* device_info = NULL;
397 // capability_manager_create_device_info(&device_info);
398 // capability_manager_get_device_features(device_info, &b);
399 // val = bundle_get_val(b, "smartrelay");
400 // capability_manager_destroy_device_info(device_info);
403 for (idx = 0; idx < MOTION_ITEM_COUNT; idx++)
406 if (val && strcmp(val, "true")) {
412 temp_itc = itc_wake_up;
415 Motion_Item_Data *id = calloc(sizeof(Motion_Item_Data), 1);
417 id->item = elm_genlist_item_append(
418 genlist, // genlist object
419 temp_itc, // item class
422 ELM_GENLIST_ITEM_NONE,
423 menu_its[ idx ].func, // call back
426 elm_genlist_item_class_free(itc);
427 elm_genlist_item_class_free(itc_wake_up);
429 motion_data.g_motion_genlist = genlist;
431 elm_object_part_content_set(layout, "elm.genlist", genlist);