2012/08/21: tizen 2.0 beta
[apps/home/call-setting.git] / src / cst-answering.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
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
7  *
8  * http://www.tizenopensource.org/license
9  *
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.
15  */
16
17 #include <Elementary.h>
18 #include <vconf.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"
24 #include "cst-util.h"
25
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;
30
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},
37 };
38
39 static void __cst_on_click_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info)
40 {
41         ret_if(NULL == data);
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);
47 }
48
49 static void __cst_on_click_power_key_ends_call(void *data, Evas *evas, Evas_Object *obj, void *event_info)
50 {
51         ret_if(NULL == data);
52         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
53         Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
54         int value = 0;
55         _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PROXIMITY_SENSOR_BOOL, &value);
56
57         if ((check_state == EINA_FALSE) && (value == EINA_FALSE)) {
58                 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
59
60                 if (ugd->popup) {
61                         evas_object_del(ugd->popup);
62                         ugd->popup = NULL;
63                 }
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);
67         }
68         else {
69                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, !check_state);
70         }
71         elm_genlist_item_update(item_data->gl_item);
72 }
73
74 static void __cst_on_changed_answering_key(void *data, Evas_Object *obj, void *event_info)
75 {
76         Eina_Bool check_state;
77         check_state = elm_check_state_get(obj);
78
79         _cst_vconf_set_bool(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, check_state);
80 }
81
82 static void __cst_on_changed_power_key_ends_call(void *data, Evas_Object *obj, void *event_info)
83 {
84         ret_if(NULL == data);
85         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
86         Eina_Bool check_state = elm_check_state_get(obj);
87         int value = 0;
88         _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PROXIMITY_SENSOR_BOOL, &value);
89
90         if ((check_state == EINA_TRUE) && (value == EINA_FALSE)) {
91                 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
92
93                 if (ugd->popup) {
94                         evas_object_del(ugd->popup);
95                         ugd->popup = NULL;
96                 }
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);
100         } else
101                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, check_state);
102         elm_genlist_item_update(item_data->gl_item);
103 }
104
105 static char *__cst_gl_answering_ending_label_get(void *data, Evas_Object *obj, const char *part)
106 {
107         retv_if(NULL == data, NULL);
108         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
109
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));
113         }
114         return NULL;
115 }
116
117 static Evas_Object *__cst_gl_answering_ending_icon_get(void *data, Evas_Object *obj, const char *part)
118 {
119         retv_if(NULL == data, NULL);
120         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
121
122         if (!strcmp(part, "elm.icon")) {
123                 int value = 0;
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);
132                 }
133                 return item_data->eo_check;
134         }
135         return NULL;
136 }
137
138 static void __cst_gl_answering_ending_del(void *data, Evas_Object *obj)
139 {
140         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
141         if (item_data)
142                 free(item_data);
143         return;
144 }
145
146 static void __cst_gl_answering_ending_sel(void *data, Evas_Object *obj, void *event_info)
147 {
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);
151
152         if (list_call_answering[item_data->index].func) {
153                 list_call_answering[item_data->index].func((void *)item_data, NULL, obj, event_info);
154         }
155         return;
156 }
157
158 static void __cst_set_genlist_item_styles(void)
159 {
160         ENTER(__cst_set_genlist_item_styles);
161         if (!itc_1text_1icon)
162                 itc_1text_1icon = elm_genlist_item_class_new();
163
164         if (!itc_help)
165                 itc_help = elm_genlist_item_class_new();
166
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;
172
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;
178 }
179
180 static Evas_Object *__cst_create_gl_answering_ending(void *data)
181 {
182         ENTER(__cst_create_gl_answering_ending);
183         retv_if(NULL == data, NULL);
184         CstUgData_t *ugd = (CstUgData_t *)data;
185         int index = 0;
186         Evas_Object *genlist;
187         Elm_Object_Item *item;
188         CstGlItemData_t *item_data;
189
190         genlist = elm_genlist_add(ugd->nf);
191
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,
207                                 NULL, NULL);
208                         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
209                         _cst_create_genlist_underline(genlist);
210                 } else {
211                         DBG("No style");
212                         free(item_data);
213                         item_data = NULL;
214                         return NULL;
215                 }
216                 item_data->gl_item = item;
217         }
218         _cst_create_genlist_separator_no_line(genlist);
219
220         return genlist;
221 }
222
223 static void __cst_create_answering_call(Evas_Object *parent, void *data)
224 {
225         ENTER(__cst_create_answering_call);
226         Evas_Object *genlist;
227         ret_if(NULL == data);
228         CstUgData_t *ugd = data;
229
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);
234 }
235
236 void _cst_on_click_answering_call(void *data, Evas *evas, Evas_Object *obj, void *event_info)
237 {
238         ENTER(_cst_on_click_answering_call);
239
240         ret_if(NULL == data);
241         CstUgData_t *ugd = (CstUgData_t *)data;
242         __cst_create_answering_call(ugd->nf, ugd);
243 }
244