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 if (strncmp(operation, APP_CONTROL_OPERATION_SETTING_NFC,
81 strlen(APP_CONTROL_OPERATION_SETTING_NFC)) == 0) {
82 LOGD("reply to launch request : operation %s", operation);
83 app_control_reply_to_launch_request(reply, service, result);
88 app_control_destroy(reply);
96 static void __nfc_activation_completed_cb(nfc_error_e error,
101 if (error != NFC_ERROR_NONE) {
102 LOGE("__nfc_activation_completed_cb failed");
104 /* show failure popup */
110 static void __nfc_activation_changed_cb(bool activated , void *user_data)
112 ugdata_t *ug_data = (ugdata_t *)user_data;
116 LOGD("nfc mode %s ", activated ? "ON" : "OFF");
118 nfc_manager_unset_activation_changed_cb();
120 /* nfc setting ui updated */
121 __set_pending_status(false);
123 __update_title_onoff_obj(ug_data);
125 if (__reply_to_launch_request(ug_data->service, APP_CONTROL_RESULT_SUCCEEDED) == true)
126 ug_destroy_me(ug_data->nfc_setting_ug);
130 static void __evas_back_click_cb(void *data, Evas_Object *obj, void *event_info)
132 ugdata_t *ug_data = (ugdata_t *)data;
137 LOGE("data is null");
141 __reply_to_launch_request(ug_data->service, APP_CONTROL_RESULT_FAILED);
143 ug_destroy_me(ug_data->nfc_setting_ug);
149 static Eina_Bool __back_clicked_cb(void *data, Elm_Object_Item *it)
151 ugdata_t *ug_data = (ugdata_t *)data;
156 LOGE("data is null");
160 __reply_to_launch_request(ug_data->service, APP_CONTROL_RESULT_FAILED);
162 ug_destroy_me(ug_data->nfc_setting_ug);
169 static void __change_nfc_onoff_setting(void *data)
171 ugdata_t *ug_data = (ugdata_t *)data;
179 if (!vconf_get_bool(VCONFKEY_NFC_STATE, &boolval)) {
180 LOGD("vconf_get_bool status [%d]", boolval);
182 if (NFC_ERROR_NONE == nfc_manager_initialize()) {
184 /* Register activation changed callback */
185 nfc_manager_set_activation_changed_cb(
186 __nfc_activation_changed_cb, ug_data);
188 result = nfc_manager_set_activation(!boolval,
189 __nfc_activation_completed_cb, ug_data);
190 if (result != NFC_ERROR_NONE) {
191 LOGE("nfc_manager_set_activation failed");
195 __set_pending_status(true);
197 LOGE("nfc_manager_initialize FAIL!!!!");
202 LOGE("vconf_get_bool failed");
205 __update_title_onoff_obj(ug_data);
210 static void __title_ns_on_off_clicked_cb(void *data, Evas_Object *obj,
213 ugdata_t *ug_data = (ugdata_t *)data;
217 if (ug_data == NULL) {
218 LOGE("data is null");
222 if (__get_pending_status())
225 __change_nfc_onoff_setting(ug_data);
230 static void __nfc_sel(void *data, Evas_Object *obj, void *event_info)
234 __title_ns_on_off_clicked_cb(data, obj, event_info);
236 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
241 static Evas_Object *__gl_content_get(void *data, Evas_Object *obj,
244 ugdata_t *ug_data = (ugdata_t *)data;
250 LOGE("invalid parameter");
254 if (!strncmp(part, "elm.swallow.end", strlen(part))) {
255 Evas_Object *btn = NULL;
257 vconf_get_bool(VCONFKEY_NFC_STATE, &boolval);
259 LOGD("elm.swallow.end");
261 btn = elm_check_add(obj);
262 elm_object_style_set(btn, "on&off");
263 elm_check_state_set(btn, boolval);
264 evas_object_propagate_events_set(btn, EINA_FALSE);
265 evas_object_smart_callback_add(btn, "changed", __title_ns_on_off_clicked_cb, ug_data);
266 evas_object_show(btn);
268 ug_data->ns_on_off = btn;
270 __update_title_onoff_obj(ug_data);
280 static char *__gl_text_get(void *data, Evas_Object *obj, const char *part)
282 return strcmp(part, "elm.text") == 0 ? strdup(IDS_NFC_NFC) : NULL;
285 static char *__gl_text_get_desc(void *data, Evas_Object *obj, const char *part)
287 return strcmp(part, "elm.text.multiline") == 0 ? strdup(IDS_NFC_DESCRIPTION_MSG) : NULL;
290 static Evas_Object *__create_nfc_list(void *data)
292 ugdata_t *ug_data = (ugdata_t *)data;
293 Evas_Object *genlist = NULL;
294 Elm_Object_Item *onoff_item;
299 genlist = elm_genlist_add(ug_data->base_naviframe);
300 if (genlist == NULL) {
301 LOGE("genlist is null");
305 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
307 itc_onoff.item_style = "type1";
308 itc_onoff.func.text_get = __gl_text_get;
309 itc_onoff.func.content_get = __gl_content_get;
311 itc_helptext.item_style = "multiline";
312 itc_helptext.func.text_get = __gl_text_get_desc;
314 /* Append ON / OFF list */
315 onoff_item = elm_genlist_item_append(genlist, &itc_onoff,
316 (void *) ug_data, NULL, ELM_GENLIST_ITEM_NONE,
317 __nfc_sel, (void *) ug_data);
319 elm_object_item_signal_emit(onoff_item, "elm,state,top", "");
321 /* Append help text */
322 static Elm_Object_Item *help_item;
323 help_item = elm_genlist_item_append(genlist, &itc_helptext, (void *)0,
324 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
325 elm_genlist_item_select_mode_set(help_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
326 elm_object_item_access_unregister(help_item);
328 evas_object_show(genlist);
335 static Evas_Object *__create_bg(Evas_Object *parent, char *style)
337 Evas_Object *bg = elm_bg_add(parent);
341 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
344 elm_object_style_set(bg, style);
346 elm_win_resize_object_add(parent, bg);
348 evas_object_show(bg);
355 static Evas_Object *__create_main_layout(Evas_Object *parent)
364 layout = elm_layout_add(parent);
366 elm_layout_theme_set(layout, "layout", "application", "default");
368 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
370 evas_object_show(layout);
377 static void *__ug_nfc_create(ui_gadget_h ug, enum ug_mode mode,
378 app_control_h service, void *priv)
380 ugdata_t *ug_data = (ugdata_t *)priv;
381 Evas_Object *parent = NULL;
382 Evas_Object *l_button = NULL;
383 Evas_Object *nfc_setting_list = NULL;
387 /* set text domain */
388 bindtextdomain(NFCUG_TEXT_DOMAIN, NFCUG_LOCALEDIR);
390 /* create base view */
391 parent = ug_get_parent_layout(ug);
395 ug_data->ug_win_main = parent;
396 evas_object_show(ug_data->ug_win_main);
397 ug_data->nfc_setting_ug = ug;
399 ug_data->base_layout = __create_main_layout(ug_data->ug_win_main);
400 ug_data->bg = __create_bg(ug_data->ug_win_main, "group_list");
401 elm_object_part_content_set(ug_data->base_layout, "elm.swallow.bg", ug_data->bg);
403 ug_data->base_naviframe = elm_naviframe_add(ug_data->base_layout);
404 elm_object_part_content_set(ug_data->base_layout, "elm.swallow.content",
405 ug_data->base_naviframe);
407 evas_object_show(ug_data->base_naviframe);
409 ug_data->service = service;
410 nfc_setting_list = __create_nfc_list(ug_data);
412 if (nfc_setting_list == NULL) {
413 LOGE("create nfc list failed");
418 l_button = elm_button_add(ug_data->base_naviframe);
419 elm_object_style_set(l_button, "naviframe/back_btn/default");
420 evas_object_smart_callback_add(l_button, "clicked", __evas_back_click_cb, ug_data);
422 eext_object_event_callback_add(ug_data->base_naviframe, EEXT_CALLBACK_BACK,
423 eext_naviframe_back_cb, NULL);
425 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe,
426 IDS_NFC_NFC, l_button, NULL, nfc_setting_list, NULL);
428 elm_naviframe_item_pop_cb_set(ug_data->base_navi_it, __back_clicked_cb, ug_data);
432 return ug_data->base_layout;
435 static void __ug_nfc_destroy(ui_gadget_h ug, app_control_h service, void *priv)
437 ugdata_t *ug_data = (ugdata_t *)priv;
441 if ((ug_data == NULL) || (ug == NULL))
444 if (nfc_manager_deinitialize() != NFC_ERROR_NONE)
445 LOGE("NFC deinitialize failed");
447 evas_object_del(ug_get_layout(ug));
452 static void __ug_nfc_start(ui_gadget_h ug, app_control_h service, void *priv)
456 if (nfc_manager_is_supported() == false) {
457 LOGE("NFC not supported");
461 if (nfc_manager_initialize() != NFC_ERROR_NONE)
462 LOGE("NFC initialize failed");
467 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
471 LOGD("UG_MODULE_INIT!!");
476 ug_data = (ugdata_t *)g_malloc0((gint)sizeof(ugdata_t));
480 ops->create = __ug_nfc_create;
481 ops->start = __ug_nfc_start;
482 ops->destroy = __ug_nfc_destroy;
488 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
492 LOGD("UG_MODULE_EXIT!!");