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.h"
20 #include "cst-common-string.h"
21 #include "cst-call-setting.h"
22 #include "cst-answering.h"
23 #include "cst-widget.h"
26 static void __cst_on_click_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info);
27 static void __cst_on_click_power_key_ends_call(void *data, Evas *evas, Evas_Object *obj, void *event_info);
28 static Elm_Genlist_Item_Class *itc_1text_1icon = NULL;
29 static Elm_Genlist_Item_Class *itc_help = NULL;
31 static CstGlItemDisplayInfo_t list_call_answering[] = {
32 {1, CST_STR_ACCEPT_CALL_BY_HOME_KEY, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_1TEXT_ONOFF, __cst_on_click_onoff},
33 {1, CST_STR_ACCEPT_INCOMING_CALLS_BY_PRESSING_THE_HOME_KEY, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
34 {1, CST_STR_POWER_KEY_ENDS_CALL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_1TEXT_ONOFF, __cst_on_click_power_key_ends_call},
35 {1, CST_STR_PRESS_POWER_KEY_TO_ENDS_CALLS, 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_click_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info)
42 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
43 Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
44 if (CST_STR_ACCEPT_CALL_BY_HOME_KEY == list_call_answering[item_data->index].str_id)
45 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, !check_state);
46 elm_genlist_item_update(item_data->gl_item);
49 static void __cst_on_click_power_key_ends_call(void *data, Evas *evas, Evas_Object *obj, void *event_info)
52 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
53 Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
55 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PROXIMITY_SENSOR_BOOL, &value);
57 if ((check_state == EINA_FALSE) && (value == EINA_FALSE)) {
58 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
61 evas_object_del(ugd->popup);
64 item_data->str_id = CST_STR_UNABLE_TO_SET_POWER_KEY_END_CALL;
65 ugd->popup = _cst_create_2btn_popup(ugd->nf, item_data);
66 evas_object_show(ugd->popup);
69 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, !check_state);
71 elm_genlist_item_update(item_data->gl_item);
74 static void __cst_on_changed_answering_key(void *data, Evas_Object *obj, void *event_info)
76 Eina_Bool check_state;
77 check_state = elm_check_state_get(obj);
79 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, check_state);
82 static void __cst_on_changed_power_key_ends_call(void *data, Evas_Object *obj, void *event_info)
85 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
86 Eina_Bool check_state = elm_check_state_get(obj);
88 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PROXIMITY_SENSOR_BOOL, &value);
90 if ((check_state == EINA_TRUE) && (value == EINA_FALSE)) {
91 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
94 evas_object_del(ugd->popup);
97 item_data->str_id = CST_STR_UNABLE_TO_SET_POWER_KEY_END_CALL;
98 ugd->popup = _cst_create_2btn_popup(ugd->nf, item_data);
99 evas_object_show(ugd->popup);
101 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, check_state);
102 elm_genlist_item_update(item_data->gl_item);
105 static char *__cst_gl_answering_ending_label_get(void *data, Evas_Object *obj, const char *part)
107 retv_if(NULL == data, NULL);
108 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
110 if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
111 if (list_call_answering[item_data->index].str_id != -1)
112 return strdup(T_(list_call_answering[item_data->index].str_id));
117 static Evas_Object *__cst_gl_answering_ending_icon_get(void *data, Evas_Object *obj, const char *part)
119 retv_if(NULL == data, NULL);
120 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
122 if (!strcmp(part, "elm.icon")) {
124 if (CST_STR_ACCEPT_CALL_BY_HOME_KEY == list_call_answering[item_data->index].str_id) {
125 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, &value);
126 item_data->eo_check = _cst_create_onoff_button(obj, value,
127 __cst_on_changed_answering_key, item_data);
128 } else if (CST_STR_POWER_KEY_ENDS_CALL == list_call_answering[item_data->index].str_id) {
129 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, &value);
130 item_data->eo_check = _cst_create_onoff_button(obj, value,
131 __cst_on_changed_power_key_ends_call, item_data);
133 return item_data->eo_check;
138 static void __cst_gl_answering_ending_del(void *data, Evas_Object *obj)
140 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
146 static void __cst_gl_answering_ending_sel(void *data, Evas_Object *obj, void *event_info)
148 ret_if(NULL == data);
149 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
150 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
152 if (list_call_answering[item_data->index].func) {
153 list_call_answering[item_data->index].func((void *)item_data, NULL, obj, event_info);
158 static void __cst_set_genlist_item_styles(void)
160 ENTER(__cst_set_genlist_item_styles);
161 if (!itc_1text_1icon)
162 itc_1text_1icon = elm_genlist_item_class_new();
165 itc_help = elm_genlist_item_class_new();
167 itc_1text_1icon->item_style = "dialogue/1text.1icon";
168 itc_1text_1icon->func.text_get = __cst_gl_answering_ending_label_get;
169 itc_1text_1icon->func.content_get = __cst_gl_answering_ending_icon_get;
170 itc_1text_1icon->func.state_get = NULL;
171 itc_1text_1icon->func.del = __cst_gl_answering_ending_del;
173 itc_help->item_style = "multiline/1text";
174 itc_help->func.text_get = __cst_gl_answering_ending_label_get;
175 itc_help->func.content_get = NULL;
176 itc_help->func.state_get = NULL;
177 itc_help->func.del = __cst_gl_answering_ending_del;
180 static Evas_Object *__cst_create_gl_answering_ending(void *data)
182 ENTER(__cst_create_gl_answering_ending);
183 retv_if(NULL == data, NULL);
184 CstUgData_t *ugd = (CstUgData_t *)data;
186 Evas_Object *genlist;
187 Elm_Object_Item *item;
188 CstGlItemData_t *item_data;
190 genlist = elm_genlist_add(ugd->nf);
192 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
193 elm_object_style_set(genlist, "dialogue");
194 _cst_create_genlist_separator(genlist, EINA_FALSE);
195 for (index = 0; list_call_answering[index].style != CST_GL_ITEM_NONE; ++index) {
196 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
197 retv_if(NULL == item_data, NULL);
198 item_data->index = index;
199 item_data->ugd = ugd;
200 if (list_call_answering[index].style == CST_GL_ITEM_1TEXT_ONOFF) {
201 item = elm_genlist_item_append(genlist, itc_1text_1icon,
202 (void *)item_data, NULL, list_call_answering[index].flags,
203 __cst_gl_answering_ending_sel, item_data);
204 } else if (list_call_answering[index].style == CST_GL_ITEM_HELP_TEXT) {
205 item = elm_genlist_item_append(genlist, itc_help,
206 (void *)item_data, NULL, list_call_answering[index].flags,
208 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
209 _cst_create_genlist_underline(genlist);
216 item_data->gl_item = item;
218 _cst_create_genlist_separator_no_line(genlist);
223 static void __cst_create_answering_call(Evas_Object *parent, void *data)
225 ENTER(__cst_create_answering_call);
226 Evas_Object *genlist;
227 ret_if(NULL == data);
228 CstUgData_t *ugd = data;
230 __cst_set_genlist_item_styles();
231 genlist = __cst_create_gl_answering_ending(ugd);
232 elm_naviframe_item_push(ugd->nf, T_(CST_STR_CALL_ANSWERING_ENDING),
233 NULL, NULL, genlist, NULL);
236 void _cst_on_click_answering_call(void *data, Evas *evas, Evas_Object *obj, void *event_info)
238 ENTER(_cst_on_click_answering_call);
240 ret_if(NULL == data);
241 CstUgData_t *ugd = (CstUgData_t *)data;
242 __cst_create_answering_call(ugd->nf, ugd);