c0ccd091c739581e3251d56c07cd0e922847c239
[apps/core/preloaded/ciss.git] / src / ciss-widget.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 #include "ciss-common.h"
18 #include "ciss-widget.h"
19 #include "ciss-util.h"
20 #include <utilX.h>
21 #include <Ecore_X.h>
22
23 #define CISS_BUF_LEN            128
24 #define CISS_DEF_FSIZE          (24)
25 #define CISS_DEF_FNAME          "HelveN_Asia"
26
27 Evas_Object *_ciss_create_popup(Evas_Object *parent, char *msg)
28 {
29         DBG("Enter");
30         retv_if(msg == NULL, NULL);
31         retv_if(strlen(msg) == 0, NULL);
32         Evas_Object *popup;
33         popup = elm_popup_add(parent);
34         elm_object_part_text_set(popup, "title,text", CISS_STR_INFORMATION);
35         elm_popup_timeout_set(popup, 1.5);
36         elm_object_text_set(popup, msg);
37         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
38
39         return popup;
40 }
41
42 static void __ciss_resp_timeout_cb(void *data, Evas_Object *obj, void *event_info)
43 {
44         DBG("Enter");
45         struct appdata *ad = (struct appdata *)data;
46
47         _ciss_create_error_popup(ad->win_main, CISS_ERR_UNKNOWN, 2.0, ad);
48 }
49
50 static void __ciss_err_cb(void *data, Evas_Object *obj, void *event_info)
51 {
52         DBG("Enter");
53         struct appdata *ad = (struct appdata *)data;
54
55         evas_object_del(obj);
56         ad->popup = NULL;
57         elm_exit();
58 }
59
60 Evas_Object *_ciss_create_error_popup(Evas_Object *parent, ciss_err_t ciss_error, double t_timeout, void *data)
61 {
62         DBG("Enter");
63         Evas_Object *popup;
64         struct appdata *ad = (struct appdata *)data;
65         if (ciss_error == CISS_ERR_NONE)
66                 return NULL;
67         
68         if (ad->popup) {
69                 evas_object_del(ad->popup);
70                 ad->popup = NULL;
71         }
72
73         char strmsg[100];
74         switch (ciss_error) {
75         case CISS_ERR_UNKNOWN_SUBSCRIBER:
76         case CISS_ERR_BEARER_NOT_PROVISIONED:
77         case CISS_ERR_TELESERVICE_NOT_PROVISIONED:
78         case CISS_ERR_CALL_BARRED:
79         case CISS_ERR_ERR_STATUS:
80         case CISS_ERR_NOT_AVAIL:
81         case CISS_ERR_SUBSCRIPTION_VIOLATION:
82         case CISS_ERR_INCOMPATIBILITY:
83         case CISS_ERR_FACILITY_NOT_SUPPORT:
84         case CISS_ERR_SYS_FAILURE:
85         case CISS_ERR_DATA_MISSING:
86         case CISS_ERR_UNEXPECTED_DATA:
87         case CISS_ERR_MPTY_PARTICIPANTS_EXCEED:
88         case CISS_ERR_RESOURCE_NOT_AVAIL:
89         case CISS_ERR_UNKNOWN:
90                 snprintf(strmsg, 100, "%s", CISS_STR_SERVICE_UNAVAILABLE);
91                 break;
92         case CISS_ERR_ILLEGAL_SS_OPER:
93                 snprintf(strmsg, 100, "%s", CISS_STR_SERVICE_NOT_AUTHORISED);
94                 break;
95         case CISS_ERR_PW_REGIST_FAIL:
96         case CISS_ERR_NEGATIVE_PW_CHECK:
97                 snprintf(strmsg, 100, "%s", CISS_STR_INVALID_PASSWORD);
98                 break;
99         case CISS_ERR_PW_ATTEMPS_VIOLATION:     /**<numberOfPW_AttemptsViolation*/
100                 snprintf(strmsg, 100, "%s", CISS_STR_PASSWORD_BLOCKED);
101                 break;
102         case CISS_ERR_NETWORK_API_FAILED:       /**<Telephony API call failed*/
103         case CISS_ERR_DIVERT_TO_EMERGENCY_BLOCKED:      /**<Call diverting to an emergency number not allowed*/
104                 snprintf(strmsg, 100, "%s", CISS_STR_REJECTED_BY_NETWORK);
105                 break;
106          /* Call barring password mismatch errors */
107         case CISS_ERR_CB_PWD_TOO_SORT:  /**<Password is too short - less than 4 characters*/
108         case CISS_ERR_CB_PWD_MISMATCH:  /**<Password do not match - unequal password*/
109         case CISS_ERR_CB_PWD_TOO_LONG:  /**<Password is too long - greater than 4 characters*/
110                 snprintf(strmsg, 100, "%s", CISS_STR_INVALID_PASSWORD);
111                 break;
112         default:
113                 snprintf(strmsg, 100, "%s", CISS_STR_NETWORK_ERROR);
114                 break;
115         }
116
117         popup = elm_popup_add(parent);
118         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
119         elm_popup_timeout_set(popup, t_timeout);
120         elm_object_text_set(popup, strmsg);
121         elm_object_part_text_set(popup, "title,text", CISS_STR_INFORMATION);
122         evas_object_smart_callback_add(popup, "timeout", __ciss_err_cb, ad);
123         evas_object_smart_callback_add(popup, "block,clicked", __ciss_err_cb, ad);
124
125         evas_object_show(popup);
126         ad->popup = popup;
127
128         return popup;
129 }
130
131 Evas_Object *_ciss_create_noti_popup(Evas_Object *parent, char *strtitle, char *strmsg, double t_timeout, void *data)
132 {
133         DBG("Enter");
134         Evas_Object *popup;
135         Evas_Object *progressbar;
136         retv_if(parent == NULL, NULL);
137         popup = elm_popup_add(parent);
138
139         elm_object_part_text_set(popup, "title,text", strtitle);
140
141         progressbar = elm_progressbar_add(popup);
142         elm_object_style_set(progressbar, "pending_list");
143         elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
144         evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
145         evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
146         elm_progressbar_pulse(progressbar, EINA_TRUE);
147         evas_object_show(progressbar);
148
149         elm_object_content_set(popup, progressbar);
150         elm_popup_timeout_set(popup, t_timeout);
151         evas_object_smart_callback_add(popup, "timeout", __ciss_resp_timeout_cb, data);
152
153         evas_object_show(popup);
154
155         return popup;
156 }
157
158 static void __ciss_win_del(void *data, Evas_Object *obj, void *event)
159 {
160         elm_exit();
161 }
162
163 Eina_Bool _ciss_on_end_key_down(void *data, int type, void *event)
164 {
165         DBG("Enter");
166         Ecore_Event_Key *ev = event;
167
168         if (!strcmp(ev->keyname, KEY_END))
169                 elm_exit();
170
171         return EXIT_FAILURE;
172 }
173
174 Evas_Object *_ciss_create_win(const char *name)
175 {
176         DBG("Enter");
177         Evas_Object *eo;
178         int w, h;
179         eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
180         retv_if(eo == NULL, NULL);
181
182         if (eo) {
183                 elm_win_alpha_set(eo, EINA_TRUE);
184                 elm_win_title_set(eo, name);
185                 elm_win_borderless_set(eo, EINA_TRUE);
186                 elm_win_raise(eo);
187                 elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
188                 evas_object_smart_callback_add(eo, "delete,request", __ciss_win_del, NULL);
189                 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
190                 DBG("win w=%d h=%d", w, h);
191                 evas_object_resize(eo, w, h);
192         }
193
194         return eo;
195 }
196
197 Evas_Object *_ciss_create_layout_main(Evas_Object *parent)
198 {
199         DBG("Enter");
200
201         Evas_Object *layout;
202         retv_if(parent == NULL, NULL);
203
204         layout = elm_layout_add(parent);
205         retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
206
207         elm_layout_theme_set(layout, "layout", "application", "default");
208         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209         elm_win_resize_object_add(parent, layout);
210         evas_object_show(layout);
211
212         return layout;
213 }
214
215 Evas_Object *_ciss_create_bg(Evas_Object *parent)
216 {
217         retv_if(parent == NULL, NULL);
218
219         Evas_Object *bg = elm_bg_add(parent);
220         retvm_if(bg == NULL, NULL, "Failed elm_bg_add.\n");
221         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
222         elm_win_resize_object_add(parent, bg);
223         evas_object_show(bg);
224
225         return bg;
226 }
227
228 Evas_Object *_ciss_create_navi_control_bar(Evas_Object *parent,
229                         char *label1, Evas_Smart_Cb cb1,
230                         char *label2, Evas_Smart_Cb cb2,
231                         void *data, Elm_Object_Item *navi_it,
232                         Elm_Object_Item ** c_item)
233 {
234         retv_if(NULL == parent, NULL);
235         Evas_Object *toolbar = elm_toolbar_add(parent);
236         Elm_Object_Item *item = NULL;
237
238         retv_if(toolbar == NULL, NULL);
239         retv_if(label1 == NULL, NULL);
240
241         elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
242
243
244         if (label2) {
245                 item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
246                 elm_object_item_disabled_set(item, EINA_TRUE);
247                 c_item[0] = elm_toolbar_item_append(toolbar,
248                         NULL, label1, cb1, data);
249                 item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
250                 elm_object_item_disabled_set(item, EINA_TRUE);
251                 c_item[1] = elm_toolbar_item_append(toolbar,
252                         NULL, label2, cb2, data);
253         } else {
254                 item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
255                 elm_object_item_disabled_set(item, EINA_TRUE);
256                 item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
257                 elm_object_item_disabled_set(item, EINA_TRUE);
258                 item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
259                 elm_object_item_disabled_set(item, EINA_TRUE);
260
261                 c_item[0] = elm_toolbar_item_append(toolbar,
262                         NULL, label1, cb1, data);
263         }
264
265         elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
266         return toolbar;
267 }
268
269 Evas_Object *_cst_create_title_btn(Evas_Object *parent,
270                 const char *text, Evas_Smart_Cb func, void *data)
271 {
272         Evas_Object *btn = elm_button_add(parent);
273         if (!btn) return NULL;
274         elm_object_style_set(btn, "naviframe/title/default");
275         elm_object_text_set(btn, text);
276         evas_object_smart_callback_add(btn, "clicked", func, data);
277         return btn;
278 }
279
280 static void __ciss_trans_finished(void *data, Evas_Object *obj, void *event_info)
281 {
282         ret_if(NULL == obj);
283         elm_naviframe_prev_btn_auto_pushed_set(obj, EINA_TRUE);
284         evas_object_smart_callback_del(obj, "transition,finished", __ciss_trans_finished);
285 }
286
287 void _ciss_remove_naviframe(Evas_Object *nf)
288 {
289         ret_if(NULL == nf);
290         elm_naviframe_prev_btn_auto_pushed_set(nf, EINA_FALSE);
291         evas_object_smart_callback_add(nf, "transition,finished",
292                 __ciss_trans_finished, NULL);
293 }
294
295 static char *__ciss_gl_label_get_result(void *data, Evas_Object *obj, const char *part)
296 {
297         char *label = (char *)data;
298
299         if (label)
300                 return strdup(label);
301         else
302                 return NULL;
303 }
304
305 static void __ciss_gl_del_result(void *data, Evas_Object *obj)
306 {
307         char *label = (char *)data;
308         if(label)
309                 free(label);
310
311         return;
312 }
313
314 Evas_Object * _ciss_create_result_genlist(const char *result_str, int str_len, Evas_Object *nf, void *data)
315 {
316         Evas_Object *genlist = elm_genlist_add(nf);
317         retv_if(NULL == genlist, NULL);
318         retv_if(NULL == data, NULL);
319
320         struct appdata *ad = (struct appdata *)data;
321         ad->itc_multi_line->item_style = "multiline/1text";
322         ad->itc_multi_line->func.text_get = __ciss_gl_label_get_result;
323         ad->itc_multi_line->func.content_get = NULL;
324         ad->itc_multi_line->func.state_get = NULL;
325         ad->itc_multi_line->func.del = __ciss_gl_del_result;
326
327         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
328         char *label = calloc(str_len, sizeof(char));
329         retv_if(label == NULL, NULL);
330
331         strncpy(label, result_str, str_len - 1);
332         Elm_Object_Item *item = elm_genlist_item_append(genlist, ad->itc_multi_line,
333                 (void *)label, NULL, ELM_GENLIST_ITEM_NONE,
334                 NULL, NULL);
335         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
336
337         return genlist;
338 }
339
340 void _ciss_geinlist_item_class_new(void *data)
341 {
342         ret_if(data == NULL);
343
344         struct appdata *ad = (struct appdata *)data;
345         ad->itc_ime = elm_genlist_item_class_new();
346         ad->itc_multi_line = elm_genlist_item_class_new();
347 }
348
349 void _ciss_geinlist_item_class_free(void *data)
350 {
351         ret_if(data == NULL);
352
353         struct appdata *ad = (struct appdata *)data;
354         if (ad->itc_ime)
355                 elm_genlist_item_class_free(ad->itc_ime);
356         if (ad->itc_multi_line)
357                 elm_genlist_item_class_free(ad->itc_multi_line);
358 }