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://floralicense.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-forwarding.h"
23 #include "cst-forwarding-ime.h"
24 #include "cst-widget.h"
25 #include "cst-common.h"
26 #include "cst-tapi-request.h"
30 CST_CF_ALWAYS_SEL = 0,
32 CST_CF_IF_NO_REPLY_SEL,
33 CST_CF_IF_OUT_OF_REACH_SEL,
34 CST_CF_FORWARD_TO_TEXT,
35 CST_CF_WAITING_TIME_SEL,
41 Elm_Genlist_Item_Class *itc_2text_1icon;
42 Elm_Genlist_Item_Class *itc_1text;
43 Elm_Genlist_Item_Class *itc_forwarding;
44 Elm_Genlist_Item_Class *itc_forward_to;
45 Elm_Genlist_Item_Class *itc_waiting_time;
46 Elm_Genlist_Item_Class *itc_waiting_time_expand;
47 Evas_Object *ec_item[3];
48 Evas_Object *onoff_screen_genlist;
49 CstGlItemData_t *cf_sel_item;
50 CstGlItemData_t *forwarding_item;
51 CstGlItemData_t *forwardto_item;
52 CstGlItemData_t *waitingtime_item;
53 Evas_Object *waitingtime_radio_btn;
54 int cf_wait_time_index;
56 } CstCallForward_info_t;
58 static void __cst_on_click_cf_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info);
59 static void __cst_on_click_voice_cf(void *data, Evas *evas, Evas_Object *obj, void *event_info);
60 static void __cst_gl_cf_onoff_waitingtime_sel(void *data, Evas_Object *obj, void *event_info);
61 static void __cst_gl_cf_onoff_forwardto_sel(void *data, Evas_Object *obj, void *event_info);
62 static void __cst_gl_cf_onoff_screen_show_remove_forwardto_item(Eina_Bool show_item, char *number);
63 static void __cst_gl_cf_onoff_screen_show_remove_waitingtime_item(Eina_Bool show_item);
64 static void __cst_gl_on_click_waitingtime_expand(void *data, Evas *evas, Evas_Object *obj, void *event_info);
65 static void __cst_gl_collapse_req(void *data, Evas_Object *obj, void *event_info);
66 static void __cst_gl_collapse(int selected_time, Evas_Object *obj, void *event_info);
67 static void __cst_gl_expand_req(void *data, Evas_Object *obj, void *event_info);
68 static void __cst_gl_expand(void *data, Evas_Object *obj, void *event_info);
69 static void __cst_gl_sel_waiting_time(void *data, Evas_Object *obj, void *event_info);
70 static void __cst_update_wait_time_and_index(int wait_time_index, int wait_time);
71 static void __cst_gl_update_waiting_time_ss_request(void);
72 static void __cst_update_cf_onoff_screen_state(int call_type, int cf_flavour, Eina_Bool cf_state, char *number, int error, int req_action, void *data, int waiting_time);
73 static void __cst_on_click_cf_onoff_forward_to(void *data, Evas *evas, Evas_Object *obj, void *event_info);
74 static void __cst_cf_destroy_genlist_item_class(void);
75 static void __cst_on_click_cf_voice_video_back_button(void *data, Evas_Object *obj, void *event_info);
77 static CstCallForward_info_t cst_forward_data = {0, };
79 static CstGlItemDisplayInfo_t list_call_type[] = {
80 {1, CST_STR_VOICECALL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, __cst_on_click_voice_cf},
82 {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
85 static CstGlItemDisplayInfo_t list_call_forwarding[] = {
86 {1, CST_STR_ALWAYS, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_2TEXT_ONOFF_PROGRESS, __cst_on_click_cf_onoff_forward_to},
87 {1, CST_STR_IF_BUSY, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_2TEXT_ONOFF_PROGRESS, __cst_on_click_cf_onoff_forward_to},
88 {1, CST_STR_IF_NO_REPLY, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_2TEXT_ONOFF_PROGRESS, __cst_on_click_cf_onoff_forward_to},
89 {1, CST_STR_IF_OUT_OF_REACH, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_2TEXT_ONOFF_PROGRESS, __cst_on_click_cf_onoff_forward_to},
91 {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
94 static CstGlItemDisplayInfo_t list_call_forwarding_status[] = {
95 {1, CST_STR_FORWARDING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_1TEXT_ONOFF, __cst_on_click_cf_onoff},
96 {1, CST_STR_FORWARD_TO, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_2TEXT, __cst_on_click_cf_onoff_forward_to},
97 {1, CST_STR_WAITING_TIME, ELM_GENLIST_ITEM_TREE, CST_GL_ITEM_2TEXT_EXPANDABLE, __cst_gl_on_click_waitingtime_expand},
99 {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
102 static CstGlItemDisplayInfo_t list_call_forwarding_dep2_waiting_time[] = {
103 {2, CST_STR_WAITING_TIME_5_SEC, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CF_WAIT_TIME_IDX_5_SEC},
104 {2, CST_STR_WAITING_TIME_10_SEC, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CF_WAIT_TIME_IDX_10_SEC},
105 {2, CST_STR_WAITING_TIME_15_SEC, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CF_WAIT_TIME_IDX_15_SEC},
106 {2, CST_STR_WAITING_TIME_20_SEC, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CF_WAIT_TIME_IDX_20_SEC},
107 {2, CST_STR_WAITING_TIME_25_SEC, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CF_WAIT_TIME_IDX_25_SEC},
108 {2, CST_STR_WAITING_TIME_30_SEC, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CF_WAIT_TIME_IDX_30_SEC},
110 {2, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
113 static gboolean keypad_enabled = EINA_FALSE;
115 static void __cst_cf_destroy_genlist_item_class(void)
117 ENTER(__cst_cf_destroy_genlist_item_class);
118 DBG("\n\n *** Testing: CF screen *** \n\n");
120 if (cst_forward_data.itc_2text_1icon) {
121 elm_genlist_item_class_free(cst_forward_data.itc_2text_1icon);
122 cst_forward_data.itc_2text_1icon = NULL;
124 if (cst_forward_data.itc_1text) {
125 elm_genlist_item_class_free(cst_forward_data.itc_1text);
126 cst_forward_data.itc_1text = NULL;
128 if (cst_forward_data.itc_forwarding) {
129 elm_genlist_item_class_free(cst_forward_data.itc_forwarding);
130 cst_forward_data.itc_forwarding = NULL;
132 if (cst_forward_data.itc_forward_to) {
133 elm_genlist_item_class_free(cst_forward_data.itc_forward_to);
134 cst_forward_data.itc_forward_to = NULL;
136 if (cst_forward_data.itc_waiting_time) {
137 elm_genlist_item_class_free(cst_forward_data.itc_waiting_time);
138 cst_forward_data.itc_waiting_time = NULL;
140 if (cst_forward_data.itc_waiting_time_expand) {
141 elm_genlist_item_class_free(cst_forward_data.itc_waiting_time_expand);
142 cst_forward_data.itc_waiting_time_expand = NULL;
146 static void __cst_on_click_cf_back_button(void *data, Evas_Object *obj, void *event_info)
148 ENTER(__cst_on_click_cf_back_button);
150 __cst_on_click_cf_voice_video_back_button(data, obj, event_info);
151 __cst_cf_destroy_genlist_item_class();
154 static void __cst_on_click_cf_voice_video_back_button(void *data, Evas_Object *obj, void *event_info)
156 ENTER(__cst_on_click_cf_voice_video_back_button);
158 retm_if(data == NULL, "NULL UgData");
160 CstUgData_t *ugd = (CstUgData_t *)data;
162 ugd->back_button = _cst_get_navifr_prev_btn(ugd->nf);
163 _cst_cancel_all_ss_request(ugd);
166 static void __cst_update_cf_state(int call_type, int cf_flavour,
167 Eina_Bool cf_state, char *number,
168 int error, int req_action, void *data, int waiting_time)
170 ret_if(NULL == data);
171 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
172 CstUgData_t *ugd = item_data->ugd;
173 ret_if((call_type != ugd->call_type && call_type != CST_CALLTYPE_ALL));
174 DBG("call_type=%d (0:voice 1:video)", call_type);
175 DBG("cf_flavour=%d item_data->index=%d(0:CFU 1:CFB 2:CFNR 3:CFOR)", cf_flavour, item_data->index);
176 DBG("cf_state=%d (1:on 0:off)", cf_state);
177 DBG("number=%s, error=%d", number, error);
178 DBG("req_action=%d(0: Act, 1:Deact, 2:Query)", req_action);
179 DBG("waiting_time=%d", waiting_time);
181 if (cf_flavour == CST_SSTYPE_CF_NO_REPLY) { /* If no reply then update the Waiting time */
182 cst_forward_data.cf_wait_time = waiting_time;
185 if (error == CST_ERROR_NONE) {
186 if (cf_state == EINA_TRUE) {
187 ugd->cf_state[item_data->index] = CST_SS_STATE_ON;
188 if (strlen(number) > 0) {
189 snprintf(item_data->number, sizeof(item_data->number), "%s", number);
191 snprintf(item_data->number, sizeof(item_data->number), "%s", T_(CST_STR_UNKNOWN));
194 strcpy(item_data->number, "");
195 ugd->cf_state[item_data->index] = CST_SS_STATE_OFF;
197 elm_genlist_item_update(item_data->gl_item);
199 if (req_action != CST_ACTION_QUERY) {
200 if (error != CST_ERROR_SERVICE_UNAVAILABLE &&
201 error != CST_ERROR_REJECTED_BY_NETWORK &&
202 error != CST_ERROR_UNKNOWN) {
203 DBG("User error : %d(Restore previous state)", error);
204 if (req_action == CST_ACTION_DEACTIVATE) {
205 ugd->cf_state[item_data->index] = CST_SS_STATE_ON;
207 ugd->cf_state[item_data->index] = CST_SS_STATE_OFF;
210 DBG("Network error : %d", error);
211 if ((strlen(item_data->number) > 0) &&
212 (strncmp(item_data->number, T_(CST_STR_UNKNOWN), strlen(T_(CST_STR_UNKNOWN))) != 0)) {
213 ugd->cf_state[item_data->index] = CST_SS_STATE_ON;
215 ugd->cf_state[item_data->index] = CST_SS_STATE_OFF;
218 elm_genlist_item_update(item_data->gl_item);
219 ugd->popup = (Evas_Object *)_cst_create_error_popup(ugd->nf, error);
220 evas_object_show(ugd->popup);
222 ugd->cf_state[item_data->index] = CST_SS_STATE_OFF;
223 elm_genlist_item_update(item_data->gl_item);
226 __cst_update_cf_onoff_screen_state(call_type, cf_flavour, cf_state, number, error, req_action, data, waiting_time);
230 static void __cst_update_cf_onoff_screen_state(int call_type, int cf_flavour, Eina_Bool cf_state, char *number, int error, int req_action, void *data, int waiting_time)
232 ret_if(NULL == data);
233 ret_if(cst_forward_data.onoff_screen_genlist == NULL);
234 ret_if(cst_forward_data.forwarding_item == NULL);
235 ret_if(cst_forward_data.forwardto_item == NULL);
236 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
238 ENTER(__cst_update_cf_onoff_screen_state);
239 if ((cf_flavour != item_data->index) || (req_action == CST_ACTION_QUERY)
240 || (cf_flavour != cst_forward_data.forwarding_item->index)) { /* Ensuring the response is for the requested item only */
244 if (error == CST_ERROR_NONE) {
245 if (cf_state == EINA_TRUE) {
246 if (strlen(number) > 0) {
247 snprintf(cst_forward_data.forwarding_item->number, sizeof(cst_forward_data.forwarding_item->number), "%s", number);
249 snprintf(cst_forward_data.forwarding_item->number, sizeof(cst_forward_data.forwarding_item->number), "%s", T_(CST_STR_UNKNOWN));
252 __cst_gl_cf_onoff_screen_show_remove_forwardto_item(EINA_TRUE, number);
253 if (cf_flavour == CST_SSTYPE_CF_NO_REPLY) { /* If no reply then show the Waiting time item also */
254 __cst_gl_cf_onoff_screen_show_remove_waitingtime_item(EINA_TRUE);
255 if (waiting_time > 0) {
256 cst_forward_data.cf_wait_time = waiting_time;
257 __cst_update_wait_time_and_index(CST_CF_WAIT_TIME_IDX_NONE, cst_forward_data.cf_wait_time);
261 strcpy(cst_forward_data.forwarding_item->number, "");
262 __cst_gl_cf_onoff_screen_show_remove_forwardto_item(EINA_FALSE, NULL);
263 if (cf_flavour == CST_SSTYPE_CF_NO_REPLY) { /* If no reply then show the Waiting time item also */
264 __cst_gl_cf_onoff_screen_show_remove_waitingtime_item(EINA_FALSE);
268 elm_genlist_item_update(cst_forward_data.forwarding_item->gl_item);
272 static void __cst_query_cf_status(CstGlItemData_t *item_data)
274 ret_if(NULL == item_data);
275 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
278 ugd->original_state = EINA_FALSE;
279 switch (item_data->index) {
281 cf_flavour = CST_SSTYPE_CF_UNCONDITIONAL;
282 DBG("CST_SSTYPE_CF_UNCONDITIONAL");
285 cf_flavour = CST_SSTYPE_CF_BUSY;
286 DBG("CST_SSTYPE_CF_BUSY");
289 cf_flavour = CST_SSTYPE_CF_NO_REPLY;
290 DBG("CST_SSTYPE_CF_NO_REPLY");
293 cf_flavour = CST_SSTYPE_CF_NOT_REACHABLE;
294 DBG("CST_SSTYPE_CF_NOT_REACHABLE");
300 _cst_add_ss_request(&ugd->req_queue, CST_ACTION_QUERY,
301 ugd->call_type, cf_flavour, NULL,
302 __cst_update_cf_state, item_data, -1, ugd);
305 static void __cst_on_click_cf_ime_done_btn(void *data, Evas_Object *obj, void *event_info)
307 ENTER(__cst_on_click_cf_ime_done_btn);
310 CallSettingSSReq_t *req = (CallSettingSSReq_t *)data;
311 CstGlItemData_t *item_data = (CstGlItemData_t *)req->data;
312 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
313 Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(ugd->dg_entry);
314 char buffer[CST_MAX_PHONE_NUMBER_LEN];
317 ecore_imf_context_input_panel_event_callback_del(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _cst_call_forwarding_input_panel_event_callback);
318 ecore_imf_context_input_panel_enabled_set(imf_context, EINA_FALSE);
320 evas_object_smart_callback_del(ugd->dg_entry, "changed", _cst_call_forward_entry_changed_cb);
321 evas_object_smart_callback_del(ugd->dg_entry, "preedit,changed", _cst_call_forward_entry_changed_cb);
323 _cst_cf_ime_destroy_genlist_item_class();
325 keypad_enabled = EINA_FALSE;
327 if (_cst_get_input_number(buffer, ugd) > 0) {
328 ugd->cf_state[item_data->index] = CST_SS_STATE_PROGRESS;
329 elm_genlist_item_update(item_data->gl_item);
330 DBG("activate CF num=%s", buffer);
331 snprintf(req->number, CST_MAX_PHONE_NUMBER_LEN, "%s", buffer);
332 cst_forward_data.cf_wait_time = _cst_cf_ime_fetch_latest_wait_time();
333 _cst_add_ss_request(&ugd->req_queue, req->action,
334 req->call_type, req->flavour, req->number,
335 __cst_update_cf_state, item_data, cst_forward_data.cf_wait_time, ugd);
336 memset(ugd->c_item, 0, sizeof(ugd->c_item));
337 /* ecore_timer_add(CST_NAVIFRAME_ITEM_POP_TIMER, _cst_naviframe_item_pop_cb, ugd);
339 _cst_naviframe_item_pop_cb(ugd);
345 static void __cst_on_click_cf_ime_cancel_btn(void *data, Evas_Object *obj, void *event_info)
347 ENTER(__cst_on_click_cf_ime_cancel_btn);
350 CallSettingSSReq_t *req = (CallSettingSSReq_t *)data;
351 CstGlItemData_t *item_data = (CstGlItemData_t *)req->data;
352 CstUgData_t *ugd = item_data->ugd;
353 Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(ugd->dg_entry);
355 DBG("original state : %d", req->original_state);
356 if (req->original_state == CST_SS_STATE_ON) {
357 ugd->cf_state[item_data->index] = CST_SS_STATE_ON;
359 ugd->cf_state[item_data->index] = CST_SS_STATE_OFF;
361 elm_genlist_item_update(item_data->gl_item);
364 ecore_imf_context_input_panel_event_callback_del(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _cst_call_forwarding_input_panel_event_callback);
365 ecore_imf_context_input_panel_enabled_set(imf_context, EINA_FALSE);
367 evas_object_smart_callback_del(ugd->dg_entry, "changed", _cst_call_forward_entry_changed_cb);
368 evas_object_smart_callback_del(ugd->dg_entry, "preedit,changed", _cst_call_forward_entry_changed_cb);
370 keypad_enabled = EINA_FALSE;
372 memset(ugd->c_item, 0, sizeof(ugd->c_item));
373 /* ecore_timer_add(CST_NAVIFRAME_ITEM_POP_TIMER, _cst_naviframe_item_pop_cb, ugd);
375 _cst_naviframe_item_pop_cb(ugd);
377 _cst_cf_ime_destroy_genlist_item_class();
382 static char *__cst_gl_label_get_cf(void *data, Evas_Object *obj, const char *part)
384 retv_if(NULL == data, NULL);
385 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
386 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
389 if (strcmp(part, "elm.text.1") == 0) {
390 if (list_call_forwarding[item_data->index].str_id != -1) {
391 ret = strdup(T_(list_call_forwarding[item_data->index].str_id));
393 } else if (strcmp(part, "elm.text.2") == 0) {
394 switch (ugd->cf_state[item_data->index]) {
395 case CST_SS_STATE_PROGRESS:
396 case CST_SS_STATE_OFF:
397 ret = strdup(T_(CST_STR_DEACTIVATED));
400 case CST_SS_STATE_ON:
401 if (list_call_forwarding[item_data->index].str_id ==
402 CST_STR_IF_NO_REPLY) {
403 char disp_arr[50] = {0, };
404 int waiting_time_str_id = CST_STR_WAITING_TIME_25_SEC;
405 switch (cst_forward_data.cf_wait_time) {
407 waiting_time_str_id = CST_STR_WAITING_TIME_5_SEC;
410 waiting_time_str_id = CST_STR_WAITING_TIME_10_SEC;
413 waiting_time_str_id = CST_STR_WAITING_TIME_15_SEC;
416 waiting_time_str_id = CST_STR_WAITING_TIME_20_SEC;
419 waiting_time_str_id = CST_STR_WAITING_TIME_25_SEC;
422 waiting_time_str_id = CST_STR_WAITING_TIME_30_SEC;
425 ERR("Invalid waiting time: %d", cst_forward_data.cf_wait_time);
426 ret = strdup(item_data->number);
428 snprintf(disp_arr, sizeof(disp_arr), "%s, %s", item_data->number,
429 T_(waiting_time_str_id));
430 ret = strdup(disp_arr);
432 ret = strdup(item_data->number);
445 static void __cst_gl_del_cf(void *data, Evas_Object *obj)
447 ret_if(NULL == data);
448 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
455 static void __cst_update_change_cf_req(CstGlItemData_t *item_data, Eina_Bool req_state)
457 ret_if(NULL == item_data);
458 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
460 Elm_Object_Item *navi_it;
462 CallSettingSSReq_t *req = NULL;
463 req = (CallSettingSSReq_t *)calloc(1, sizeof(CallSettingSSReq_t));
467 req->data = item_data;
468 req->call_type = ugd->call_type;
469 req->flavour = item_data->index;
470 DBG("req->flavour = %d", req->flavour);
472 ugd->original_state = !req_state;
473 if (req_state == EINA_TRUE) {
474 req->action = CST_ACTION_ACTIVATE;
475 char *edit_string = NULL;
476 Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
477 if (check_state == EINA_TRUE) {
478 req->original_state = CST_SS_STATE_ON;
479 edit_string = item_data->number;
481 req->original_state = CST_SS_STATE_OFF;
483 eo = _cst_create_cf_ime(ugd->nf, edit_string,
484 cst_forward_data.cf_wait_time, req->flavour, (void *)ugd);
486 _cst_remove_naviframe(ugd->nf);
487 navi_it = elm_naviframe_item_push(ugd->nf,
488 T_(CST_STR_FORWARD_TO), NULL, NULL, eo, NULL);
489 elm_object_item_data_set(navi_it, req);
491 ugd->cf_state[item_data->index] = CST_SS_STATE_PROGRESS;
492 elm_genlist_item_update(item_data->gl_item);
493 _cst_add_ss_request(&ugd->req_queue, CST_ACTION_DEACTIVATE,
494 ugd->call_type, req->flavour, NULL,
495 __cst_update_cf_state, item_data, -1, ugd);
500 static void __cst_on_click_cf_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info)
502 ret_if(NULL == data);
503 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
504 CstUgData_t *ugd = item_data->ugd;
506 if (ugd->cf_state[cst_forward_data.forwarding_item->index] == CST_SS_STATE_PROGRESS) { /* Ignore as another SS request is already active */
510 Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
511 __cst_update_change_cf_req(item_data, !check_state);
514 static void __cst_on_click_cf_onoff_forward_to(void *data, Evas *evas, Evas_Object *obj, void *event_info)
516 ret_if(NULL == data);
517 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
519 __cst_update_change_cf_req(item_data, EINA_TRUE);
522 static void __cst_gl_sel_cf(void *data, Evas_Object *obj, void *event_info)
524 ret_if(data == NULL);
525 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
526 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
527 if (list_call_forwarding[item_data->index].func) {
528 list_call_forwarding[item_data->index].func((void *)item_data, NULL, obj, event_info);
533 static void __cst_on_changed_cf_check(void *data, Evas_Object *obj, void *event_info)
535 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
537 Eina_Bool check_state = elm_check_state_get(obj);
538 if (elm_object_item_disabled_get(item_data->gl_item) == EINA_TRUE) {
539 elm_check_state_set(obj, !check_state);
542 elm_check_state_set(obj, !check_state);
543 __cst_update_change_cf_req(item_data, check_state);
546 static Evas_Object *__cst_gl_icon_get_cf(void *data, Evas_Object *obj, const char *part)
548 ENTER(__cst_gl_icon_get_cf);
549 retv_if(NULL == data, NULL);
550 Evas_Object *icon = NULL;
551 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
552 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
553 Eina_Bool check_state = EINA_FALSE;
555 if (!strcmp(part, "elm.icon")) {
556 switch (ugd->cf_state[item_data->index]) {
557 case CST_SS_STATE_ON:
558 case CST_SS_STATE_OFF:
559 DBG("ugd->cf_state : %d(%d)",
560 ugd->cf_state[item_data->index], item_data->index);
561 if (ugd->cf_state[item_data->index] == CST_SS_STATE_ON) {
562 check_state = EINA_TRUE;
564 item_data->eo_check = icon = _cst_create_onoff_button(obj, check_state,
565 __cst_on_changed_cf_check, item_data);
567 case CST_SS_STATE_PROGRESS:
568 icon = _cst_create_progressbar(obj);
577 static Evas_Object *__cst_create_genlist_cf(void *data)
579 retv_if(NULL == data, NULL);
580 CstUgData_t *ugd = (CstUgData_t *)data;
582 Evas_Object *genlist;
583 CstGlItemData_t *item_data;
585 cst_forward_data.itc_2text_1icon->item_style = "dialogue/2text.1icon.6";
586 cst_forward_data.itc_2text_1icon->func.text_get = __cst_gl_label_get_cf;
587 cst_forward_data.itc_2text_1icon->func.content_get = __cst_gl_icon_get_cf;
588 cst_forward_data.itc_2text_1icon->func.state_get = NULL;
589 cst_forward_data.itc_2text_1icon->func.del = __cst_gl_del_cf;
591 genlist = elm_genlist_add(ugd->nf);
593 _cst_create_genlist_separator(genlist, EINA_FALSE);
594 for (index = 0; list_call_forwarding[index].style != CST_GL_ITEM_NONE; ++index) {
595 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
596 retv_if(item_data == NULL, NULL);
597 item_data->index = index;
598 item_data->ugd = ugd;
599 if (list_call_forwarding[index].style == CST_GL_ITEM_2TEXT_ONOFF_PROGRESS) {
600 ugd->cf_state[index] = CST_SS_STATE_PROGRESS;
601 item_data->gl_item = elm_genlist_item_append(genlist, cst_forward_data.itc_2text_1icon,
602 (const void *)item_data, NULL, list_call_forwarding[index].flags,
603 __cst_gl_sel_cf, item_data);
604 __cst_query_cf_status(item_data);
611 ugd->cf_gl_item[index] = item_data->gl_item;
613 _cst_create_genlist_separator_no_line(genlist);
618 static void __cst_on_click_voice_cf(void *data, Evas *evas, Evas_Object *obj, void *event_info)
620 ENTER(__cst_on_click_voice_cf);
621 ret_if(data == NULL);
622 CstUgData_t *ugd = (CstUgData_t *)data;
623 Evas_Object *back_btn = NULL;
624 Elm_Object_Item *navi_it;
626 ugd->call_type = CST_CALLTYPE_VOICE;
629 Evas_Object *genlist = __cst_create_genlist_cf(ugd);
630 navi_it = elm_naviframe_item_push(ugd->nf, T_(CST_STR_VOICE_CALL_FORWARDING),
631 NULL, NULL, genlist, NULL);
632 back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
633 evas_object_smart_callback_add(back_btn, "clicked",
634 __cst_on_click_cf_voice_video_back_button, ugd);
637 static void __cst_gl_sel_call_type(void *data, Evas_Object *obj, void *event_info)
639 ret_if(data == NULL);
640 CstUgData_t *ugd = (CstUgData_t *)data;
641 Elm_Object_Item *item= (Elm_Object_Item *)event_info;
642 int index = (int)elm_object_item_data_get(item);
643 elm_genlist_item_selected_set(item, EINA_FALSE);
645 if (list_call_type[index].func) {
646 list_call_type[index].func((void *)ugd, NULL, obj, event_info);
651 static char *__cst_gl_label_get_call_type(void *data, Evas_Object *obj, const char *part)
653 int index = (int)data;
655 if (strcmp(part, "elm.text") == 0) {
656 if (list_call_type[index].str_id != -1) {
657 return strdup(T_(list_call_type[index].str_id));
663 static Evas_Object *__cst_create_genlist_call_type(void *data)
665 ENTER(__cst_create_genlist_call_type);
666 retv_if(NULL == data, NULL);
667 CstUgData_t *ugd = (CstUgData_t *)data;
668 Evas_Object *genlist;
671 cst_forward_data.itc_2text_1icon = NULL;
672 cst_forward_data.itc_1text = NULL;
673 cst_forward_data.itc_forwarding = NULL;
674 cst_forward_data.itc_forward_to = NULL;
675 cst_forward_data.itc_waiting_time = NULL;
676 cst_forward_data.itc_waiting_time_expand = NULL;
677 cst_forward_data.onoff_screen_genlist = NULL;
678 cst_forward_data.forwardto_item = NULL;
679 cst_forward_data.waitingtime_item = NULL;
680 cst_forward_data.waitingtime_radio_btn = NULL;
681 cst_forward_data.cf_sel_item = NULL;
683 if (!cst_forward_data.itc_2text_1icon) {
684 cst_forward_data.itc_2text_1icon = elm_genlist_item_class_new();
686 if (!cst_forward_data.itc_1text) {
687 cst_forward_data.itc_1text = elm_genlist_item_class_new();
689 if (!cst_forward_data.itc_forwarding) {
690 cst_forward_data.itc_forwarding = elm_genlist_item_class_new();
692 if (!cst_forward_data.itc_forward_to) {
693 cst_forward_data.itc_forward_to = elm_genlist_item_class_new();
695 if (!cst_forward_data.itc_waiting_time) {
696 cst_forward_data.itc_waiting_time = elm_genlist_item_class_new();
698 if (!cst_forward_data.itc_waiting_time_expand) {
699 cst_forward_data.itc_waiting_time_expand = elm_genlist_item_class_new();
702 cst_forward_data.itc_1text->item_style = "dialogue/1text";
703 cst_forward_data.itc_1text->func.text_get = __cst_gl_label_get_call_type;
704 cst_forward_data.itc_1text->func.content_get = NULL;
705 cst_forward_data.itc_1text->func.state_get = NULL;
706 cst_forward_data.itc_1text->func.del = NULL;
708 genlist = elm_genlist_add(ugd->nf);
710 _cst_create_genlist_separator(genlist, EINA_FALSE);
711 for (index = 0; list_call_type[index].style != CST_GL_ITEM_NONE; index++) {
712 elm_genlist_item_append(genlist, cst_forward_data.itc_1text,
713 (const void *)index, NULL, ELM_GENLIST_ITEM_NONE,
714 __cst_gl_sel_call_type, (void *)ugd);
716 _cst_create_genlist_separator_no_line(genlist);
721 static void __cst_gl_cf_onoff_forwardto_sel(void *data, Evas_Object *obj, void *event_info)
723 ret_if(data == NULL);
724 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
725 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
726 if (list_call_forwarding_status[1].func) {
727 list_call_forwarding_status[1].func((void *)item_data, NULL, obj, event_info);
732 static void __cst_gl_cf_onoff_waitingtime_sel(void *data, Evas_Object *obj, void *event_info)
734 ret_if(data == NULL);
735 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
736 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
737 if (list_call_forwarding_status[2].func) {
738 list_call_forwarding_status[2].func((void *)item_data, NULL, obj, event_info);
743 static void __cst_gl_cf_onoff_screen_show_remove_forwardto_item(Eina_Bool show_item, char *number)
745 ENTER(__cst_gl_cf_onoff_screen_show_remove_forwardto_item);
746 ret_if(cst_forward_data.onoff_screen_genlist == NULL);
747 ret_if(cst_forward_data.forwardto_item == NULL);
749 /* Remove the Forwardto item */
750 if (cst_forward_data.forwardto_item->gl_item) {
751 elm_object_item_del(cst_forward_data.forwardto_item->gl_item);
752 cst_forward_data.forwardto_item->gl_item = NULL;
753 strcpy(cst_forward_data.forwardto_item->number, "");
756 if (show_item == EINA_TRUE) {
757 if (strlen(number) > 0) {
758 snprintf(cst_forward_data.forwardto_item->number, sizeof(cst_forward_data.forwardto_item->number), "%s", number);
760 snprintf(cst_forward_data.forwardto_item->number, sizeof(cst_forward_data.forwardto_item->number), "%s", T_(CST_STR_UNKNOWN));
762 cst_forward_data.forwardto_item->gl_item = elm_genlist_item_append(cst_forward_data.onoff_screen_genlist, cst_forward_data.itc_forward_to,
763 (const void *)cst_forward_data.forwardto_item, NULL, list_call_forwarding_status[1].flags,
764 __cst_gl_cf_onoff_forwardto_sel, cst_forward_data.forwardto_item);
768 static void __cst_gl_cf_onoff_screen_show_remove_waitingtime_item(Eina_Bool show_item)
770 ENTER(__cst_gl_cf_onoff_screen_show_remove_waitingtime_item);
771 ret_if(cst_forward_data.onoff_screen_genlist == NULL);
772 ret_if(cst_forward_data.waitingtime_item == NULL);
774 /* Remove the Waiting time item */
775 if (cst_forward_data.waitingtime_item->gl_item) {
776 elm_object_item_del(cst_forward_data.waitingtime_item->gl_item);
777 cst_forward_data.waitingtime_item->gl_item = NULL;
780 if (show_item == EINA_TRUE) {
781 cst_forward_data.waitingtime_item->gl_item = elm_genlist_item_append(cst_forward_data.onoff_screen_genlist, cst_forward_data.itc_waiting_time,
782 (const void *)cst_forward_data.waitingtime_item, NULL, list_call_forwarding_status[2].flags,
783 __cst_gl_cf_onoff_waitingtime_sel, cst_forward_data.waitingtime_item);
787 static void __cst_gl_on_click_waitingtime_expand(void *data, Evas *evas, Evas_Object *obj, void *event_info)
789 ENTER(__cst_gl_on_click_waitingtime_expand);
790 ret_if(NULL == data);
791 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
792 static int selected_waittime = -1;
793 CstUgData_t *ugd = (CstUgData_t *)((CstGlItemData_t *)data)->ugd;
795 if (ugd->cf_state[cst_forward_data.forwarding_item->index] == CST_SS_STATE_PROGRESS) { /* Ignore as another SS request is already active */
799 if (elm_genlist_item_expanded_get(item)) {
800 __cst_gl_collapse_req(data, obj, event_info);
801 __cst_gl_collapse(selected_waittime, obj, event_info);
803 selected_waittime = cst_forward_data.cf_wait_time_index;
804 __cst_gl_expand_req(data, obj, event_info);
805 __cst_gl_expand(data, obj, event_info);
809 static void __cst_gl_collapse_req(void *data, Evas_Object *obj, void *event_info)
811 ENTER(__cst_gl_collapse_req);
812 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
813 elm_genlist_item_expanded_set(item, 0);
816 static void __cst_gl_collapse(int selected_time, Evas_Object *obj, void *event_info)
818 ENTER(__cst_gl_collapse);
819 Elm_Object_Item *item = event_info;
820 elm_genlist_item_subitems_clear(item);
822 if (selected_time != cst_forward_data.cf_wait_time_index) {
823 __cst_update_wait_time_and_index(cst_forward_data.cf_wait_time_index, CST_CF_WAIT_TIME_NONE);
824 __cst_gl_update_waiting_time_ss_request();
828 static void __cst_gl_expand_req(void *data, Evas_Object *obj, void *event_info)
830 ENTER(__cst_gl_expand_req);
831 Elm_Object_Item *item = event_info;
832 elm_genlist_item_expanded_set(item, 1);
835 static void __cst_gl_expand(void *data, Evas_Object *obj, void *event_info)
837 ENTER(__cst_gl_expand);
838 ret_if(NULL == data);
839 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
840 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
841 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
843 Evas_Object *genlist = elm_object_item_widget_get(it);
844 ret_if(NULL == genlist);
845 CstGlItemData_t *sub_item_data;
848 cst_forward_data.waitingtime_radio_btn = NULL;
849 cst_forward_data.waitingtime_radio_btn = elm_radio_add(genlist);
850 elm_radio_value_set(cst_forward_data.waitingtime_radio_btn, -1);
851 for (i = 0; list_call_forwarding_dep2_waiting_time[i].style != CST_GL_ITEM_NONE; ++i) {
852 sub_item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
853 ret_if(sub_item_data == NULL);
854 sub_item_data->index = i;
855 sub_item_data->ugd = ugd;
856 sub_item_data->parent_gl_item = it;
857 elm_genlist_item_append(genlist, cst_forward_data.itc_waiting_time_expand,
858 (const void *)sub_item_data, it,
859 list_call_forwarding_dep2_waiting_time[i].flags,
860 __cst_gl_sel_waiting_time, sub_item_data);
864 static void __cst_gl_update_waiting_time_ss_request(void)
866 ENTER("__cst_gl_update_waiting_time_ss_request");
867 CstGlItemData_t *item_data = (CstGlItemData_t *)cst_forward_data.forwarding_item;
868 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
869 CallSettingSSReq_t *req = NULL;
871 req = (CallSettingSSReq_t *)calloc(1, sizeof(CallSettingSSReq_t));
874 req->data = (void *)item_data->gl_item;
875 req->call_type = ugd->call_type;
876 req->flavour = CST_SSTYPE_CF_NO_REPLY;
877 req->action = CST_ACTION_ACTIVATE;
878 req->original_state = CST_SS_STATE_ON;
879 ugd->cf_state[item_data->index] = CST_SS_STATE_PROGRESS;
880 elm_genlist_item_update(item_data->gl_item);
881 snprintf(req->number, CST_MAX_PHONE_NUMBER_LEN, "%s", cst_forward_data.forwardto_item->number);
882 _cst_add_ss_request(&ugd->req_queue, req->action,
883 req->call_type, req->flavour, req->number,
884 __cst_update_cf_state, cst_forward_data.cf_sel_item, cst_forward_data.cf_wait_time, ugd);
888 static void __cst_gl_sel_waiting_time(void *data, Evas_Object *obj, void *event_info)
890 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
891 ret_if(NULL == data);
892 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
894 cst_forward_data.cf_wait_time_index = (int)list_call_forwarding_dep2_waiting_time[item_data->index].func;
895 if (cst_forward_data.waitingtime_radio_btn) {
896 elm_radio_value_set(cst_forward_data.waitingtime_radio_btn,
897 (int)list_call_forwarding_dep2_waiting_time[item_data->index].func);
898 elm_genlist_item_update(item_data->parent_gl_item);
903 static void __cst_update_wait_time_and_index(int wait_time_index, int wait_time)
905 ENTER(__cst_update_wait_time_and_index);
907 if (wait_time_index != CST_CF_WAIT_TIME_IDX_NONE) { /* Update the waiting time from the index */
908 if (wait_time_index == CST_CF_WAIT_TIME_IDX_5_SEC) {
909 cst_forward_data.cf_wait_time = CST_CF_WAIT_TIME_5_SEC;
910 } else if (wait_time_index == CST_CF_WAIT_TIME_IDX_10_SEC) {
911 cst_forward_data.cf_wait_time = CST_CF_WAIT_TIME_10_SEC;
912 } else if (wait_time_index == CST_CF_WAIT_TIME_IDX_15_SEC) {
913 cst_forward_data.cf_wait_time = CST_CF_WAIT_TIME_15_SEC;
914 } else if (wait_time_index == CST_CF_WAIT_TIME_IDX_20_SEC) {
915 cst_forward_data.cf_wait_time = CST_CF_WAIT_TIME_20_SEC;
916 } else if (wait_time_index == CST_CF_WAIT_TIME_IDX_25_SEC) {
917 cst_forward_data.cf_wait_time = CST_CF_WAIT_TIME_25_SEC;
918 } else if (wait_time_index == CST_CF_WAIT_TIME_IDX_30_SEC) {
919 cst_forward_data.cf_wait_time = CST_CF_WAIT_TIME_30_SEC;
921 } else if (wait_time != CST_CF_WAIT_TIME_NONE) { /* Update the waiting time index from the time */
922 if (wait_time == CST_CF_WAIT_TIME_5_SEC) {
923 cst_forward_data.cf_wait_time_index = CST_CF_WAIT_TIME_IDX_5_SEC;
924 } else if (wait_time == CST_CF_WAIT_TIME_10_SEC) {
925 cst_forward_data.cf_wait_time_index = CST_CF_WAIT_TIME_IDX_10_SEC;
926 } else if (wait_time == CST_CF_WAIT_TIME_15_SEC) {
927 cst_forward_data.cf_wait_time_index = CST_CF_WAIT_TIME_IDX_15_SEC;
928 } else if (wait_time == CST_CF_WAIT_TIME_20_SEC) {
929 cst_forward_data.cf_wait_time_index = CST_CF_WAIT_TIME_IDX_20_SEC;
930 } else if (wait_time == CST_CF_WAIT_TIME_25_SEC) {
931 cst_forward_data.cf_wait_time_index = CST_CF_WAIT_TIME_IDX_25_SEC;
932 } else if (wait_time == CST_CF_WAIT_TIME_30_SEC) {
933 cst_forward_data.cf_wait_time_index = CST_CF_WAIT_TIME_IDX_30_SEC;
937 if (cst_forward_data.waitingtime_item) {
938 elm_genlist_item_update(cst_forward_data.waitingtime_item->gl_item);
943 void _cst_on_click_call_forwarding(void *data, Evas *evas, Evas_Object *obj, void *event_info)
945 ENTER(_cst_on_click_call_forwarding);
946 ret_if(NULL == data);
947 CstUgData_t *ugd = (CstUgData_t *)data;
948 Evas_Object *back_btn = NULL;
949 Elm_Object_Item *navi_it;
951 if (_cst_check_flight_mode()) {
952 ugd->popup = _cst_create_error_popup(ugd->nf,
953 CST_ERROR_CHANGE_FLIGHT_MODE);
954 evas_object_show(ugd->popup);
958 if (!_cst_check_sim_status()) {
959 ugd->popup = _cst_create_error_popup(ugd->nf,
960 CST_ERROR_INSERT_SIM_CARD);
961 evas_object_show(ugd->popup);
965 Evas_Object *genlist = __cst_create_genlist_call_type(ugd);
967 navi_it = elm_naviframe_item_push(ugd->nf, T_(CST_STR_CALL_FORWARDING),
968 NULL, NULL, genlist, NULL);
969 back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
970 evas_object_smart_callback_add(back_btn, "clicked",
971 __cst_on_click_cf_back_button, ugd);
974 void _cst_call_forwarding_input_panel_event_callback(void *data, Ecore_IMF_Context *imf_context, int value)
976 ENTER(_cst_call_forwarding_input_panel_event_callback);
978 CstUgData_t *ugd = (CstUgData_t *)data;
979 Evas_Object *btn = NULL;
980 CallSettingSSReq_t *req = NULL;
981 const char *entry_input = NULL;
983 Elm_Object_Item *top_it = elm_naviframe_top_item_get(ugd->nf);
985 req = (CallSettingSSReq_t *)elm_object_item_data_get(top_it);
988 if (value == ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW) {
992 if (EINA_FALSE == keypad_enabled) {
993 DBG("keypad_enabled = %d", keypad_enabled);
994 keypad_enabled = EINA_TRUE;
996 if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
1002 entry_input = elm_entry_entry_get(ugd->dg_entry);
1003 if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
1004 DBG("ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1006 elm_object_item_part_content_set(top_it, "toolbar_button1", NULL);
1007 elm_object_item_part_content_set(top_it, "toolbar_button2", NULL);
1009 btn = _cst_create_title_btn(ugd->nf, (char *)T_(CST_STR_CANCEL),
1010 __cst_on_click_cf_ime_cancel_btn, (void *)req);
1011 elm_object_item_part_content_set(top_it, "title_right_btn", btn);
1013 btn = _cst_create_title_btn(ugd->nf, (char *)T_(CST_STR_DONE),
1014 __cst_on_click_cf_ime_done_btn, (void *)req);
1015 elm_object_item_part_content_set(top_it, "title_left_btn", btn);
1016 if (entry_input && strlen(entry_input) > 0) {
1017 elm_object_disabled_set(btn, EINA_FALSE);
1019 elm_object_disabled_set(btn, EINA_TRUE);
1021 } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
1022 DBG("ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1023 elm_object_item_part_content_set(top_it, "title_right_btn", NULL);
1024 elm_object_item_part_content_set(top_it, "title_left_btn", NULL);
1025 _cst_create_navi_control_bar(ugd->nf,
1026 (char *)T_(CST_STR_DONE), NULL,
1027 __cst_on_click_cf_ime_done_btn,
1028 (char *)T_(CST_STR_CANCEL), NULL,
1029 __cst_on_click_cf_ime_cancel_btn,
1030 (void *)req, top_it,
1031 cst_forward_data.ec_item);
1032 if (entry_input && strlen(entry_input) > 0) {
1033 elm_object_disabled_set(cst_forward_data.ec_item[0], EINA_FALSE);
1035 elm_object_disabled_set(cst_forward_data.ec_item[0], EINA_TRUE);
1040 void _cst_call_forward_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
1042 DBG("_cst_call_forward_entry_changed_cb calling");
1044 CstUgData_t *ugd = (CstUgData_t *)data;
1045 Evas_Object *btn = NULL;
1046 const char *entry_input = NULL;
1048 Elm_Object_Item *top_it = elm_naviframe_top_item_get(ugd->nf);
1051 entry_input = elm_entry_entry_get(ugd->dg_entry);
1052 if ((btn = elm_object_item_part_content_get(top_it, "title_left_btn")) != NULL) {
1053 if (entry_input && strlen(entry_input) > 0) {
1054 elm_object_disabled_set(btn, EINA_FALSE);
1056 elm_object_disabled_set(btn, EINA_TRUE);
1059 if (entry_input && strlen(entry_input) > 0) {
1060 elm_object_disabled_set(cst_forward_data.ec_item[0], EINA_FALSE);
1062 elm_object_disabled_set(cst_forward_data.ec_item[0], EINA_TRUE);
1067 void _cst_destroy_call_forwarding(void)
1069 ENTER(_cst_destroy_call_forwarding);
1071 __cst_cf_destroy_genlist_item_class();