2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.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://floralicense.org/license/
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.
17 #include <efl_extension.h>
18 #include <notification.h>
20 #include "ug-nfc-setting-main.h"
23 #define UG_MODULE_API __attribute__ ((visibility("default")))
26 static Elm_Genlist_Item_Class itc_helptext;
27 static Elm_Genlist_Item_Class itc_onoff;
29 static bool pending_status = false;
31 static bool __get_pending_status(void)
33 return pending_status;
36 static void __set_pending_status(bool status)
38 pending_status = status;
41 static void __update_title_onoff_obj(void *data)
43 ugdata_t *ug_data = (ugdata_t *)data;
51 if (__get_pending_status()) {
52 elm_object_disabled_set(ug_data->ns_on_off, EINA_TRUE);
56 elm_object_disabled_set(ug_data->ns_on_off, EINA_FALSE);
58 if (!vconf_get_bool(VCONFKEY_NFC_STATE, &boolval) && boolval)
59 elm_check_state_set(ug_data->ns_on_off, EINA_TRUE);
61 elm_check_state_set(ug_data->ns_on_off, EINA_FALSE);
66 static bool __reply_to_launch_request(app_control_h service, app_control_result_e result)
69 char *operation = NULL;
74 if (service != NULL) {
75 app_control_create(&reply);
76 app_control_get_operation(service, &operation);
78 if (operation != NULL) {
79 LOGD("reply to launch request : operation %s", operation);
80 app_control_reply_to_launch_request(reply, service, result);
84 app_control_destroy(reply);
92 static void __nfc_activation_completed_cb(nfc_error_e error,
97 if (error != NFC_ERROR_NONE) {
98 LOGE("__nfc_activation_completed_cb failed");
100 /* show failure popup */
106 static void __nfc_activation_changed_cb(bool activated , void *user_data)
108 ugdata_t *ug_data = (ugdata_t *)user_data;
112 LOGD("nfc mode %s ", activated ? "ON" : "OFF");
114 nfc_manager_unset_activation_changed_cb();
116 /* nfc setting ui updated */
117 __set_pending_status(false);
119 __update_title_onoff_obj(ug_data);
121 if (__reply_to_launch_request(ug_data->service, APP_CONTROL_RESULT_SUCCEEDED) == true)
122 ug_destroy_me(ug_data->nfc_setting_ug);
127 static Eina_Bool __back_clicked_cb(void *data, Elm_Object_Item *it)
129 ugdata_t *ug_data = (ugdata_t *)data;
134 LOGE("data is null");
138 __reply_to_launch_request(ug_data->service, APP_CONTROL_RESULT_FAILED);
140 ug_destroy_me(ug_data->nfc_setting_ug);
147 static void __change_nfc_onoff_setting(void *data)
149 ugdata_t *ug_data = (ugdata_t *)data;
157 if (!vconf_get_bool(VCONFKEY_NFC_STATE, &boolval)) {
158 LOGD("vconf_get_bool status [%d]", boolval);
160 if (NFC_ERROR_NONE == nfc_manager_initialize()) {
162 /* Register activation changed callback */
163 nfc_manager_set_activation_changed_cb(
164 __nfc_activation_changed_cb, ug_data);
166 result = nfc_manager_set_activation(!boolval,
167 __nfc_activation_completed_cb, ug_data);
168 if (result != NFC_ERROR_NONE) {
169 LOGE("nfc_manager_set_activation failed");
173 __set_pending_status(true);
175 LOGE("nfc_manager_initialize FAIL!!!!");
180 LOGE("vconf_get_bool failed");
183 __update_title_onoff_obj(ug_data);
188 static void __title_ns_on_off_clicked_cb(void *data, Evas_Object *obj,
191 ugdata_t *ug_data = (ugdata_t *)data;
195 if (ug_data == NULL) {
196 LOGE("data is null");
200 if (__get_pending_status())
203 __change_nfc_onoff_setting(ug_data);
208 static void __nfc_sel(void *data, Evas_Object *obj, void *event_info)
212 __title_ns_on_off_clicked_cb(data, obj, event_info);
214 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
219 static Evas_Object *__gl_content_get(void *data, Evas_Object *obj,
222 ugdata_t *ug_data = (ugdata_t *)data;
228 LOGE("invalid parameter");
232 if (!strncmp(part, "elm.swallow.end", strlen(part))) {
233 Evas_Object *btn = NULL;
235 vconf_get_bool(VCONFKEY_NFC_STATE, &boolval);
237 LOGD("elm.swallow.end");
239 btn = elm_check_add(obj);
240 elm_object_style_set(btn, "on&off");
241 elm_check_state_set(btn, boolval);
242 evas_object_propagate_events_set(btn, EINA_FALSE);
243 evas_object_smart_callback_add(btn, "changed", __title_ns_on_off_clicked_cb, ug_data);
244 evas_object_show(btn);
246 ug_data->ns_on_off = btn;
248 __update_title_onoff_obj(ug_data);
258 static char *__gl_text_get(void *data, Evas_Object *obj, const char *part)
260 return strcmp(part, "elm.text") == 0 ? strdup(IDS_NFC_NFC) : NULL;
263 static char *__gl_text_get_desc(void *data, Evas_Object *obj, const char *part)
265 return strcmp(part, "elm.text.multiline") == 0 ? strdup(IDS_NFC_DESCRIPTION_MSG) : NULL;
268 static Evas_Object *__create_nfc_list(void *data)
270 ugdata_t *ug_data = (ugdata_t *)data;
271 Evas_Object *genlist = NULL;
272 Elm_Object_Item *onoff_item;
277 genlist = elm_genlist_add(ug_data->base_naviframe);
278 if (genlist == NULL) {
279 LOGE("genlist is null");
283 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
285 itc_onoff.item_style = "type1";
286 itc_onoff.func.text_get = __gl_text_get;
287 itc_onoff.func.content_get = __gl_content_get;
289 itc_helptext.item_style = "multiline";
290 itc_helptext.func.text_get = __gl_text_get_desc;
292 /* Append ON / OFF list */
293 onoff_item = elm_genlist_item_append(genlist, &itc_onoff,
294 (void *) ug_data, NULL, ELM_GENLIST_ITEM_NONE,
295 __nfc_sel, (void *) ug_data);
297 elm_object_item_signal_emit(onoff_item, "elm,state,top", "");
299 /* Append help text */
300 static Elm_Object_Item *help_item;
301 help_item = elm_genlist_item_append(genlist, &itc_helptext, (void *)0,
302 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
303 elm_genlist_item_select_mode_set(help_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
304 elm_object_item_access_unregister(help_item);
306 evas_object_show(genlist);
313 static Evas_Object *__create_bg(Evas_Object *parent, char *style)
315 Evas_Object *bg = elm_bg_add(parent);
319 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
322 elm_object_style_set(bg, style);
324 elm_win_resize_object_add(parent, bg);
326 evas_object_show(bg);
333 static Evas_Object *__create_main_layout(Evas_Object *parent)
342 layout = elm_layout_add(parent);
344 elm_layout_theme_set(layout, "layout", "application", "default");
346 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
348 evas_object_show(layout);
355 static void *__ug_nfc_create(ui_gadget_h ug, enum ug_mode mode,
356 app_control_h service, void *priv)
358 ugdata_t *ug_data = (ugdata_t *)priv;
359 Evas_Object *parent = NULL;
360 Evas_Object *l_button = NULL;
361 Evas_Object *nfc_setting_list = NULL;
365 /* set text domain */
366 bindtextdomain(NFCUG_TEXT_DOMAIN, NFCUG_LOCALEDIR);
368 /* create base view */
369 parent = ug_get_parent_layout(ug);
373 ug_data->ug_win_main = parent;
374 evas_object_show(ug_data->ug_win_main);
375 ug_data->nfc_setting_ug = ug;
377 ug_data->base_layout = __create_main_layout(ug_data->ug_win_main);
378 ug_data->bg = __create_bg(ug_data->ug_win_main, "group_list");
379 elm_object_part_content_set(ug_data->base_layout, "elm.swallow.bg", ug_data->bg);
381 ug_data->base_naviframe = elm_naviframe_add(ug_data->base_layout);
382 elm_object_part_content_set(ug_data->base_layout, "elm.swallow.content",
383 ug_data->base_naviframe);
385 evas_object_show(ug_data->base_naviframe);
387 ug_data->service = service;
388 nfc_setting_list = __create_nfc_list(ug_data);
390 if (nfc_setting_list == NULL) {
391 LOGE("create nfc list failed");
396 l_button = elm_button_add(ug_data->base_naviframe);
397 elm_object_style_set(l_button, "naviframe/back_btn/default");
398 evas_object_smart_callback_add(l_button, "clicked", __back_clicked_cb, ug_data);
400 eext_object_event_callback_add(ug_data->base_naviframe, EEXT_CALLBACK_BACK,
401 eext_naviframe_back_cb, NULL);
403 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe,
404 IDS_NFC_NFC, l_button, NULL, nfc_setting_list, NULL);
406 elm_naviframe_item_pop_cb_set(ug_data->base_navi_it, __back_clicked_cb, ug_data);
410 return ug_data->base_layout;
413 static void __ug_nfc_destroy(ui_gadget_h ug, app_control_h service, void *priv)
415 ugdata_t *ug_data = (ugdata_t *)priv;
419 if ((ug_data == NULL) || (ug == NULL))
422 if (nfc_manager_deinitialize() != NFC_ERROR_NONE)
423 LOGE("NFC deinitialize failed");
425 evas_object_del(ug_get_layout(ug));
430 static void __ug_nfc_start(ui_gadget_h ug, app_control_h service, void *priv)
434 if (nfc_manager_is_supported() == false) {
435 LOGE("NFC not supported");
439 if (nfc_manager_initialize() != NFC_ERROR_NONE)
440 LOGE("NFC initialize failed");
445 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
449 LOGD("UG_MODULE_INIT!!");
454 ug_data = (ugdata_t *)g_malloc0((gint)sizeof(ugdata_t));
458 ops->create = __ug_nfc_create;
459 ops->start = __ug_nfc_start;
460 ops->destroy = __ug_nfc_destroy;
466 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
470 LOGD("UG_MODULE_EXIT!!");