2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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 #include "ciss-common.h"
18 #include "ciss-widget.h"
19 #include "ciss-util.h"
20 #include "ciss-ussd.h"
24 #define CISS_BUF_LEN 128
25 #define CISS_DEF_FSIZE (24)
26 #define CISS_DEF_FNAME "HelveN_Asia"
28 Evas_Object *_ciss_create_popup(Evas_Object *parent, char *msg)
31 retv_if(msg == NULL, NULL);
32 retv_if(strlen(msg) == 0, NULL);
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);
43 static void __ciss_resp_timeout_cb(void *data, Evas_Object *obj, void *event_info)
46 ciss_appdata_t *ad = (ciss_appdata_t *)data;
48 _ciss_ussd_quit_cb(ad, obj, event_info);
49 _ciss_create_error_popup(ad->win_main, CISS_ERR_UNKNOWN, 2.0, ad);
52 static void __ciss_err_cb(void *data, Evas_Object *obj, void *event_info)
55 ciss_appdata_t *ad = (ciss_appdata_t *)data;
62 Evas_Object *_ciss_create_error_popup(Evas_Object *parent, ciss_err_t ciss_error, double t_timeout, void *data)
66 ciss_appdata_t *ad = (ciss_appdata_t *)data;
67 if (ciss_error == CISS_ERR_NONE)
71 evas_object_del(ad->popup);
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);
94 case CISS_ERR_ILLEGAL_SS_OPER:
95 snprintf(strmsg, 100, "%s", CISS_STR_SERVICE_NOT_AUTHORISED);
97 case CISS_ERR_PW_REGIST_FAIL:
98 case CISS_ERR_NEGATIVE_PW_CHECK:
99 snprintf(strmsg, 100, "%s", CISS_STR_INVALID_PASSWORD);
101 case CISS_ERR_PW_ATTEMPS_VIOLATION: /**<numberOfPW_AttemptsViolation*/
102 snprintf(strmsg, 100, "%s", CISS_STR_PASSWORD_BLOCKED);
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);
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);
115 snprintf(strmsg, 100, "%s", CISS_STR_NETWORK_ERROR);
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);
127 evas_object_show(popup);
133 Evas_Object *_ciss_create_noti_popup(Evas_Object *parent, char *strtitle, char *strmsg, double t_timeout, void *data)
137 Evas_Object *progressbar;
138 retv_if(parent == NULL, NULL);
139 popup = elm_popup_add(parent);
141 elm_object_part_text_set(popup, "title,text", strtitle);
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);
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);
155 evas_object_show(popup);
160 static void __ciss_win_del(void *data, Evas_Object *obj, void *event)
165 Eina_Bool _ciss_on_end_key_down(void *data, int type, void *event)
168 Ecore_Event_Key *ev = event;
170 if (!strcmp(ev->keyname, KEY_END))
176 Evas_Object *_ciss_create_win(const char *name)
181 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
182 retv_if(eo == NULL, NULL);
185 elm_win_alpha_set(eo, EINA_TRUE);
186 elm_win_title_set(eo, name);
187 elm_win_borderless_set(eo, EINA_TRUE);
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);
199 Evas_Object *_ciss_create_layout_main(Evas_Object *parent)
204 retv_if(parent == NULL, NULL);
206 layout = elm_layout_add(parent);
207 retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
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);
217 Evas_Object *_ciss_create_bg(Evas_Object *parent)
219 retv_if(parent == NULL, NULL);
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);
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)
236 retv_if(NULL == parent, NULL);
237 Evas_Object *toolbar = elm_toolbar_add(parent);
238 Elm_Object_Item *item = NULL;
240 retv_if(toolbar == NULL, NULL);
241 retv_if(label1 == NULL, NULL);
243 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
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);
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);
263 c_item[0] = elm_toolbar_item_append(toolbar,
264 NULL, label1, cb1, data);
267 elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
271 Evas_Object *_ciss_create_title_btn(Evas_Object *parent,
272 const char *text, Evas_Smart_Cb func, void *data)
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);
282 static void __ciss_trans_finished(void *data, Evas_Object *obj, void *event_info)
285 elm_naviframe_prev_btn_auto_pushed_set(obj, EINA_TRUE);
286 evas_object_smart_callback_del(obj, "transition,finished", __ciss_trans_finished);
289 void _ciss_remove_naviframe(Evas_Object *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);
297 static char *__ciss_gl_label_get_result(void *data, Evas_Object *obj, const char *part)
299 char *label = (char *)data;
302 return strdup(label);
307 static void __ciss_gl_del_result(void *data, Evas_Object *obj)
309 char *label = (char *)data;
316 Evas_Object * _ciss_create_result_genlist(const char *result_str, int str_len, Evas_Object *nf, void *data)
318 Evas_Object *genlist = elm_genlist_add(nf);
319 retv_if(NULL == genlist, NULL);
320 retv_if(NULL == data, NULL);
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;
329 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
330 char *label = calloc(str_len, sizeof(char));
331 retv_if(label == NULL, NULL);
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,
337 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
342 void _ciss_geinlist_item_class_new(void *data)
344 ret_if(data == NULL);
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();
351 void _ciss_geinlist_item_class_free(void *data)
353 ret_if(data == NULL);
355 ciss_appdata_t *ad = (ciss_appdata_t *)data;
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);
366 void _ciss_create_genlist_separator_no_line(Evas_Object *genlist, void *data)
368 ret_if(NULL == genlist);
369 ret_if(data == NULL);
371 ciss_appdata_t *ad = (ciss_appdata_t *)data;
372 Elm_Object_Item *item = NULL;
374 if (!ad->itc_seperator_no_line)
375 ad->itc_seperator_no_line = elm_genlist_item_class_new();
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;
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);
387 void _ciss_create_genlist_underline(Evas_Object *genlist, void *data)
389 ret_if(NULL == genlist);
390 ret_if(data == NULL);
392 ciss_appdata_t *ad = (ciss_appdata_t *)data;
393 Elm_Object_Item *item = NULL;
395 if (!ad->itc_underline)
396 ad->itc_underline = elm_genlist_item_class_new();
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;
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);