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 <Elementary.h>
19 #include "cst-common-string.h"
20 #include "cst-call-setting.h"
22 #include "cst-waiting.h"
23 #include "cst-widget.h"
24 #include "cst-common.h"
25 #include "cst-tapi-request.h"
28 static Elm_Genlist_Item_Class *itc_1text_1icon = NULL;
29 static Elm_Genlist_Item_Class *itc_help = NULL;
30 static Elm_Object_Item *ec_item[3];
32 static CstGlItemDisplayInfo_t list_call_waiting[] = {
33 {1, CST_STR_CALL_WAITING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_1TEXT_ONOFF_PROGRESS, NULL},
34 {1, CST_STR_DURING_CALL_NOTIFY_ME, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
36 {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
39 static void __cst_on_update_cw_state(int call_type, int flavour,
40 Eina_Bool cw_state, char *number, int error, int req_action, void *data)
42 ENTER(__cst_on_update_cw_state);
44 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
45 ret_if(NULL == item_data->ugd);
46 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
47 ret_if(NULL == item_data->gl_item);
48 DBG("req_action=%d(0: Activate, 1:Deactivate, 2:Query)", req_action);
49 DBG("cw_state=%d(0: off, 1:on), error=%d", cw_state, error);
51 if (error == CST_ERROR_NONE) {
52 if (cw_state == EINA_TRUE)
53 ugd->cw_state = CST_SS_STATE_ON;
55 ugd->cw_state = CST_SS_STATE_OFF;
56 elm_genlist_item_update(item_data->gl_item);
57 elm_object_item_disabled_set(ec_item[0], EINA_TRUE);
59 ugd->cw_state = CST_SS_STATE_OFF;
60 elm_genlist_item_update(item_data->gl_item);
61 if (req_action != CST_ACTION_QUERY) {
62 ugd->popup = (Evas_Object *)_cst_create_error_popup(ugd->nf, error);
63 evas_object_show(ugd->popup);
65 ugd->cw_state = CST_SS_STATE_OFF;
66 elm_genlist_item_update(item_data->gl_item);
67 elm_object_item_disabled_set(item_data->gl_item, EINA_TRUE);
68 elm_object_item_disabled_set(ec_item[0], EINA_FALSE);
73 static void __cst_gl_sel_cw(void *data, Evas_Object *obj, void *event_info)
75 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
76 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
77 CstGlItemData_t *item_data = (CstGlItemData_t *)elm_object_item_data_get(it);
78 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
80 if (ugd->cw_state == CST_SS_STATE_PROGRESS)
83 Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
85 int action = check_state ? CST_ACTION_DEACTIVATE : CST_ACTION_ACTIVATE;
86 ugd->cw_state = CST_SS_STATE_PROGRESS;
87 elm_genlist_item_update(item_data->gl_item);
88 _cst_add_ss_request(&ugd->req_queue, action,
89 CST_CALLTYPE_ALL, CST_SSTYPE_CW, NULL,
90 __cst_on_update_cw_state, item_data);
93 static void __cst_on_changed_cw_check(void *data, Evas_Object *obj, void *event_info)
97 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
98 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
99 int check_state = elm_check_state_get(obj);
101 if (elm_object_item_disabled_get(item_data->gl_item) == EINA_TRUE) {
102 elm_check_state_set(obj, EINA_FALSE);
106 int action = check_state ? CST_ACTION_ACTIVATE : CST_ACTION_DEACTIVATE;
107 ugd->cw_state = CST_SS_STATE_PROGRESS;
108 elm_genlist_item_update(item_data->gl_item);
109 _cst_add_ss_request(&ugd->req_queue, action,
110 CST_CALLTYPE_ALL, CST_SSTYPE_CW, NULL,
111 __cst_on_update_cw_state, item_data);
115 static char *__cst_gl_label_get_cw(void *data, Evas_Object *obj, const char *part)
117 retv_if(NULL == data, NULL);
118 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
120 if ((strcmp(part, "elm.text") == 0) ||
121 (strcmp(part, "elm.text.1") == 0)) {
122 return strdup(T_(list_call_waiting[item_data->index].str_id));
127 static Evas_Object *__cst_gl_icon_get_cw(void *data, Evas_Object *obj, const char *part)
129 retv_if(NULL == data, NULL);
130 Evas_Object *icon = NULL;
131 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
132 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
133 Eina_Bool check_state = EINA_FALSE;
135 if (!strcmp(part, "elm.icon")) {
136 switch (ugd->cw_state) {
137 case CST_SS_STATE_ON:
138 case CST_SS_STATE_OFF:
139 if (ugd->cw_state == CST_SS_STATE_ON)
140 check_state = EINA_TRUE;
141 item_data->eo_check = icon = _cst_create_onoff_button(obj, check_state,
142 __cst_on_changed_cw_check, item_data);
144 case CST_SS_STATE_PROGRESS:
145 icon = _cst_create_progressbar(obj);
154 static void __cst_gl_del_cw(void *data, Evas_Object *obj)
156 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
162 static Evas_Object *__cst_create_genlist_cw(void *data)
164 ENTER(__cst_create_genlist_cw);
165 retv_if(NULL == data, NULL);
166 CstUgData_t *ugd = (CstUgData_t *)data;
168 Evas_Object *genlist;
169 CstGlItemData_t *item_data;
171 genlist = elm_genlist_add(ugd->nf);
173 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
174 _cst_create_genlist_seperator(genlist, EINA_FALSE);
176 if (!itc_1text_1icon)
177 itc_1text_1icon = elm_genlist_item_class_new();
179 itc_help = elm_genlist_item_class_new();
181 itc_1text_1icon->item_style = "dialogue/1text.1icon";
182 itc_1text_1icon->func.text_get = __cst_gl_label_get_cw;
183 itc_1text_1icon->func.content_get = __cst_gl_icon_get_cw;
184 itc_1text_1icon->func.state_get = NULL;
185 itc_1text_1icon->func.del = __cst_gl_del_cw;
187 itc_help->item_style = "multiline/1text";
188 itc_help->func.text_get = __cst_gl_label_get_cw;
189 itc_help->func.content_get = NULL;
190 itc_help->func.state_get = NULL;
191 itc_help->func.del = __cst_gl_del_cw;
193 for (index = 0; list_call_waiting[index].style != CST_GL_ITEM_NONE; ++index) {
194 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
195 ret_if(item_data == NULL);
196 item_data->index = index;
197 item_data->ugd = ugd;
199 if (list_call_waiting[index].style == CST_GL_ITEM_1TEXT_ONOFF_PROGRESS) {
200 item_data->gl_item = elm_genlist_item_append(genlist, itc_1text_1icon,
201 (void *)item_data, NULL, list_call_waiting[index].flags,
202 __cst_gl_sel_cw, item_data);
203 ugd->cw_state = CST_SS_STATE_PROGRESS;
204 _cst_add_ss_request(&ugd->req_queue, CST_ACTION_QUERY,
205 CST_CALLTYPE_ALL, CST_SSTYPE_CW, NULL,
206 __cst_on_update_cw_state, item_data);
207 } else if (list_call_waiting[index].style == CST_GL_ITEM_HELP_TEXT) {
208 item_data->gl_item = elm_genlist_item_append(genlist, itc_help,
209 (void *)item_data, NULL, list_call_waiting[index].flags,
211 elm_genlist_item_select_mode_set(item_data->gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
212 _cst_create_genlist_underline(genlist);
223 static void __cst_on_click_cw_check_status_btn(void *data, Evas_Object *obj, void *event_info)
225 ENTER(__cst_on_click_cw_check_status_btn);
228 Evas_Object *genlist = (Evas_Object *)data;
229 CstGlItemData_t *item_data;
231 Eina_List *realized_list;
235 realized_list = elm_genlist_realized_items_get(genlist);
236 EINA_LIST_FOREACH(realized_list, l, it) {
237 item_data = (CstGlItemData_t *)elm_object_item_data_get(it);
238 if (elm_object_item_disabled_get(it) == EINA_TRUE) {
239 ugd = item_data->ugd;
240 ugd->cw_state = CST_SS_STATE_PROGRESS;
241 _cst_add_ss_request(&ugd->req_queue, CST_ACTION_QUERY,
242 CST_CALLTYPE_ALL, CST_SSTYPE_CW, NULL,
243 __cst_on_update_cw_state, item_data);
244 elm_object_item_disabled_set(it, EINA_FALSE);
245 elm_genlist_item_update(it);
248 elm_object_item_disabled_set(ec_item[0], EINA_TRUE);
251 static void __cst_on_click_cw_back_button(void *data, Evas_Object *obj, void *event_info)
253 ENTER(__cst_on_click_cw_back_button);
254 retm_if(data == NULL, "NULL UgData");
256 CstUgData_t *ugd = (CstUgData_t *)data;
257 _cst_cancel_all_ss_request(ugd);
259 ugd->back_button = _cst_get_navifr_prev_btn(ugd->nf);
262 void _cst_on_click_call_waiting(void *data, Evas *evas, Evas_Object *obj, void *event_info)
264 ENTER(_cst_on_click_call_waiting);
265 CstUgData_t *ugd = (CstUgData_t *)data;
266 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
267 Evas_Object *back_btn = NULL;
270 Elm_Object_Item *navi_it;
272 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) {
276 if (_cst_check_flight_mode()) {
277 ugd->popup = _cst_create_error_popup(ugd->nf,
278 CST_ERROR_CHANGE_FLIGHT_MODE);
279 evas_object_show(ugd->popup);
283 if (!_cst_check_sim_status()) {
284 ugd->popup = _cst_create_error_popup(ugd->nf,
285 CST_ERROR_INSERT_SIM_CARD);
286 evas_object_show(ugd->popup);
290 Evas_Object *genlist = __cst_create_genlist_cw(ugd);
293 layout = elm_layout_add(ugd->nf);
294 elm_layout_file_set(layout, EDJ_NAME, "toolbar");
295 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
296 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
297 elm_object_part_content_set(layout, "elm.swallow.contents", genlist);
298 navi_it = elm_naviframe_item_push(ugd->nf, T_(CST_STR_CALL_WAITING),
299 back_btn, NULL, layout, "1line");
300 back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
301 evas_object_smart_callback_add(back_btn, "clicked",
302 __cst_on_click_cw_back_button, ugd);
303 cbar = _cst_create_navi_control_bar(ugd->nf,
304 (char *)T_(CST_STR_CHECK_STATUS), CST_CTRL_ICON_UPDATE,
305 __cst_on_click_cw_check_status_btn,
307 (void *)genlist, navi_it,
309 ret_if((NULL == cbar) || (NULL == ec_item[0]));
310 elm_object_item_disabled_set(ec_item[0], EINA_TRUE);