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