2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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 * @file cert-selection.c
18 * @author Janusz Kozerski (j.kozerski@samsung.com)
22 #include <Elementary.h>
28 #include <cert-svc/ccert.h>
29 #include <cert-svc/cinstance.h>
30 #include <cert-svc/ccrl.h>
31 #include <cert-svc/cocsp.h>
32 #include <cert-svc/cpkcs12.h>
33 #include <cert-svc/cstring.h>
35 #include "cert-selection-uigadget.h"
37 #define CERT_MAX_DATA_SIZE 256
39 static CertSvcInstance instance;
40 static CertSvcStringList stringList;
41 static Elm_Genlist_Item_Class itc;
42 static int state_index = 0; //selected radio index
43 static char *selected_name = NULL;
44 static Eina_Bool selected = EINA_FALSE;
45 static Evas_Object *radio_main = NULL;
47 static void _open(void *data, Evas_Object *obj, void *event_info) {
49 LOGD("selected index = %d", state_index);
53 struct ug_data *ad = (struct ug_data*) data;
57 service_create(&service);
58 service_add_extra_data(service, "selected-cert", selected_name);
59 ug_send_result(ad->ug, service);
63 /* bg must delete before starting on_destroy */
66 evas_object_del(ad->bg);
68 ug_destroy_me(ad->ug);
71 static void _cancel(void *data, Evas_Object *obj, void *event_info) {
76 struct ug_data *ad = (struct ug_data*) data;
78 /* bg must delete before starting on_destroy */
81 evas_object_del(ad->bg);
83 ug_destroy_me(ad->ug);
86 static char *_gl_text_get(void *data, Evas_Object *obj, const char *part) {
89 int index = (int) data;
92 if (certsvc_string_list_get_one(stringList, index, &buffer) != CERTSVC_SUCCESS) {
93 return strdup("ERROR WHILE LOADING STRING");
96 char_buffer = strndup(buffer.privateHandler, buffer.privateLength);
97 certsvc_string_free(buffer);
99 if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text")) {
101 } else if (!strcmp(part, "elm.text.2")) {
102 return strdup("example@address.net");
108 static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part) {
110 int index = (int) data;
113 if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
114 radio = elm_radio_add(obj);
115 elm_radio_state_value_set(radio, index);
116 elm_radio_group_add(radio, radio_main);
117 if (index == state_index)
118 elm_radio_value_set(radio, state_index);
119 evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
120 evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
127 static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part) {
136 static void _gl_del(void *data, Evas_Object *obj) {
144 static void _gl_sel(void *data, Evas_Object *obj, void *event_info) {
148 int pkcs_index = (int) data;
150 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
153 index = (int) elm_object_item_data_get(item);
155 elm_genlist_item_update(item);
157 selected = EINA_TRUE;
159 CertSvcString buffer;
160 if (certsvc_string_list_get_one(stringList, pkcs_index, &buffer) != CERTSVC_SUCCESS) {
161 selected = EINA_FALSE;
166 selected_name = malloc((buffer.privateLength+1) * sizeof(char));
167 strncpy(selected_name, buffer.privateHandler, buffer.privateLength);
168 selected_name[buffer.privateLength] = 0;
169 LOGD("SELECTED NAME = %s", selected_name);
170 certsvc_string_free(buffer);
173 void cert_selection_cb(void *data, Evas_Object *obj, void *event_info) {
174 LOGD("cert_selection");
180 struct ug_data *ad = (struct ug_data *) data;
181 Evas_Object *genlist = NULL;
182 Evas_Object *layout = NULL;
183 Evas_Object *toolbar = NULL;
185 layout = elm_layout_add(ad->win_main);
189 toolbar = elm_toolbar_add(layout);
192 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
194 elm_toolbar_item_append(toolbar, NULL, "Open", _open, ad);
195 elm_toolbar_item_append(toolbar, NULL, "Cancel", _cancel, ad);
198 genlist = elm_genlist_add(layout);
200 radio_main = elm_radio_add(genlist);
201 elm_radio_state_value_set(radio_main, 0);
202 elm_radio_value_set(radio_main, 0);
205 // Set genlist item class
206 itc.item_style = "2text.1icon.2";
207 itc.func.text_get = _gl_text_get;
208 itc.func.content_get = _gl_content_get;
209 itc.func.state_get = _gl_state_get;
210 itc.func.del = _gl_del;
212 if (certsvc_instance_new(&instance) == CERTSVC_FAIL) {
213 LOGD("CERTSVC_FAIL");
216 certsvc_pkcs12_get_id_list(instance, &stringList);
220 certsvc_string_list_get_length(stringList, &list_length);
221 for (i = 0; i < list_length; i++) {
222 elm_genlist_item_append(genlist, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, (void*) i);
226 Elm_Object_Item *itm = elm_naviframe_item_push(ad->navi_bar, "Pick Certificate", NULL, NULL, genlist, NULL);
227 elm_object_item_part_content_set(itm, "controlbar", toolbar);
229 LOGD("end of cert_selection");