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