Tizen 2.1 base
[apps/home/call-setting.git] / src / cst-call-setting.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://floralicense.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 "cst-common.h"
18 #include "cst-common-string.h"
19 #include "cst-call-setting.h"
20 #include "cst-widget.h"
21 #include "cst-tapi-request.h"
22 #include "cst-answering.h"
23 #include "cst-forwarding.h"
24 #include "cst-reject-msg.h"
25 #include "cst-util.h"
26 #include "cst-more-call-setting.h"
27 #include <ui-gadget-module.h>
28 #include <Elementary.h>
29 #include <vconf.h>
30 #include <app.h>
31
32 static Elm_Genlist_Item_Class *itc_1text = NULL;
33 static Elm_Genlist_Item_Class *itc_1text_1icon = NULL;
34 static Elm_Genlist_Item_Class *itc_title = NULL;
35 static Elm_Genlist_Item_Class *itc_help = NULL;
36 static Elm_Genlist_Item_Class *itc_2text = NULL;
37
38 static void __cst_on_click_speed_dial(void *data, Evas *evas, Evas_Object *obj, void *event_info);
39
40 static CstGlItemDisplayInfo_t list_dep1[] = {
41         {1, CST_STR_REJECT_MESSAGES, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_reject_message},
42         {1, CST_STR_EDIT_REJECT_MESSAGE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
43         {1, CST_STR_SPEED_DIAL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, __cst_on_click_speed_dial},
44         {1, CST_STR_CALL_ANSWERING_ENDING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_answering_call},
45         {1, CST_STR_MANAGE_ANSWERING_ENDING_CALL_MODE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
46         {1, CST_STR_CALL_FORWARDING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_forwarding},
47         {1, CST_STR_MORE_CALL_SETTINGS, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_more_call_setting},
48         {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
49 };
50
51 static void __cst_speed_dial_view_ug_destroy_cb(ui_gadget_h ug, void *priv)
52 {
53         ENTER(__cst_speed_dial_view_ug_destroy_cb);
54         if (ug) {
55                 ug_destroy(ug);
56         }
57 }
58
59 static void __cst_speed_dial_view_ug_result_cb(ui_gadget_h ug, service_h service, void *priv)
60 {
61         ENTER(__cst_speed_dial_view_ug_result_cb);
62         ug_destroy(ug);
63 }
64
65 static void __cst_speed_dial_view_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
66 {
67         ENTER(__cst_speed_dial_view_ug_layout_cb);
68         Evas_Object *base = ug_get_layout(ug);
69         ret_if(base == NULL);
70
71         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
72         elm_win_resize_object_add(ug_get_window(), base);
73         evas_object_show(base);
74 }
75
76 static void __cst_on_click_speed_dial(void *data, Evas *evas, Evas_Object *obj, void *event_info)
77 {
78         ENTER(__cst_on_click_speed_dial);
79         ret_if(data == NULL);
80         CstUgData_t *ugd = (CstUgData_t *)data;
81         struct ug_cbs cbs = { 0, };
82         ui_gadget_h ug;
83
84         cbs.layout_cb = __cst_speed_dial_view_ug_layout_cb;
85         cbs.result_cb = __cst_speed_dial_view_ug_result_cb;
86         cbs.destroy_cb = __cst_speed_dial_view_ug_destroy_cb;
87         cbs.priv = (void *)ugd;
88
89         ug = ug_create((ui_gadget_h)ugd->ug, "speeddial-efl", UG_MODE_FULLVIEW, NULL, &cbs);
90         DBG("ug = 0x%x", ug);
91         if (ug == NULL) {
92                 DBG("ug create fail...");
93         }
94 }
95
96 static char *__cst_gl_label_get_phone(void *data, Evas_Object *obj, const char *part)
97 {
98         retv_if(NULL == data, NULL);
99         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
100         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
101
102         ENTER(__cst_gl_label_get_phone);
103         if ((strcmp(part, "elm.text") == 0) ||
104                         (strcmp(part, "elm.text.1") == 0)) {
105                 if (list_dep1[item_data->index].str_id != -1) {
106                         return strdup(T_(list_dep1[item_data->index].str_id));
107                 }
108         }
109         return NULL;
110 }
111
112 static void __cst_gl_del_phone(void *data, Evas_Object *obj)
113 {
114         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
115         if (item_data) {
116                 free(item_data);
117         }
118         return;
119 }
120
121 static void __cst_gl_sel_phone(void *data, Evas_Object *obj, void *event_info)
122 {
123         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
124         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
125         CstGlItemData_t *item_data = (CstGlItemData_t *)elm_object_item_data_get(it);
126         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
127
128         if (list_dep1[item_data->index].func) {
129                 if (list_dep1[item_data->index].style == CST_GL_ITEM_1TEXT_ONOFF) {
130                         list_dep1[item_data->index].func((void *)item_data, NULL, obj, event_info);
131                 } else {
132                         list_dep1[item_data->index].func((void *)ugd, NULL, obj, event_info);
133                 }
134         }
135         return;
136 }
137
138 static void __cst_on_clicked_back_btn(void *data, Evas_Object *obj, void *event_info)
139 {
140         ENTER(__cst_on_clicked_back_btn);
141         CstUgData_t *ugd = (CstUgData_t *)data;
142         ret_if(NULL == ugd);
143         ug_destroy_me((ui_gadget_h)ugd->ug);
144 }
145
146 static void __cst_set_genlist_item_styles_phone(void)
147 {
148         ENTER(__cst_set_genlist_item_styles_phone);
149         if (!itc_1text) {
150                 itc_1text = elm_genlist_item_class_new();
151         }
152         if (!itc_1text_1icon) {
153                 itc_1text_1icon = elm_genlist_item_class_new();
154         }
155         if (!itc_title) {
156                 itc_title = elm_genlist_item_class_new();
157         }
158         if (!itc_help) {
159                 itc_help = elm_genlist_item_class_new();
160         }
161         if (!itc_2text) {
162                 itc_2text = elm_genlist_item_class_new();
163         }
164
165         itc_1text->item_style = "dialogue/1text";
166         itc_1text->func.text_get = __cst_gl_label_get_phone;
167         itc_1text->func.content_get = NULL;
168         itc_1text->func.state_get = NULL;
169         itc_1text->func.del = __cst_gl_del_phone;
170
171         itc_title->item_style = "dialogue/title";
172         itc_title->func.text_get = __cst_gl_label_get_phone;
173         itc_title->func.content_get = NULL;
174         itc_title->func.state_get = NULL;
175         itc_title->func.del = __cst_gl_del_phone;
176
177         itc_help->item_style = "multiline/1text";
178         itc_help->func.text_get = __cst_gl_label_get_phone;
179         itc_help->func.content_get = NULL;
180         itc_help->func.state_get = NULL;
181         itc_help->func.del = __cst_gl_del_phone;
182
183         itc_2text->item_style = "dialogue/2text.3";
184         itc_2text->func.text_get = __cst_gl_label_get_phone;
185         itc_2text->func.content_get = NULL;
186         itc_2text->func.state_get = NULL;
187         itc_2text->func.del = __cst_gl_del_phone;
188 }
189
190 static Evas_Object *__cst_create_genlist_phone(void *data)
191 {
192         ENTER(__cst_create_genlist_phone);
193         retv_if(NULL == data, NULL);
194         CstUgData_t *ugd = (CstUgData_t *)data;
195         CstGlItemData_t *item_data;
196         Evas_Object *genlist;
197         int i;
198
199         genlist = elm_genlist_add(ugd->nf);
200         retv_if(NULL == genlist, NULL);
201         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
202
203         _cst_create_genlist_separator(genlist, EINA_FALSE);
204
205         for (i = 0; list_dep1[i].style != CST_GL_ITEM_NONE; ++i) {
206                 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
207                 retv_if(NULL == item_data, NULL);
208                 DBG("list_dep1[i].str_id = %d", list_dep1[i].str_id);
209                 item_data->index = i;
210                 item_data->ugd = ugd;
211                 if (list_dep1[i].style == CST_GL_ITEM_TEXT) {
212                         item_data->gl_item = elm_genlist_item_append(genlist, itc_1text,
213                                 (void *)item_data, NULL, list_dep1[i].flags,
214                                 __cst_gl_sel_phone, ugd);
215                 } else if (list_dep1[i].style == CST_GL_ITEM_DG_TITLE) {
216                         item_data->gl_item = elm_genlist_item_append(genlist, itc_title,
217                                                                  (void *)item_data, NULL, list_dep1[i].flags,
218                                                                  NULL, NULL);
219                         elm_genlist_item_select_mode_set(item_data->gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
220                 } else if (list_dep1[i].style == CST_GL_ITEM_HELP_TEXT) {
221                         item_data->gl_item = elm_genlist_item_append(genlist, itc_help,
222                                                                  (void *)item_data, NULL, list_dep1[i].flags,
223                                                                  NULL, NULL);
224                         elm_genlist_item_select_mode_set(item_data->gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
225                         if (list_dep1[i+1].style != CST_GL_ITEM_DG_TITLE) {
226                                 _cst_create_genlist_separator(genlist, EINA_FALSE);
227                         }
228                 } else if (list_dep1[i].style == CST_GL_ITEM_SUB_TEXT) {
229                         item_data->gl_item = elm_genlist_item_append(genlist, itc_2text,
230                                                                  (void *)item_data, NULL, list_dep1[i].flags,
231                                                                  __cst_gl_sel_phone, ugd);
232                         ugd->vm_gl_item = item_data->gl_item;
233                 } else {
234                         DBG("No style");
235                         free(item_data);
236                         item_data = NULL;
237                         return NULL;
238                 }
239         }
240         _cst_create_genlist_separator_no_line(genlist);
241
242         return genlist;
243 }
244 void _cst_create_call_setting(void *data)
245 {
246         ENTER(_cst_create_call_setting);
247         ret_if(NULL == data);
248         CstUgData_t *ugd = (CstUgData_t *)data;
249
250         __cst_set_genlist_item_styles_phone();
251         Evas_Object *genlist = __cst_create_genlist_phone(ugd);
252         Evas_Object *back_btn = elm_button_add(ugd->nf);
253         evas_object_smart_callback_add(back_btn, "clicked",
254                                                                    __cst_on_clicked_back_btn, ugd);
255
256         elm_naviframe_item_push(ugd->nf, T_(CST_STR_CALL),
257                                                         back_btn, NULL, genlist, NULL);
258         elm_object_style_set(back_btn, "naviframe/back_btn/default");
259
260         LEAVE();
261 }
262