8116897df292a67c0678ed4351e26d4bc8f01a28
[platform/core/uifw/autofill.git] / common / autofill_fill_response.c
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
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 #include <stdio.h>
18 #include <stdlib.h>
19 #include <string.h>
20 #include <dlog.h>
21 #include <unistd.h>
22 #include "autofill_private.h"
23 #include <autofill_common.h>
24
25 #ifdef LOG_TAG
26 #undef LOG_TAG
27 #endif
28 #define LOG_TAG "AUTOFILL"
29
30 EXPORT_API int autofill_fill_response_create(autofill_fill_response_h *h)
31 {
32     if (!h)
33         return AUTOFILL_ERROR_INVALID_PARAMETER;
34
35     autofill_fill_response_h ri = (autofill_fill_response_h)calloc(1, sizeof(struct autofill_fill_response_s));
36     if (!ri)
37         return AUTOFILL_ERROR_OUT_OF_MEMORY;
38
39     *h = (autofill_fill_response_h)ri;
40
41     return AUTOFILL_ERROR_NONE;
42 }
43
44 EXPORT_API int autofill_fill_response_destroy(autofill_fill_response_h h)
45 {
46     if (!h)
47         return AUTOFILL_ERROR_INVALID_PARAMETER;
48
49     if (h->view_id) {
50         free(h->view_id);
51         h->view_id = NULL;
52     }
53
54     // Release memory autofill fill response item list
55     autofill_fill_response_group_h it_h;
56     EINA_LIST_FREE(h->autofill_fill_response_group_list, it_h)
57         autofill_fill_response_group_destroy(it_h);
58
59     free(h);
60
61     return AUTOFILL_ERROR_NONE;
62 }
63
64 EXPORT_API int autofill_fill_response_set_app_id(autofill_fill_response_h h, const char *app_id)
65 {
66     if (!h || !app_id)
67         return AUTOFILL_ERROR_INVALID_PARAMETER;
68
69     if (h->app_id) {
70         free(h->app_id);
71     }
72
73     h->app_id = strdup(app_id);
74
75     return AUTOFILL_ERROR_NONE;
76 }
77
78 EXPORT_API int autofill_fill_response_get_app_id(autofill_fill_response_h h, char **app_id)
79 {
80     if (!h || !app_id)
81         return AUTOFILL_ERROR_INVALID_PARAMETER;
82
83     if (!h->app_id)
84         return AUTOFILL_ERROR_OPERATION_FAILED;
85
86     *app_id = strdup(h->app_id);
87
88     return AUTOFILL_ERROR_NONE;
89 }
90
91 EXPORT_API int autofill_fill_response_set_view_id(autofill_fill_response_h h, const char *view_id)
92 {
93     if (!h || !view_id)
94         return AUTOFILL_ERROR_INVALID_PARAMETER;
95
96     if (h->view_id) {
97         free(h->view_id);
98     }
99
100     h->view_id = strdup(view_id);
101
102     return AUTOFILL_ERROR_NONE;
103 }
104
105 EXPORT_API int autofill_fill_response_get_view_id(autofill_fill_response_h h, char **view_id)
106 {
107     if (!h || !view_id)
108         return AUTOFILL_ERROR_INVALID_PARAMETER;
109
110     if (!h->view_id)
111         return AUTOFILL_ERROR_OPERATION_FAILED;
112
113     *view_id = strdup(h->view_id);
114
115     return AUTOFILL_ERROR_NONE;
116 }
117
118 EXPORT_API int autofill_fill_response_add_group(autofill_fill_response_h h, autofill_fill_response_group_h it)
119 {
120     if (!h || !it)
121         return AUTOFILL_ERROR_INVALID_PARAMETER;
122
123     autofill_fill_response_group_h clone;
124     autofill_fill_response_group_clone(it, &clone);
125     if (!clone) {
126         LOGW("Out of memory");
127         return AUTOFILL_ERROR_OUT_OF_MEMORY;
128     }
129
130     h->autofill_fill_response_group_list = eina_list_append(h->autofill_fill_response_group_list, clone);
131
132     return AUTOFILL_ERROR_NONE;
133 }
134
135 EXPORT_API int autofill_fill_response_foreach_groups(autofill_fill_response_h h,
136         bool (*callback)(autofill_fill_response_group_h item, void *user_data), void *user_data)
137 {
138     if (!h || !callback) {
139         return AUTOFILL_ERROR_INVALID_PARAMETER;
140     }
141
142     Eina_List *l;
143     autofill_fill_response_group_h it;
144     EINA_LIST_FOREACH(h->autofill_fill_response_group_list, l, it)
145     {
146         bool ret = callback(it, user_data);
147         if (!ret)
148             break;
149     }
150
151     return AUTOFILL_ERROR_NONE;
152 }
153
154 EXPORT_API int autofill_fill_response_get_group_count(autofill_fill_response_h h, int *count)
155 {
156     if (!h || !count)
157         return AUTOFILL_ERROR_INVALID_PARAMETER;
158
159     *count = eina_list_count(h->autofill_fill_response_group_list);
160
161     return AUTOFILL_ERROR_NONE;
162 }