code update
[apps/home/ug-nfc-efl.git] / ug-nfc-setting-efl / src / ug-nfc-setting-main.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   *
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
7
8   *     http://www.tizenopensource.org/license
9   *
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.
15   */
16
17
18 #include "ug-nfc-setting-main.h"
19 #include "ug-nfc-setting-popup.h"
20 #include "ug-nfc-setting-db.h"
21
22 #ifndef UG_MODULE_API
23 #define UG_MODULE_API __attribute__ ((visibility("default")))
24 #endif
25
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;
31
32 static Elm_Object_Item *nfc_item = NULL;
33 static Elm_Object_Item *predefined_item = NULL;
34
35 static bool pending_status = false;
36
37
38 static void _show_app_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
39 {
40         ugdata_t *ug_data = (ugdata_t *)data;
41         int result = (int)event_info;
42
43         LOGD("BEGIN >>>>");
44
45         if (ug_data == NULL)
46                 return;
47
48         switch (result)
49         {
50         case UG_NFC_POPUP_RESP_CLOSE :
51                 /* destroy UG */
52                 LOGD("ug_destroy_me >>>>", __FUNCTION__, __LINE__);
53                 ug_destroy_me(ug_data->nfc_setting_ug);
54                 break;
55
56         default :
57                 break;
58         }
59
60         LOGD("END <<<<");
61 }
62
63 static void _show_app_error_popup(void *data)
64 {
65         ugdata_t *ug_data = (ugdata_t *)data;
66         char popup_str[POPUP_TEXT_SIZE] = { 0, };
67
68         LOGD("BEGIN >>>>");
69
70         if (ug_data == NULL)
71                 return;
72
73         memcpy(popup_str, IDS_NFC_SERVICE_IS_NOT_SUPPORTED, strlen(IDS_NFC_SERVICE_IS_NOT_SUPPORTED));
74
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);
76
77         LOGD("END <<<<");
78 }
79
80 static bool _get_pending_status(void)
81 {
82         return pending_status;
83 }
84
85 static void _set_pending_status(bool status)
86 {
87         pending_status = status;
88 }
89
90 static void _back_clicked_cb(void *data, Evas_Object *obj, void *event_info)
91 {
92         LOGD("BEGIN >>>>");
93
94         _ug_nfc_setting_db_close();
95
96         ug_destroy_me(data);
97
98         LOGD("END <<<<");
99 }
100
101 /* Principle of NFC, S Beam On/Off                              */
102 /*                                                      */
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         */
107
108 static void _change_nfc_onoff_setting(void *data)
109 {
110         int status;
111         int result;
112
113         LOGD("BEGIN >>>>");
114
115         ugdata_t *ug_data = (ugdata_t *)data;
116         if (!ug_data)
117                 return;
118
119         if ((result = vconf_get_bool(VCONFKEY_NFC_STATE, &status)) == 0)
120         {
121                 LOGD("vconf_get_bool status [%d]\n", status);
122
123                 result = nfc_manager_set_activation(!status, NULL, NULL);
124                 if (result != NFC_ERROR_NONE)
125                 {
126                         LOGD("nfc_manager_set_activation failed");
127
128                         return;
129                 }
130                 _set_pending_status(true);
131         }
132         else
133         {
134                 LOGD("vconf_get_bool failed\n");
135         }
136
137         LOGD("END <<<<");
138 }
139
140 void _change_nfc_predefined_item_setting(void *data)
141 {
142         int status = 0;
143         int result = -1;
144
145         LOGD("BEGIN >>>>");
146
147         ugdata_t *ug_data = (ugdata_t *)data;
148         if (!ug_data)
149                 return;
150
151         if ((result = vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &status)) == 0)
152         {
153                 LOGD("vconf_get_bool status [%d]\n", status);
154
155                 if (status)
156                 {
157                         /* predefined item off */
158                         result = vconf_set_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, FALSE);
159                         if (!result )
160                         {
161                                 LOGD("vconf_set_bool success\n");
162                         }
163                         else
164                         {
165                                 LOGD("vconf_set_bool failed\n");
166                         }
167                 }
168                 else
169                 {
170                         /* predefined item on */
171                         result = vconf_set_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, TRUE);
172                         if (!result )
173                         {
174                                 LOGD("vconf_set_bool success\n");
175                         }
176                         else
177                         {
178                                 LOGD("vconf_set_bool failed\n");
179                         }
180                 }
181         }
182         else
183         {
184                 LOGD("vconf_get_bool failed\n");
185         }
186
187         LOGD("END <<<<");
188 }
189
190 void _nfc_activation_changed_cb(bool activated , void *user_data)
191 {
192         LOGD("BEGIN >>>>");
193
194         ugdata_t *ug_data = (ugdata_t *)user_data;
195         int predefined_item_state = 0;
196         static bool predefined_item_off_by_nfcOnOff = false;
197         int result;
198
199         LOGD("nfc mode %s \n", activated ? "ON" : "OFF");
200
201
202         if ((result = vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &predefined_item_state)) == 0)
203         {
204                 LOGD("vconf_get_bool status [%d]\n", predefined_item_state);
205         }
206         else
207         {
208                 LOGD("vconf_get_bool failed\n");
209                 return;
210         }
211
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");
214
215         /* nfc setting ui updated */
216         _set_pending_status(false);
217
218         if (nfc_item != NULL)
219                 elm_genlist_item_update(nfc_item);
220
221         if (activated == true)
222         {
223                 /* predefined item setting enabled */
224                 elm_object_item_disabled_set(predefined_item, EINA_FALSE);
225
226                 if (predefined_item_off_by_nfcOnOff != true)
227                         return;
228
229                 LOGD("Turning Predefined Item on \n");
230
231                 _change_nfc_predefined_item_setting(ug_data);
232
233                 if (predefined_item != NULL)
234                         elm_genlist_item_update(predefined_item);
235
236                 /* unset internal flag */
237                 predefined_item_off_by_nfcOnOff = false;
238         }
239         else
240         {
241                 /* predefined item setting disabled */
242                 elm_object_item_disabled_set(predefined_item, EINA_TRUE);
243
244                 if (predefined_item_state == VCONFKEY_NFC_PREDEFINED_ITEM_OFF)
245                         return;
246
247                 LOGD("Turning Predefined Item off \n");
248
249                 _change_nfc_predefined_item_setting(ug_data);
250
251                 if (predefined_item != NULL)
252                         elm_genlist_item_update(predefined_item);
253
254                 /* set internal flag */
255                 predefined_item_off_by_nfcOnOff = true;
256         }
257
258         LOGD("END <<<<");
259 }
260
261 static Evas_Object *_create_bg(Evas_Object *parent, char *style)
262 {
263         Evas_Object *bg = elm_bg_add(parent);
264
265         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
266
267         if (style)
268                 elm_object_style_set(bg, style);
269
270         elm_win_resize_object_add(parent, bg);
271
272         evas_object_show(bg);
273
274         return bg;
275 }
276
277 static Evas_Object *_create_main_layout(Evas_Object *parent)
278 {
279         Evas_Object *layout;
280
281         if (parent == NULL)
282                 return NULL;
283
284         layout = elm_layout_add(parent);
285
286         elm_layout_theme_set(layout, "layout", "application", "default");
287
288         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
289
290         evas_object_show(layout);
291
292         return layout;
293 }
294
295 // get the state of item
296 static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
297 {
298         Eina_Bool result = EINA_FALSE;
299         int enable = 0;
300
301         LOGD("BEGIN >>>>");
302
303         gl_item_data *item_data = (gl_item_data *)data;
304
305         if (item_data == NULL)
306         {
307                 LOGD("item_data is null");
308                 return EINA_FALSE;
309         }
310
311         if (item_data->type == NFC_ON_OFF)
312         {
313                 if (!vconf_get_bool(VCONFKEY_NFC_STATE, &enable))
314                 {
315                         if (enable != 0)
316                         {
317                                 LOGD("vconf_get_bool true");
318                                 result = EINA_TRUE;
319                         }
320                         else
321                         {
322                                 LOGD("vconf_get_bool false");
323                         }
324                 }
325                 else
326                 {
327                         LOGD("vconf_get_bool error [%d]", result);
328                 }
329         }
330         else if (item_data->type == NFC_PREDEFINED_ITEM)
331         {
332                 if (!vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &enable))
333                 {
334                         if (enable != 0)
335                         {
336                                 LOGD("vconf_get_bool true");
337                                 result = EINA_TRUE;
338                         }
339                         else
340                         {
341                                 LOGD("vconf_get_bool false");
342                         }
343                 }
344                 else
345                 {
346                         LOGD("vconf_get_bool error [%d]", result);
347                 }
348         }
349         else
350         {
351                 LOGD("item_data->type error");
352         }
353
354         LOGD("END <<<<");
355
356         return result;
357 }
358
359 // callback for 'deletion'
360 static void _gl_del(void *data, Evas_Object *obj)
361 {
362         gl_item_data *item_data = (gl_item_data *)data;
363
364         LOGD("BEGIN >>>>");
365
366         if (item_data != NULL)
367                 free(item_data);
368
369         LOGD("END <<<<");
370 }
371
372 static void _gl_sel_activation(void *data, Evas_Object *obj, void *event_info)
373 {
374         LOGD("BEGIN >>>>");
375
376         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
377         gl_item_data *item_data = (gl_item_data *)data;
378
379         elm_genlist_item_selected_set(item, 0);
380
381         if ((item == NULL) || (item_data == NULL))
382         {
383                 LOGD("item or item_data is null\n");
384                 return;
385         }
386
387         if (item_data->type == NFC_ON_OFF)
388         {
389                 if (_get_pending_status())
390                 {
391                         LOGD("pending status \n");
392                         return;
393                 }
394
395                 _change_nfc_onoff_setting(item_data->data);
396
397                 elm_genlist_item_update(item);
398         }
399         else if (item_data->type == NFC_PREDEFINED_ITEM)
400         {
401                 Evas_Object *predefined_item_list = NULL;
402                 Evas_Object *l_button = NULL;
403                 ugdata_t *ug_data = item_data->data;
404
405                 LOGD("NFC_PREDEFINED_ITEM");
406
407                 /* create setting view */
408                 predefined_item_list = _ug_nfc_create_predefined_item_list(ug_data);
409                 if (predefined_item_list == NULL)
410                         return;
411
412                 /* Push navifreme */
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);
416
417                 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_PREDEFINED_ITEM, l_button, NULL, predefined_item_list, NULL);
418         }
419         else
420         {
421                 LOGD("item_data->type error");
422         }
423
424         LOGD("END <<<<");
425 }
426
427 static void _check_changed_cb(void *data, Evas_Object *obj, void *event_info)
428 {
429         gl_item_data *item_data = (gl_item_data *)data;
430
431         LOGD("BEGIN >>>>");
432
433         if (item_data == NULL)
434         {
435                 LOGD("item_data is null\n");
436                 return;
437         }
438
439         if (item_data->type == NFC_ON_OFF)
440         {
441                 if (_get_pending_status())
442                 {
443                         LOGD("pending status \n");
444                         return;
445                 }
446
447                 _change_nfc_onoff_setting(item_data->data);
448
449                 if (nfc_item != NULL)
450                         elm_genlist_item_update(nfc_item);
451         }
452         else if (item_data->type == NFC_PREDEFINED_ITEM)
453         {
454                 _change_nfc_predefined_item_setting(item_data->data);
455
456                 if (predefined_item != NULL)
457                         elm_genlist_item_update(predefined_item);
458         }
459         else
460         {
461                 LOGD("item_data->type error");
462         }
463
464         LOGD("END <<<<");
465 }
466
467 static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
468 {
469         LOGD("BEGIN >>>>");
470         Evas_Object *content = NULL;
471         int on;
472         int result = EINA_FALSE;
473         ugdata_t *ug_data = NULL;
474
475         gl_item_data *item_data = (gl_item_data *)data;
476         if (item_data == NULL)
477         {
478                 LOGD("item_data is null");
479                 return NULL;
480         }
481
482         ug_data = item_data->data;
483         if (ug_data == NULL)
484         {
485                 LOGD("ug_data is null");
486                 return NULL;
487         }
488
489         if (item_data->type == NFC_ON_OFF)
490         {
491                 if (_get_pending_status())
492                 {
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);
499                 }
500                 else
501                 {
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);
505
506                         if (((result = vconf_get_bool(VCONFKEY_NFC_STATE, &on)) == 0) && (on != 0))
507                         {
508                                 LOGD("vconf_get_bool true");
509                                 elm_check_state_set(content, EINA_TRUE);
510                         }
511                         else
512                         {
513                                 LOGD("vconf_get_bool false");
514                                 elm_check_state_set(content, EINA_FALSE);
515                         }
516
517                         elm_object_style_set(content, "on&off");
518                 }
519         }
520         else if (item_data->type == NFC_PREDEFINED_ITEM)
521         {
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);
525
526                 if (((result = vconf_get_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, &on)) == 0) && (on != 0))
527                 {
528                         LOGD("vconf_get_bool true");
529                         elm_check_state_set(content, EINA_TRUE);
530                 }
531                 else
532                 {
533                         LOGD("vconf_get_bool false");
534                         elm_check_state_set(content, EINA_FALSE);
535                 }
536
537                 elm_object_style_set(content, "on&off");
538         }
539         else
540         {
541                 LOGD("item_data->type error");
542         }
543
544         LOGD("END <<<<");
545
546         return content;
547 }
548
549 static char *_gl_text_get_onoff(void *data, Evas_Object *obj, const char *part)
550 {
551         LOGD("BEGIN >>>>");
552
553         gl_item_data *item_data = (gl_item_data *)data;
554         char *text = NULL;
555
556         LOGD("part:%s", part);
557
558         // label for 'elm.text' part
559         if (item_data == NULL)
560         {
561                 LOGD("item_data is null");
562                 return NULL;
563         }
564
565         if (item_data->type == NFC_ON_OFF)
566         {
567                 text = strdup(IDS_NFC_NFC);
568         }
569         else if (item_data->type == NFC_PREDEFINED_ITEM)
570         {
571                 if (!strcmp(part, "elm.text.1"))
572                 {
573                         text = strdup(IDS_PREDEFINED_ITEM);
574                 }
575                 else
576                 {
577                         char *app_id = NULL;
578
579                         app_id = vconf_get_str(VCONFKEY_NFC_PREDEFINED_ITEM);
580                         if (app_id != NULL)
581                         {
582                                 LOGD("app_id=> [%s]", app_id);
583                                 _ug_nfc_setting_db_get_pkgName(app_id, &text);
584
585                                 free(app_id);
586                         }
587                 }
588         }
589         else
590         {
591                 LOGD("type error");
592         }
593
594         LOGD("END <<<<");
595
596         return text;
597 }
598
599 static char *_gl_text_get_help(void *data, Evas_Object *obj, const char *part)
600 {
601         LOGD("BEGIN >>>>");
602
603         int index = (int) data;
604         char *text = NULL;
605
606         LOGD("index:%d", index);
607
608         if (index == 0)
609         {
610                 text = strdup(IDS_NFC_DESCRIPTION_MSG);
611
612         }
613         else if (index == 1)
614         {
615                 text = strdup(IDS_PREDEFINED_ITEM_DESCRIPTION_MSG);
616         }
617         else if (index == 2)
618         {
619                 text = strdup(IDS_NFC_S_BEAM_DESCRIPTION_MSG);
620         }
621
622         LOGD("END <<<<");
623
624         return text;
625 }
626
627 static Evas_Object *_ug_nfc_create_nfc_setting_list(void *data)
628 {
629         LOGD("BEGIN >>>>");
630
631         ugdata_t *ug_data = (ugdata_t *)data;
632         Evas_Object *genlist = NULL;
633         Elm_Object_Item* seperator = NULL;
634         int result = 0;
635         int on = 0;
636
637
638         /* make genlist */
639         genlist = elm_genlist_add(ug_data->base_naviframe);
640         if (genlist == NULL)
641         {
642                 LOGD("genlist is null");
643                 return NULL;
644         }
645         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
646
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;
652
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;
658
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;
664
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;
670
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;
676
677
678         /* SEPARATOR */
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);
681
682         /* 1. NFC setting */
683         gl_item_data *on_off_data = NULL;
684         on_off_data = malloc(sizeof(gl_item_data));
685         if (!on_off_data)
686                 return NULL;
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);
690
691         /* SEPARATOR.2 */
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);
694
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);
697
698         /* SEPARATOR */
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);
701
702         if (_ug_nfc_check_predefined_item_available())
703         {
704                 LOGD("success to create predefined item");
705
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)
710                         return NULL;
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);
714
715                 /* SEPARATOR.2 */
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);
718
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);
721
722                 /* SEPARATOR */
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);
725
726                 if (((result = vconf_get_bool(VCONFKEY_NFC_STATE, &on)) == 0) && (on == 0))
727                 {
728                         result = vconf_set_bool(VCONFKEY_NFC_PREDEFINED_ITEM_STATE, FALSE);
729                         if (!result )
730                         {
731                                 LOGD("vconf_set_bool success\n");
732                         }
733                         else
734                         {
735                                 LOGD("vconf_set_bool failed\n");
736                         }
737                         elm_object_item_disabled_set(predefined_item, EINA_TRUE);
738                 }
739         }
740
741         evas_object_show(genlist);
742
743         LOGD("END <<<<");
744
745         return genlist;
746 }
747
748 static void *__ug_nfc_setting_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv)
749 {
750         LOGD("BEGIN >>>>");
751
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;
756         char *type = NULL;
757
758         /* set text domain */
759         bindtextdomain(NFCUG_TEXT_DOMAIN, NFCUG_LOCALEDIR);
760
761         /* create base view */
762         parent = ug_get_parent_layout(ug);
763         if (!parent)
764                 return NULL;
765         ug_data->ug_win_main = parent;
766         evas_object_show(ug_data->ug_win_main);
767         ug_data->nfc_setting_ug = ug;
768
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);
772
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);
776
777         /* parse parameter */
778         service_get_extra_data(service, "type", &type);
779
780         if (type == NULL)
781         {
782                 LOGD("type is NULL");
783
784                 return NULL;
785         }
786         else
787         {
788                 LOGD("type => [%s]", type);
789
790                 if (strncmp(type, "nfc", strlen("nfc")) == 0)
791                 {
792                         _ug_nfc_setting_db_open();
793
794                         nfc_setting_list = _ug_nfc_create_nfc_setting_list(ug_data);
795                 }
796                 else
797                 {
798                         return NULL;
799                 }
800         }
801
802         if (nfc_setting_list == NULL)
803                 return NULL;
804
805         /* Push navifreme */
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);
809
810         if (type == NULL)
811         {
812                 ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_NFC_NFC, l_button, NULL, nfc_setting_list, NULL);
813         }
814         else
815         {
816                 if (strncmp(type, "sbeam", strlen("sbeam")) == 0)
817                 {
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);
819                 }
820                 else
821                 {
822                         ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe, IDS_NFC_NFC, l_button, NULL, nfc_setting_list, NULL);
823                 }
824         }
825         /* Register activation changed callback */
826         if (NFC_ERROR_NONE == nfc_manager_initialize(NULL, NULL))
827         {
828                 LOGD("nfc_manager_initialize success\n");
829                 nfc_manager_set_activation_changed_cb(_nfc_activation_changed_cb, ug_data);
830         }
831         else
832         {
833                 LOGD("nfc_manager_initialize FAIL!!!!\n");
834         }
835
836         LOGD("END <<<<");
837
838         return ug_data->base_layout;
839 }
840
841 static void __ug_nfc_setting_destroy(ui_gadget_h ug, service_h service, void *priv)
842 {
843         LOGD("BEGIN >>>>");
844         ugdata_t *ug_data = (ugdata_t *)priv;
845
846         if (ug_data == NULL)
847                 return;
848
849         nfc_manager_unset_activation_changed_cb();
850
851         if (nfc_manager_deinitialize() != NFC_ERROR_NONE)
852         {
853                 LOGD("nfc_manager_deinitialize failed");
854         }
855
856         evas_object_del(ug_get_layout(ug));
857
858         LOGD("END <<<<");
859 }
860
861 static void __ug_nfc_setting_start(ui_gadget_h ug, service_h service, void *priv)
862 {
863         LOGD("BEGIN >>>>");
864
865         ugdata_t *ug_data = (ugdata_t *)priv;
866
867         /* check nfc-device*/
868         if (!nfc_manager_is_supported())
869         {
870                 LOGD("It is not nfc device >>>>");
871                 _show_app_error_popup(ug_data);
872         }
873
874         LOGD("END <<<<");
875 }
876
877 static void __ug_nfc_setting_pause(ui_gadget_h ug, service_h service, void *priv)
878 {
879         LOGD("BEGIN >>>>");
880         LOGD("END <<<<");
881 }
882
883 static void __ug_nfc_setting_resume(ui_gadget_h ug, service_h service, void *priv)
884 {
885         LOGD("BEGIN >>>>");
886         LOGD("END <<<<");
887 }
888
889 static void __ug_nfc_setting_message(ui_gadget_h ug, service_h msg, service_h service, void *priv)
890 {
891         LOGD("BEGIN >>>>");
892         LOGD("END <<<<");
893 }
894
895 static void __ug_nfc_setting_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv)
896 {
897         LOGD("BEGIN >>>>");
898         LOGD("END <<<<");
899 }
900
901 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
902 {
903         ugdata_t *ug_data; // User defined private data
904
905         LOGD("UG_MODULE_INIT!!\n");
906
907         if (!ops)
908                 return -1;
909
910         //app_data = calloc(1, sizeof(struct ugdata));
911         ug_data = (ugdata_t *)malloc(sizeof(ugdata_t));
912         if (!ug_data)
913                 return -1;
914
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;
922         ops->priv = ug_data;
923         ops->opt = UG_OPT_INDICATOR_ENABLE;
924
925         return 0;
926 }
927
928 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
929 {
930         ugdata_t *ug_data;
931
932         if (!ops)
933                 return;
934
935         ug_data = ops->priv;
936
937         if (ug_data)
938                 free(ug_data);
939
940         ops->priv = NULL;
941 }