tizen 2.3 release
[apps/home/ug-nfc-efl.git] / ug-nfc-setting-efl / src / ug-nfc-setting-secure-storage.c
1 /*
2   * Copyright (c) 2012, 2013 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://floralicense.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 <glib.h>
19
20 #include "ug-nfc-setting-main.h"
21
22 static Elm_Genlist_Item_Class itc_sep;
23 static Elm_Genlist_Item_Class itc_sep_help;
24 static Elm_Genlist_Item_Class itc_helptext;
25 static Elm_Genlist_Item_Class itc_1text1icon;
26
27
28 static void __radio_changed_cb(void *data, Evas_Object *obj,
29         void *event_info)
30 {
31         int value;
32
33         value = elm_radio_value_get(obj);
34
35         if (value == NFC_SECURE_STORAGE_MAN) {
36                 if (vconf_set_int(VCONFKEY_NFC_WALLET_MODE,
37                         VCONFKEY_NFC_WALLET_MODE_MANUAL)) {
38                         LOGE("vconf_set_int failed");
39                 }
40         } else if (value == NFC_SECURE_STORAGE_AUTO) {
41                 if (vconf_set_int(VCONFKEY_NFC_WALLET_MODE,
42                         VCONFKEY_NFC_WALLET_MODE_AUTOMATIC)) {
43                         LOGE("vconf_set_int failed");
44                 }
45         }
46 }
47
48 static char *__gl_text_get(void *data, Evas_Object *obj, const char *part)
49 {
50         int index = (int) data;
51         char *text = NULL;
52
53         //LOGD("part:%s", part);
54         //LOGD("index:%d", index);
55
56         if (index == 0) {
57                 text = strdup(IDS_NFC_SECURE_STORAGE_ITEM_MAN);
58         } else if (index == 1) {
59                 text = strdup(IDS_NFC_SECURE_STORAGE_ITEM_AUTO);
60         }
61
62         return text;
63 }
64
65 static char *__gl_text_get_des(void *data, Evas_Object *obj,
66         const char *part)
67 {
68         int index = (int) data;
69         char *text = NULL;
70
71         //LOGD("part:%s", part);
72         //LOGD("index:%d", index);
73
74         if (index == 0) {
75                 text = strdup(IDS_NFC_SECURE_STORAGE_ITEM_MAN_DSC);
76         } else if (index == 1) {
77                 text = strdup(IDS_NFC_SECURE_STORAGE_ITEM_AUTO_DSC);
78         }
79
80         return text;
81 }
82
83 static Evas_Object *__gl_content_get(void *data, Evas_Object *obj,
84         const char *part)
85 {
86         int index = (int) data;
87         Evas_Object *content = NULL;
88         Evas_Object *radio_group;
89         int intval;
90
91
92         //LOGD("part:%s", part);
93         //LOGD("index:%d", index);
94
95         if (!strcmp(part, "elm.icon")) {
96                 if (index == 0) {
97                         radio_group = evas_object_data_get(obj, "radio");
98
99                         content = elm_radio_add(obj);
100                         elm_radio_state_value_set(content,
101                                 NFC_SECURE_STORAGE_MAN);
102                         elm_radio_group_add(content, radio_group);
103                         evas_object_propagate_events_set(content, EINA_FALSE);
104                         evas_object_smart_callback_add(content, "changed",
105                                 __radio_changed_cb, NULL);
106
107                         if ((!vconf_get_int(VCONFKEY_NFC_WALLET_MODE, &intval)) &&
108                                 (intval == VCONFKEY_NFC_WALLET_MODE_MANUAL)) {
109                                 elm_radio_value_set(content,
110                                         NFC_SECURE_STORAGE_MAN);
111                         }
112                 } else if (index == 1) {
113                         radio_group = evas_object_data_get(obj, "radio");
114
115                         content = elm_radio_add(obj);
116                         elm_radio_state_value_set(content,
117                                 NFC_SECURE_STORAGE_AUTO);
118                         elm_radio_group_add(content, radio_group);
119                         evas_object_propagate_events_set(content, EINA_FALSE);
120                         evas_object_smart_callback_add(content, "changed",
121                                 __radio_changed_cb, NULL);
122
123                         if ((!vconf_get_int(VCONFKEY_NFC_WALLET_MODE, &intval)) &&
124                                 (intval == VCONFKEY_NFC_WALLET_MODE_AUTOMATIC)) {
125                                 elm_radio_value_set(content,
126                                         NFC_SECURE_STORAGE_AUTO);
127                         }
128                 }
129         }
130
131         return content;
132 }
133
134 static void __gl_sel(void *data, Evas_Object *obj, void *event_info)
135 {
136         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
137         Evas_Object *radio;
138         int index;
139
140         if (!item)
141                 return;
142
143         elm_genlist_item_selected_set(item, 0);
144
145         index = (int) elm_object_item_data_get(item);
146         LOGD("index:%d", index);
147
148         if (index == 0) {
149                 radio = elm_object_item_part_content_get(item, "elm.icon");
150
151                 elm_radio_value_set(radio, NFC_SECURE_STORAGE_MAN);
152                 if (!vconf_set_int(VCONFKEY_NFC_WALLET_MODE,
153                         VCONFKEY_NFC_WALLET_MODE_MANUAL)) {
154                         LOGD("vconf_set_int success");
155                 }
156         } else if (index == 1) {
157                 radio = elm_object_item_part_content_get(item,"elm.icon");
158
159                 elm_radio_value_set(radio, NFC_SECURE_STORAGE_AUTO);
160                 if (!vconf_set_int(VCONFKEY_NFC_WALLET_MODE,
161                         VCONFKEY_NFC_WALLET_MODE_AUTOMATIC)) {
162                         LOGD("vconf_set_int success");
163                 }
164         }
165         elm_genlist_item_update(item);
166 }
167
168 static void __genlist_free_cb(void *data, Evas *e, Evas_Object *obj,
169         void *ei)
170 {
171         Evas_Object *radio_group = evas_object_data_get(obj, "radio");
172
173         if (radio_group)
174                 evas_object_del(radio_group);
175 }
176
177 static Evas_Object *__create_secure_storage_list(void *data)
178 {
179         ugdata_t *ug_data = (ugdata_t *) data;
180         Elm_Object_Item* separator;
181         Evas_Object *genlist, *radio_group;
182
183         if (!ug_data)
184                 return NULL;
185
186         genlist = elm_genlist_add(ug_data->base_naviframe);
187         if (!genlist) {
188                 LOGE("elm_genlist_add failed");
189                 return NULL;
190         }
191
192         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
193         evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE,
194                 __genlist_free_cb, NULL);
195
196         radio_group = elm_radio_add(genlist);
197         elm_radio_state_value_set(radio_group, 0);
198         elm_radio_value_set(radio_group, 0);
199         evas_object_data_set(genlist, "radio", radio_group);
200
201         itc_sep.item_style = "dialogue/separator";
202         itc_sep.func.text_get = NULL;
203         itc_sep.func.content_get = NULL;
204         itc_sep.func.state_get = NULL;
205         itc_sep.func.del = NULL;
206
207         itc_sep_help.item_style = "dialogue/separator.2";
208         itc_sep_help.func.text_get = NULL;
209         itc_sep_help.func.content_get = NULL;
210         itc_sep_help.func.state_get = NULL;
211         itc_sep_help.func.del = NULL;
212
213         itc_1text1icon.item_style = "dialogue/1text.1icon.3";
214         itc_1text1icon.func.text_get = __gl_text_get;
215         itc_1text1icon.func.content_get = __gl_content_get;
216         itc_1text1icon.func.state_get = NULL;
217         itc_1text1icon.func.del = NULL;
218
219         itc_helptext.item_style = "multiline/1text";
220         itc_helptext.func.text_get = __gl_text_get_des;
221         itc_helptext.func.content_get = NULL;
222         itc_helptext.func.state_get = NULL;
223         itc_helptext.func.del = NULL;
224
225         /* SEPARATOR */
226         separator = elm_genlist_item_append(genlist, &itc_sep, NULL, NULL,
227                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
228         elm_genlist_item_select_mode_set(separator,
229                 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
230         elm_object_item_access_unregister(separator);
231
232         /* Manual item : index 0 */
233         elm_genlist_item_append(genlist, &itc_1text1icon, (void *)0, NULL,
234                 ELM_GENLIST_ITEM_NONE, __gl_sel, NULL);
235         separator = elm_genlist_item_append(genlist, &itc_sep_help,
236                 NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
237         elm_genlist_item_select_mode_set(separator,
238                 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
239         elm_object_item_access_unregister(separator);
240
241         // Help text
242         elm_genlist_item_append(genlist, &itc_helptext, (void *) 0,
243                 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
244         separator = elm_genlist_item_append(genlist, &itc_sep, NULL, NULL,
245                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
246         elm_genlist_item_select_mode_set(separator,
247                 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
248         elm_object_item_access_unregister(separator);
249
250         /* Automatic item + separator */
251         elm_genlist_item_append(genlist, &itc_1text1icon, (void *)1, NULL,
252                 ELM_GENLIST_ITEM_NONE, __gl_sel, NULL);
253         separator = elm_genlist_item_append(genlist, &itc_sep_help,
254                 NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
255         elm_genlist_item_select_mode_set(separator,
256                 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
257         elm_object_item_access_unregister(separator);
258
259         // Help text
260         elm_genlist_item_append(genlist, &itc_helptext, (void *) 1,
261                 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
262         separator = elm_genlist_item_append(genlist, &itc_sep, NULL, NULL,
263                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
264         elm_genlist_item_select_mode_set(separator,
265                 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
266         elm_object_item_access_unregister(separator);
267
268         return genlist;
269 }
270
271 static Eina_Bool __destroy_secure_storage_list(void *data,
272         Elm_Object_Item *it)
273 {
274         ugdata_t *ug_data = (ugdata_t *)data;
275
276         if (ug_data && ug_data->ns_genlist) {
277                 elm_genlist_realized_items_update(ug_data->ns_genlist);
278         }
279
280         return EINA_TRUE;
281 }
282
283 void _ug_nfc_secure_storage_create(void *data)
284 {
285         ugdata_t *ug_data = (ugdata_t *)data;
286         Evas_Object *genlist;
287
288         if (!ug_data) {
289                 LOGE("invalid paramater");
290                 return;
291         }
292
293         /* create setting view */
294         ug_data->ss_genlist = genlist = __create_secure_storage_list(ug_data);
295         if (!genlist)
296                 return;
297
298         /* Push navifreme */
299         ug_data->base_navi_it = elm_naviframe_item_push(ug_data->base_naviframe,
300                 IDS_NFC_SECURE_STORAGE_HEADER, NULL, NULL, genlist, NULL);
301         elm_naviframe_item_pop_cb_set(ug_data->base_navi_it,
302                 __destroy_secure_storage_list, ug_data);
303 }
304
305