2 * Copyright 2012 Samsung Electronics Co., Ltd
\r
4 * Licensed under the Flora License, Version 1.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.tizenopensource.org/license
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
18 #include "cst-common.h"
\r
19 #include "cst-common-string.h"
\r
20 #include "cst-more-call-setting.h"
\r
21 #include "cst-widget.h"
\r
22 #include "cst-util.h"
\r
23 #include "cst-barring.h"
\r
24 #include "cst-waiting.h"
\r
25 #include "cst-status-tone.h"
\r
26 #include "cst-prefix-dial.h"
\r
28 static Elm_Genlist_Item_Class *itc_1text = NULL;
\r
29 static Elm_Genlist_Item_Class *itc_2text_expand = NULL;
\r
30 static Elm_Genlist_Item_Class *itc_sub_expand = NULL;
\r
31 static Elm_Genlist_Item_Class *itc_help = NULL;
\r
32 static Elm_Genlist_Item_Class *itc_2text = NULL;
\r
34 static void __cst_on_click_expanded(void *data, Evas *evas, Evas_Object *obj, void *event_info);
\r
36 static CstGlItemDisplayInfo_t list_more_call_setting[] = {
\r
37 {1, CST_STR_SHOW_MY_CALLER_ID, ELM_GENLIST_ITEM_TREE, CST_GL_ITEM_EXPANDABLE, __cst_on_click_expanded},
\r
38 {1, CST_STR_CALL_BARRING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_barring},
\r
39 {1, CST_STR_CALL_WAITING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_waiting},
\r
40 {1, CST_STR_DURING_CALL_NOTIFY_ME, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
\r
41 {1, CST_STR_CALL_STATUS_TONES, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_status_tone},
\r
42 {1, CST_STR_EDIT_SOUND_SETTINGS_DURING_CALL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
\r
43 {1, CST_STR_ALERTS_ON_CALL, ELM_GENLIST_ITEM_TREE, CST_GL_ITEM_EXPANDABLE, __cst_on_click_expanded},
\r
44 {1, CST_STR_AUTO_AREA_CODE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_SUB_TEXT, _cst_on_click_prefix_dialling},
\r
45 {1, CST_STR_AUTOMATICALLY_ADD_AREA_CODE_TO_NUMBER_DISPLAY_PANEL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
\r
46 {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
\r
49 static CstGlItemDisplayInfo_t list_dep2_show_my_number[] = {
\r
50 {2, CST_STR_BY_NETWORK, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CLI_BY_NETWORK},
\r
51 {2, CST_STR_SHOW, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CLI_SHOW},
\r
52 {2, CST_STR_HIDE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CLI_HIDE},
\r
53 {2, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
\r
56 static CstGlItemDisplayInfo_t list_dep2_alerts_on_call[] = {
\r
57 {2, CST_STR_OFF, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_ALERTS_ON_CALL_OFF},
\r
58 {2, CST_STR_SOUND, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_ALERTS_ON_CALL_SOUND},
\r
59 {2, CST_STR_VIBRATION, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_ALERTS_ON_CALL_VIBRATION},
\r
60 {2, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
\r
63 static char *__cst_gl_label_get_more_cst(void *data, Evas_Object *obj, const char *part)
\r
65 retv_if(NULL == data, NULL);
\r
66 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
68 if ((strcmp(part, "elm.text") == 0) ||
\r
69 (strcmp(part, "elm.text.1") == 0)) {
\r
70 if (list_more_call_setting[item_data->index].str_id != -1)
\r
71 return strdup(T_(list_more_call_setting[item_data->index].str_id));
\r
72 } else if (!strcmp(part, "elm.text.2")) {
\r
73 if (list_more_call_setting[item_data->index].str_id == CST_STR_AUTO_AREA_CODE) {
\r
75 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, &value);
\r
77 return strdup(_cst_get_prefix_dialling_list(CST_ITEM_1));
\r
79 return strdup(T_(CST_STR_OFF));
\r
85 static void __cst_gl_del_more_cst(void *data, Evas_Object *obj)
\r
87 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
93 static void __cst_gl_sel_more_cst(void *data, Evas_Object *obj, void *event_info)
\r
95 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
\r
96 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
\r
97 CstGlItemData_t *item_data = (CstGlItemData_t *)elm_object_item_data_get(it);
\r
98 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
\r
100 if (list_more_call_setting[item_data->index].func) {
\r
101 if (list_more_call_setting[item_data->index].style == CST_GL_ITEM_1TEXT_ONOFF)
\r
102 list_more_call_setting[item_data->index].func((void *)item_data, NULL, obj, event_info);
\r
104 list_more_call_setting[item_data->index].func((void *)ugd, NULL, obj, event_info);
\r
109 static char *__cst_gl_label_get_expandable(void *data, Evas_Object *obj, const char *part)
\r
111 retv_if(NULL == data, NULL);
\r
112 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
113 if (!strcmp(part, "elm.text.1")) {
\r
114 if (list_more_call_setting[item_data->index].str_id != -1)
\r
115 return strdup(T_(list_more_call_setting[item_data->index].str_id));
\r
116 } else if (!strcmp(part, "elm.text.2")) {
\r
118 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[item_data->index].str_id) {
\r
119 _cst_vconf_get_int(VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT, &value);
\r
120 if (list_dep2_show_my_number[value].str_id != -1)
\r
121 return strdup(T_(list_dep2_show_my_number[value].str_id));
\r
123 _cst_vconf_get_int(VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT, &value);
\r
124 if (list_dep2_alerts_on_call[value].str_id != -1)
\r
125 return strdup(T_(list_dep2_alerts_on_call[value].str_id));
\r
131 static void __cst_gl_sel_show_my_number(void *data, Evas_Object *obj, void *event_info)
\r
133 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
\r
134 ret_if(NULL == data);
\r
135 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
136 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
\r
137 _cst_vconf_set_int(VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT,
\r
138 (int)list_dep2_show_my_number[item_data->index].func);
\r
139 if (ugd->rdg_show_my_number) {
\r
140 elm_radio_value_set(ugd->rdg_show_my_number,
\r
141 (int)list_dep2_show_my_number[item_data->index].func);
\r
142 elm_genlist_item_update(item_data->parent_gl_item);
\r
147 static char *__cst_gl_label_get_sub_exp(void *data, Evas_Object *obj, const char *part)
\r
149 retv_if(NULL == data, NULL);
\r
150 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
151 CstGlItemData_t *parent_item_data = (CstGlItemData_t *)elm_object_item_data_get(item_data->parent_gl_item);
\r
152 if (strcmp(part, "elm.text") == 0) {
\r
153 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[parent_item_data->index].str_id) {
\r
154 return strdup(T_(list_dep2_show_my_number[item_data->index].str_id));
\r
155 } else if (CST_STR_ALERTS_ON_CALL == list_more_call_setting[parent_item_data->index].str_id) {
\r
156 return strdup(T_(list_dep2_alerts_on_call[item_data->index].str_id));
\r
158 DBG("Unknown parent");
\r
165 static Evas_Object *__cst_gl_icon_get_sub_exp(void *data, Evas_Object *obj, const char *part)
\r
167 retv_if(NULL == data, NULL);
\r
168 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
169 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
\r
170 retv_if(NULL == ugd, NULL);
\r
171 CstGlItemData_t *parent_item_data = (CstGlItemData_t *)elm_object_item_data_get(item_data->parent_gl_item);
\r
173 if (!strcmp(part, "elm.icon")) {
\r
174 Evas_Object *radio;
\r
175 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[parent_item_data->index].str_id) {
\r
176 if (NULL == ugd->rdg_show_my_number) {
\r
177 ugd->rdg_show_my_number = elm_radio_add(obj);
\r
178 elm_radio_value_set(ugd->rdg_show_my_number, -1);
\r
181 radio = _cst_create_radio_icon(obj, ugd->rdg_show_my_number,
\r
182 (int)list_dep2_show_my_number[item_data->index].func, 0,
\r
183 VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT);
\r
184 } else if (CST_STR_ALERTS_ON_CALL == list_more_call_setting[parent_item_data->index].str_id) {
\r
185 if (NULL == ugd->rdg_alerts_on_call) {
\r
186 ugd->rdg_show_my_number = elm_radio_add(obj);
\r
187 elm_radio_value_set(ugd->rdg_alerts_on_call, -1);
\r
190 radio = _cst_create_radio_icon(obj, ugd->rdg_alerts_on_call,
\r
191 (int)list_dep2_alerts_on_call[item_data->index].func, 0,
\r
192 VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT);
\r
194 DBG("Unknown parent");
\r
202 static void __cst_gl_sel_alerts_on_call(void *data, Evas_Object *obj, void *event_info)
\r
204 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
\r
205 ret_if(NULL == data);
\r
206 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
\r
207 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
\r
208 ret_if(NULL == ugd);
\r
209 _cst_vconf_set_int(VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT,
\r
210 (int)list_dep2_alerts_on_call[item_data->index].func);
\r
211 if (ugd->rdg_alerts_on_call) {
\r
212 elm_radio_value_set(ugd->rdg_alerts_on_call,
\r
213 (int)list_dep2_alerts_on_call[item_data->index].func);
\r
214 elm_genlist_item_update(item_data->parent_gl_item);
\r
219 static void __cst_gl_con(void *data, Evas_Object *obj, void *event_info)
\r
221 ENTER(__cst_gl_con);
\r
222 Elm_Object_Item *item = event_info;
\r
223 elm_genlist_item_subitems_clear(item);
\r
226 static void __cst_gl_exp_req(void *data, Evas_Object *obj, void *event_info)
\r
228 ENTER(__cst_gl_exp_req);
\r
230 ret_if(NULL == data);
\r
232 Elm_Object_Item *item = event_info;
\r
233 elm_genlist_item_expanded_set(item, 1);
\r
236 static void __cst_gl_con_req(void *data, Evas_Object *obj, void *event_info)
\r
238 ENTER(__cst_gl_con_req);
\r
239 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
\r
240 elm_genlist_item_expanded_set(item, 0);
\r
243 static void __cst_gl_exp(void *data, Evas_Object *obj, void *event_info)
\r
245 ENTER(__cst_gl_exp);
\r
246 ret_if(NULL == data);
\r
247 CstUgData_t *ugd = (CstUgData_t *)data;
\r
248 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
\r
249 ret_if(NULL == it);
\r
250 CstGlItemData_t *parent_item_data1 = (CstGlItemData_t *)elm_object_item_data_get(it);
\r
251 Evas_Object *genlist = elm_object_item_widget_get(it);
\r
252 ret_if(NULL == parent_item_data1);
\r
253 ret_if(NULL == genlist);
\r
255 CstGlItemData_t *sub_item_data;
\r
259 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[parent_item_data1->index].str_id) {
\r
260 ugd->rdg_show_my_number = NULL;
\r
261 ugd->rdg_show_my_number = elm_radio_add(genlist);
\r
262 elm_radio_value_set(ugd->rdg_show_my_number, -1);
\r
263 for (i = 0; list_dep2_show_my_number[i].style != CST_GL_ITEM_NONE; ++i) {
\r
264 sub_item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
\r
265 ret_if(sub_item_data == NULL);
\r
266 sub_item_data->index = i;
\r
267 sub_item_data->ugd = ugd;
\r
268 sub_item_data->parent_gl_item = it;
\r
269 elm_genlist_item_append(genlist, itc_sub_expand,
\r
270 (void *)sub_item_data, it,
\r
271 list_dep2_show_my_number[i].flags,
\r
272 __cst_gl_sel_show_my_number, sub_item_data);
\r
274 } else if (CST_STR_ALERTS_ON_CALL == list_more_call_setting[parent_item_data1->index].str_id) {
\r
275 ugd->rdg_alerts_on_call = NULL;
\r
276 ugd->rdg_alerts_on_call = elm_radio_add(genlist);
\r
277 elm_radio_value_set(ugd->rdg_alerts_on_call, -1);
\r
278 for (i = 0; list_dep2_alerts_on_call[i].style != CST_GL_ITEM_NONE; ++i) {
\r
279 sub_item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
\r
280 ret_if(sub_item_data == NULL);
\r
281 sub_item_data->index = i;
\r
282 sub_item_data->ugd = ugd;
\r
283 sub_item_data->parent_gl_item = it;
\r
284 elm_genlist_item_append(genlist, itc_sub_expand,
\r
285 (void *)sub_item_data, it, list_dep2_alerts_on_call[i].flags,
\r
286 __cst_gl_sel_alerts_on_call, sub_item_data);
\r
291 static void __cst_on_click_expanded(void *data, Evas *evas, Evas_Object *obj, void *event_info)
\r
293 ENTER(__cst_on_click_expanded);
\r
294 ret_if(NULL == data);
\r
295 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
\r
296 if (elm_genlist_item_expanded_get(item)) {
\r
297 __cst_gl_con_req(data, obj, event_info);
\r
298 __cst_gl_con(data, obj, event_info);
\r
300 __cst_gl_exp_req(data, obj, event_info);
\r
301 __cst_gl_exp(data, obj, event_info);
\r
305 static void __cst_navifr_updated_cb(void *data, Evas_Object *obj, void *event_info)
\r
307 ret_if(NULL == data);
\r
308 Elm_Object_Item *item = (Elm_Object_Item *)data;
\r
309 elm_genlist_item_expanded_set(item, 0);
\r
310 elm_genlist_item_subitems_clear(item);
\r
313 static void __cst_set_genlist_item_styles_more_cst(void)
\r
315 ENTER(__cst_set_genlist_item_styles_more_cst);
\r
317 itc_1text = elm_genlist_item_class_new();
\r
318 if (!itc_2text_expand)
\r
319 itc_2text_expand = elm_genlist_item_class_new();
\r
320 if (!itc_sub_expand)
\r
321 itc_sub_expand = elm_genlist_item_class_new();
\r
323 itc_help = elm_genlist_item_class_new();
\r
325 itc_2text = elm_genlist_item_class_new();
\r
327 itc_1text->item_style = "dialogue/1text";
\r
328 itc_1text->func.text_get = __cst_gl_label_get_more_cst;
\r
329 itc_1text->func.content_get = NULL;
\r
330 itc_1text->func.state_get = NULL;
\r
331 itc_1text->func.del = __cst_gl_del_more_cst;
\r
332 itc_2text_expand->item_style = "dialogue/2text.3/expandable";
\r
333 itc_2text_expand->func.text_get = __cst_gl_label_get_expandable;
\r
334 itc_2text_expand->func.content_get = NULL;
\r
335 itc_2text_expand->func.state_get = NULL;
\r
336 itc_2text_expand->func.del = __cst_gl_del_more_cst;
\r
338 itc_help->item_style = "multiline/1text";
\r
339 itc_help->func.text_get = __cst_gl_label_get_more_cst;
\r
340 itc_help->func.content_get = NULL;
\r
341 itc_help->func.state_get = NULL;
\r
342 itc_help->func.del = __cst_gl_del_more_cst;
\r
344 itc_sub_expand->item_style = "dialogue/1text.1icon/expandable2";
\r
345 itc_sub_expand->func.text_get = __cst_gl_label_get_sub_exp;
\r
346 itc_sub_expand->func.content_get = __cst_gl_icon_get_sub_exp;
\r
347 itc_sub_expand->func.state_get = NULL;
\r
348 itc_sub_expand->func.del = __cst_gl_del_more_cst;
\r
350 itc_2text->item_style = "dialogue/2text.3";
\r
351 itc_2text->func.text_get = __cst_gl_label_get_more_cst;
\r
352 itc_2text->func.content_get = NULL;
\r
353 itc_2text->func.state_get = NULL;
\r
354 itc_2text->func.del = __cst_gl_del_more_cst;
\r
357 static Evas_Object *__cst_create_genlist_more_cst(void *data)
\r
359 ENTER(__cst_create_genlist_more_cst);
\r
360 retv_if(NULL == data, NULL);
\r
361 CstUgData_t *ugd = (CstUgData_t *)data;
\r
362 CstGlItemData_t *item_data;
\r
363 Evas_Object *genlist;
\r
366 genlist = elm_genlist_add(ugd->nf);
\r
367 retv_if(NULL == genlist, NULL);
\r
368 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
\r
369 elm_object_style_set(genlist, "dialogue");
\r
371 _cst_create_genlist_separator(genlist, EINA_FALSE);
\r
372 for (i = 0; list_more_call_setting[i].style != CST_GL_ITEM_NONE; ++i) {
\r
373 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
\r
374 retv_if(NULL == item_data, NULL);
\r
376 item_data->index = i;
\r
377 item_data->ugd = ugd;
\r
378 if (list_more_call_setting[i].style == CST_GL_ITEM_TEXT) {
\r
379 item_data->gl_item = elm_genlist_item_append(genlist, itc_1text,
\r
380 (void *)item_data, NULL, list_more_call_setting[i].flags,
\r
381 __cst_gl_sel_more_cst, ugd);
\r
382 } else if (list_more_call_setting[i].style == CST_GL_ITEM_EXPANDABLE) {
\r
383 item_data->gl_item = elm_genlist_item_append(genlist, itc_2text_expand,
\r
384 (void *)item_data, NULL, list_more_call_setting[i].flags,
\r
385 __cst_gl_sel_more_cst, ugd);
\r
386 evas_object_smart_callback_add(ugd->nf, "transition,finished",
\r
387 __cst_navifr_updated_cb, item_data->gl_item);
\r
388 } else if (list_more_call_setting[i].style == CST_GL_ITEM_HELP_TEXT) {
\r
389 item_data->gl_item = elm_genlist_item_append(genlist, itc_help,
\r
390 (void *)item_data, NULL, list_more_call_setting[i].flags,
\r
392 elm_genlist_item_select_mode_set(item_data->gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
\r
393 _cst_create_genlist_underline(genlist);
\r
394 } else if (list_more_call_setting[i].style == CST_GL_ITEM_SUB_TEXT) {
\r
395 item_data->gl_item = elm_genlist_item_append(genlist, itc_2text,
396 (void *)item_data, NULL, list_more_call_setting[i].flags,
\r
397 __cst_gl_sel_more_cst, ugd);
\r
398 ugd->vm_gl_item = item_data->gl_item;
406 _cst_create_genlist_separator_no_line(genlist);
\r
411 void _cst_on_click_more_call_setting(void *data, Evas *evas, Evas_Object *obj, void *event_info)
\r
413 ENTER(_cst_on_click_more_call_setting);
\r
414 ret_if(NULL == data);
\r
415 CstUgData_t *ugd = (CstUgData_t *)data;
\r
417 __cst_set_genlist_item_styles_more_cst();
\r
418 Evas_Object *genlist = __cst_create_genlist_more_cst(ugd);
\r
420 elm_naviframe_item_push(ugd->nf, T_(CST_STR_MORE_CALL_SETTINGS),
\r
421 NULL, NULL, genlist, NULL);
\r