2 * Copyright 2012 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://www.tizenopensource.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.
18 #include "ug-nfc-setting-main.h"
19 #include "ug-nfc-setting-popup.h"
20 #include "ug-nfc-setting-db.h"
23 #define UG_MODULE_API __attribute__ ((visibility("default")))
26 static Elm_Genlist_Item_Class itc_sep;
27 static Elm_Genlist_Item_Class itc_sep_help;
28 static Elm_Genlist_Item_Class itc_check;
29 static Elm_Genlist_Item_Class itc_helptext;
30 static Elm_Genlist_Item_Class itc_2text;
32 static Elm_Object_Item *nfc_item = NULL;
33 static Elm_Object_Item *predefined_item = NULL;
35 static bool pending_status = false;
38 static void _show_app_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
40 ugdata_t *ug_data = (ugdata_t *)data;
41 int result = (int)event_info;
50 case UG_NFC_POPUP_RESP_CLOSE :
52 LOGD("ug_destroy_me >>>>", __FUNCTION__, __LINE__);
53 ug_destroy_me(ug_data->nfc_setting_ug);
63 static void _show_app_error_popup(void *data)
65 ugdata_t *ug_data = (ugdata_t *)data;
66 char popup_str[POPUP_TEXT_SIZE] = { 0, };
73 memcpy(popup_str, IDS_NFC_SERVICE_IS_NOT_SUPPORTED, strlen(IDS_NFC_SERVICE_IS_NOT_SUPPORTED));
75 ug_nfc_setting_create_popup(ug_data, ug_data->base_layout, popup_str, IDS_CLOSE, UG_NFC_POPUP_RESP_CLOSE, NULL, 0, NULL, 0, false, false, _show_app_error_popup_response_cb);
80 static bool _get_pending_status(void)
82 return pending_status;
85 static void _set_pending_status(bool status)
87 pending_status = status;
90 static void _back_clicked_cb(void *data, Evas_Object *obj, void *event_info)
94 _ug_nfc_setting_db_close();
101 /* Principle of NFC, S Beam On/Off */
103 /* NFC & S Beam Off -> NFC On : NFC: On, S Beam: Off */
104 /* NFC & S Beam Off -> S Beam On : NFC: On, S Beam: On */
105 /* NFC & S Beam On -> S Beam Off : NFC: On, S Beam: Off */
106 /* NFC & S Beam On -> NFC Off : NFC: Off, S Beam: Off */
108 static void _change_nfc_onoff_setting(void *data)
115 ugdata_t *ug_data = (ugdata_t *)data;
119 if ((result = vconf_get_bool(VCONFKEY_NFC_STATE, &status)) == 0)
121 LOGD("vconf_get_bool status [%d]\n", status);
123 result = nfc_manager_set_activation(!status, NULL, NULL);
124 if (result != NFC_ERROR_NONE)
126 LOGD("nfc_manager_set_activation failed");
130 _set_pending_status(true);
134 LOGD("vconf_get_bool failed\n");
140 void _change_nfc_predefined_item_setting(void *data)
147 ugdata_t *ug_data = (ugdata_t *)data;
151 if ((result = vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &status)) == 0)
153 LOGD("vconf_get_bool status [%d]\n", status);
157 /* predefined item off */
158 result = vconf_set_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, FALSE);
161 LOGD("vconf_set_bool success\n");
165 LOGD("vconf_set_bool failed\n");
170 /* predefined item on */
171 result = vconf_set_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, TRUE);
174 LOGD("vconf_set_bool success\n");
178 LOGD("vconf_set_bool failed\n");
184 LOGD("vconf_get_bool failed\n");
190 void _nfc_activation_changed_cb(bool activated , void *user_data)
194 ugdata_t *ug_data = (ugdata_t *)user_data;
195 int predefined_item_state = 0;
196 static bool predefined_item_off_by_nfcOnOff = false;
199 LOGD("nfc mode %s \n", activated ? "ON" : "OFF");
202 if ((result = vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &predefined_item_state)) == 0)
204 LOGD("vconf_get_bool status [%d]\n", predefined_item_state);
208 LOGD("vconf_get_bool failed\n");
212 LOGD("The state of Predefined Item %d, Predefined Item was off by nfcOnOff %s \n",
213 predefined_item_state, predefined_item_off_by_nfcOnOff == true ? "Yes" : "No");
215 /* nfc setting ui updated */
216 _set_pending_status(false);
218 if (nfc_item != NULL)
219 elm_genlist_item_update(nfc_item);
221 if (activated == true)
223 /* predefined item setting enabled */
224 elm_object_item_disabled_set(predefined_item, EINA_FALSE);
226 if (predefined_item_off_by_nfcOnOff != true)
229 LOGD("Turning Predefined Item on \n");
231 _change_nfc_predefined_item_setting(ug_data);
233 if (predefined_item != NULL)
234 elm_genlist_item_update(predefined_item);
236 /* unset internal flag */
237 predefined_item_off_by_nfcOnOff = false;
241 /* predefined item setting disabled */
242 elm_object_item_disabled_set(predefined_item, EINA_TRUE);
244 if (predefined_item_state == VCONFKEY_NFC_PREDEFINED_ITEM_OFF)
247 LOGD("Turning Predefined Item off \n");
249 _change_nfc_predefined_item_setting(ug_data);
251 if (predefined_item != NULL)
252 elm_genlist_item_update(predefined_item);
254 /* set internal flag */
255 predefined_item_off_by_nfcOnOff = true;
261 static Evas_Object *_create_bg(Evas_Object *parent, char *style)
263 Evas_Object *bg = elm_bg_add(parent);
265 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
268 elm_object_style_set(bg, style);
270 elm_win_resize_object_add(parent, bg);
272 evas_object_show(bg);
277 static Evas_Object *_create_main_layout(Evas_Object *parent)
284 layout = elm_layout_add(parent);
286 elm_layout_theme_set(layout, "layout", "application", "default");
288 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
290 evas_object_show(layout);
295 // get the state of item
296 static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
298 Eina_Bool result = EINA_FALSE;
303 gl_item_data *item_data = (gl_item_data *)data;
305 if (item_data == NULL)
307 LOGD("item_data is null");
311 if (item_data->type == NFC_ON_OFF)
313 if (!vconf_get_bool(VCONFKEY_NFC_STATE, &enable))
317 LOGD("vconf_get_bool true");
322 LOGD("vconf_get_bool false");
327 LOGD("vconf_get_bool error [%d]", result);
330 else if (item_data->type == NFC_PREDEFINED_ITEM)
332 if (!vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &enable))
336 LOGD("vconf_get_bool true");
341 LOGD("vconf_get_bool false");
346 LOGD("vconf_get_bool error [%d]", result);
351 LOGD("item_data->type error");
359 // callback for 'deletion'
360 static void _gl_del(void *data, Evas_Object *obj)
362 gl_item_data *item_data = (gl_item_data *)data;
366 if (item_data != NULL)
372 static void _gl_sel_activation(void *data, Evas_Object *obj, void *event_info)
376 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
377 gl_item_data *item_data = (gl_item_data *)data;
379 elm_genlist_item_selected_set(item, 0);
381 if ((item == NULL) || (item_data == NULL))
383 LOGD("item or item_data is null\n");
387 if (item_data->type == NFC_ON_OFF)
389 if (_get_pending_status())
391 LOGD("pending status \n");
395 _change_nfc_onoff_setting(item_data->data);
397 elm_genlist_item_update(item);
399 else if (item_data->type == NFC_PREDEFINED_ITEM)
401 Evas_Object *predefined_item_list = NULL;
402 Evas_Object *l_button = NULL;
403 ugdata_t *ug_data = item_data->data;
405 LOGD("NFC_PREDEFINED_ITEM");
407 /* create setting view */
408 predefined_item_list = _ug_nfc_create_predefined_item_list(ug_data);
409 if (predefined_item_list == NULL)
413 l_button = elm_button_add(ug_data->base_naviframe);
414 elm_object_style_set(l_button, "naviframe/back_btn/default");
415 evas_object_smart_callback_add(l_button, "clicked", _ug_nfc_destroy_predefined_item_list, ug_data);
417 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_PREDEFINED_ITEM, l_button, NULL, predefined_item_list, NULL);
421 LOGD("item_data->type error");
427 static void _check_changed_cb(void *data, Evas_Object *obj, void *event_info)
429 gl_item_data *item_data = (gl_item_data *)data;
433 if (item_data == NULL)
435 LOGD("item_data is null\n");
439 if (item_data->type == NFC_ON_OFF)
441 if (_get_pending_status())
443 LOGD("pending status \n");
447 _change_nfc_onoff_setting(item_data->data);
449 if (nfc_item != NULL)
450 elm_genlist_item_update(nfc_item);
452 else if (item_data->type == NFC_PREDEFINED_ITEM)
454 _change_nfc_predefined_item_setting(item_data->data);
456 if (predefined_item != NULL)
457 elm_genlist_item_update(predefined_item);
461 LOGD("item_data->type error");
467 static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
470 Evas_Object *content = NULL;
472 int result = EINA_FALSE;
473 ugdata_t *ug_data = NULL;
475 gl_item_data *item_data = (gl_item_data *)data;
476 if (item_data == NULL)
478 LOGD("item_data is null");
482 ug_data = item_data->data;
485 LOGD("ug_data is null");
489 if (item_data->type == NFC_ON_OFF)
491 if (_get_pending_status())
493 content = elm_progressbar_add(obj);
494 elm_object_style_set(content, "list_process");
495 evas_object_size_hint_align_set(content, EVAS_HINT_FILL, 0.5);
496 evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
497 evas_object_show(content);
498 elm_progressbar_pulse(content, EINA_TRUE);
502 content = elm_check_add(obj);
503 evas_object_propagate_events_set(content, EINA_FALSE);
504 evas_object_smart_callback_add(content, "changed", _check_changed_cb, item_data);
506 if (((result = vconf_get_bool(VCONFKEY_NFC_STATE, &on)) == 0) && (on != 0))
508 LOGD("vconf_get_bool true");
509 elm_check_state_set(content, EINA_TRUE);
513 LOGD("vconf_get_bool false");
514 elm_check_state_set(content, EINA_FALSE);
517 elm_object_style_set(content, "on&off");
520 else if (item_data->type == NFC_PREDEFINED_ITEM)
522 content = elm_check_add(obj);
523 evas_object_propagate_events_set(content, EINA_FALSE);
524 evas_object_smart_callback_add(content, "changed", _check_changed_cb, item_data);
526 if (((result = vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &on)) == 0) && (on != 0))
528 LOGD("vconf_get_bool true");
529 elm_check_state_set(content, EINA_TRUE);
533 LOGD("vconf_get_bool false");
534 elm_check_state_set(content, EINA_FALSE);
537 elm_object_style_set(content, "on&off");
541 LOGD("item_data->type error");
549 static char *_gl_text_get_onoff(void *data, Evas_Object *obj, const char *part)
553 gl_item_data *item_data = (gl_item_data *)data;
556 LOGD("part:%s", part);
558 // label for 'elm.text' part
559 if (item_data == NULL)
561 LOGD("item_data is null");
565 if (item_data->type == NFC_ON_OFF)
567 text = strdup(IDS_NFC_NFC);
569 else if (item_data->type == NFC_PREDEFINED_ITEM)
571 if (!strcmp(part, "elm.text.1"))
573 text = strdup(IDS_PREDEFINED_ITEM);
579 app_id = vconf_get_str(VCONFKEY_NFC_PREDEFINED_ITEM);
582 LOGD("app_id=> [%s]", app_id);
583 _ug_nfc_setting_db_get_pkgName(app_id, &text);
599 static char *_gl_text_get_help(void *data, Evas_Object *obj, const char *part)
603 int index = (int) data;
606 LOGD("index:%d", index);
610 text = strdup(IDS_NFC_DESCRIPTION_MSG);
615 text = strdup(IDS_PREDEFINED_ITEM_DESCRIPTION_MSG);
619 text = strdup(IDS_NFC_S_BEAM_DESCRIPTION_MSG);
627 static Evas_Object *_ug_nfc_create_nfc_setting_list(void *data)
631 ugdata_t *ug_data = (ugdata_t *)data;
632 Evas_Object *genlist = NULL;
633 Elm_Object_Item* seperator = NULL;
639 genlist = elm_genlist_add(ug_data->base_naviframe);
642 LOGD("genlist is null");
645 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
647 itc_sep.item_style = "dialogue/separator";
648 itc_sep.func.text_get = NULL;
649 itc_sep.func.content_get = NULL;
650 itc_sep.func.state_get = NULL;
651 itc_sep.func.del = NULL;
653 itc_sep_help.item_style = "dialogue/separator.2";
654 itc_sep_help.func.text_get = NULL;
655 itc_sep_help.func.content_get = NULL;
656 itc_sep_help.func.state_get = NULL;
657 itc_sep_help.func.del = NULL;
659 itc_check.item_style = "dialogue/1text.1icon";
660 itc_check.func.text_get = _gl_text_get_onoff;
661 itc_check.func.content_get = _gl_content_get;
662 itc_check.func.state_get = _gl_state_get;
663 itc_check.func.del = _gl_del;
665 itc_helptext.item_style = "multiline/1text";
666 itc_helptext.func.text_get = _gl_text_get_help;
667 itc_helptext.func.content_get = NULL;
668 itc_helptext.func.state_get = NULL;
669 itc_helptext.func.del = NULL;
671 itc_2text.item_style = "dialogue/2text.1icon.10";
672 itc_2text.func.text_get = _gl_text_get_onoff;
673 itc_2text.func.content_get = _gl_content_get;
674 itc_2text.func.state_get = _gl_state_get;
675 itc_2text.func.del = _gl_del;
679 seperator = elm_genlist_item_append(genlist, &itc_sep, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
680 elm_genlist_item_select_mode_set(seperator, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
683 gl_item_data *on_off_data = NULL;
684 on_off_data = malloc(sizeof(gl_item_data));
687 on_off_data->type = NFC_ON_OFF;
688 on_off_data->data = ug_data;
689 nfc_item = elm_genlist_item_append(genlist, &itc_check, (void *)on_off_data, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel_activation, (void *)on_off_data);
692 seperator = elm_genlist_item_append(genlist, &itc_sep_help, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
693 elm_genlist_item_select_mode_set(seperator, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
695 /* 1. NFC setting Help Text */
696 elm_genlist_item_append(genlist, &itc_helptext, (void *)0, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel_activation, NULL);
699 seperator = elm_genlist_item_append(genlist, &itc_sep, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
700 elm_genlist_item_select_mode_set(seperator, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
702 if (_ug_nfc_check_predefined_item_available())
704 LOGD("success to create predefined item");
706 /* 2. Predefined item setting */
707 gl_item_data *predefined_item_data = NULL;
708 predefined_item_data = malloc(sizeof(gl_item_data));
709 if (!predefined_item_data)
711 predefined_item_data->type = NFC_PREDEFINED_ITEM;
712 predefined_item_data->data = ug_data;
713 predefined_item = elm_genlist_item_append(genlist, &itc_2text, (void *)predefined_item_data, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel_activation, (void *)predefined_item_data);
716 seperator = elm_genlist_item_append(genlist, &itc_sep_help, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
717 elm_genlist_item_select_mode_set(seperator, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
719 /* 2. Predefined item setting Help Text*/
720 elm_genlist_item_append(genlist, &itc_helptext, (void *)1, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel_activation, NULL);
723 seperator = elm_genlist_item_append(genlist, &itc_sep, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
724 elm_genlist_item_select_mode_set(seperator, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
726 if (((result = vconf_get_bool(VCONFKEY_NFC_STATE, &on)) == 0) && (on == 0))
728 result = vconf_set_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, FALSE);
731 LOGD("vconf_set_bool success\n");
735 LOGD("vconf_set_bool failed\n");
737 elm_object_item_disabled_set(predefined_item, EINA_TRUE);
741 evas_object_show(genlist);
748 static void *__ug_nfc_setting_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv)
752 ugdata_t *ug_data = (ugdata_t *)priv;
753 Evas_Object *parent = NULL;
754 Evas_Object *nfc_setting_list = NULL;
755 Evas_Object *l_button = NULL;
758 /* set text domain */
759 bindtextdomain(NFCUG_TEXT_DOMAIN, NFCUG_LOCALEDIR);
761 /* create base view */
762 parent = ug_get_parent_layout(ug);
765 ug_data->ug_win_main = parent;
766 evas_object_show(ug_data->ug_win_main);
767 ug_data->nfc_setting_ug = ug;
769 ug_data->base_layout = _create_main_layout(ug_data->ug_win_main);
770 ug_data->bg = _create_bg(ug_data->ug_win_main, "group_list");
771 elm_object_part_content_set(ug_data->base_layout, "elm.swallow.bg", ug_data->bg);
773 ug_data->base_naviframe = elm_naviframe_add(ug_data->base_layout);
774 elm_object_part_content_set(ug_data->base_layout, "elm.swallow.content", ug_data->base_naviframe);
775 evas_object_show(ug_data->base_naviframe);
777 /* parse parameter */
778 service_get_extra_data(service, "type", &type);
782 LOGD("type is NULL");
788 LOGD("type => [%s]", type);
790 if (strncmp(type, "nfc", strlen("nfc")) == 0)
792 _ug_nfc_setting_db_open();
794 nfc_setting_list = _ug_nfc_create_nfc_setting_list(ug_data);
802 if (nfc_setting_list == NULL)
806 l_button = elm_button_add(ug_data->base_naviframe);
807 elm_object_style_set(l_button, "naviframe/back_btn/default");
808 evas_object_smart_callback_add(l_button, "clicked", _back_clicked_cb, ug_data->nfc_setting_ug);
812 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_NFC_NFC, l_button, NULL, nfc_setting_list, NULL);
816 if (strncmp(type, "sbeam", strlen("sbeam")) == 0)
818 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_NFC_S_BEAM, l_button, NULL, nfc_setting_list, NULL);
822 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_NFC_NFC, l_button, NULL, nfc_setting_list, NULL);
825 /* Register activation changed callback */
826 if (NFC_ERROR_NONE == nfc_manager_initialize(NULL, NULL))
828 LOGD("nfc_manager_initialize success\n");
829 nfc_manager_set_activation_changed_cb(_nfc_activation_changed_cb, ug_data);
833 LOGD("nfc_manager_initialize FAIL!!!!\n");
838 return ug_data->base_layout;
841 static void __ug_nfc_setting_destroy(ui_gadget_h ug, service_h service, void *priv)
844 ugdata_t *ug_data = (ugdata_t *)priv;
849 nfc_manager_unset_activation_changed_cb();
851 if (nfc_manager_deinitialize() != NFC_ERROR_NONE)
853 LOGD("nfc_manager_deinitialize failed");
856 evas_object_del(ug_get_layout(ug));
861 static void __ug_nfc_setting_start(ui_gadget_h ug, service_h service, void *priv)
865 ugdata_t *ug_data = (ugdata_t *)priv;
867 /* check nfc-device*/
868 if (!nfc_manager_is_supported())
870 LOGD("It is not nfc device >>>>");
871 _show_app_error_popup(ug_data);
877 static void __ug_nfc_setting_pause(ui_gadget_h ug, service_h service, void *priv)
883 static void __ug_nfc_setting_resume(ui_gadget_h ug, service_h service, void *priv)
889 static void __ug_nfc_setting_message(ui_gadget_h ug, service_h msg, service_h service, void *priv)
895 static void __ug_nfc_setting_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv)
901 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
903 ugdata_t *ug_data; // User defined private data
905 LOGD("UG_MODULE_INIT!!\n");
910 //app_data = calloc(1, sizeof(struct ugdata));
911 ug_data = (ugdata_t *)malloc(sizeof(ugdata_t));
915 ops->create = __ug_nfc_setting_create;
916 ops->start = __ug_nfc_setting_start;
917 ops->pause = __ug_nfc_setting_pause;
918 ops->resume = __ug_nfc_setting_resume;
919 ops->destroy = __ug_nfc_setting_destroy;
920 ops->message = __ug_nfc_setting_message;
921 ops->event = __ug_nfc_setting_event;
923 ops->opt = UG_OPT_INDICATOR_ENABLE;
928 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)