4ffd0dc90b4c088d4fccfd7fc2dad70a94718a05
[apps/core/preloaded/settings.git] / setting-network / src / setting-network-select-network.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-network-select-network.h>
22
23 static int setting_network_select_network_create(void *cb);
24 static int setting_network_select_network_destroy(void *cb);
25 static int setting_network_select_network_update(void *cb);
26 static int setting_network_select_network_cleanup(void *cb);
27
28 setting_view setting_view_network_select_network = {
29         .create = setting_network_select_network_create,
30         .destroy = setting_network_select_network_destroy,
31         .update = setting_network_select_network_update,
32         .cleanup = setting_network_select_network_cleanup,
33 };
34
35 /* ***************************************************
36  *
37  *basic func
38  *
39  ***************************************************/
40
41 static int setting_network_select_network_create(void *cb)
42 {
43         SETTING_TRACE_BEGIN;
44         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
45
46         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
47
48         setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
49                                              _("IDS_ST_BODY_SELECT_NETWORK"),
50                                              _("IDS_COM_BODY_BACK"),
51                                              NULL,
52                                              setting_network_select_network_click_softkey_cancel_cb,
53                                              NULL,
54                                              ad, &ad->genlist_sel_network, ad->navi_bar);
55
56         Elm_Object_Item *item = elm_genlist_item_append(ad->genlist_sel_network,
57                                     &(itc_seperator), NULL, NULL,
58                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
59         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
60
61         /* scroller is a genlist */
62         ad->chk_sel = elm_radio_add(ad->genlist_sel_network);
63         elm_radio_state_value_set(ad->chk_sel, -1);
64         vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);//retrieve here
65         SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
66         
67         vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);//retrieve here
68         SETTING_TRACE("ad->sel_act:%d", ad->sel_act);
69
70         FREE(ad->sel_network);
71         ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
72         SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
73         if (NULL == ad->sel_network) {
74             ad->sel_network = strndup("IDS_ST_BODY_NOSERVICE", strlen("IDS_ST_BODY_NOSERVICE")+1);
75         }
76
77         if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
78                 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
79                                             ad->genlist_sel_network,
80                                             &(itc_2text_1icon_6),
81                                             setting_network_Gendial_select_plmn_cb,
82                                             ad, SWALLOW_Type_1TOGGLE,
83                                             NULL, TRUE,
84                                             "IDS_COM_BODY_AUTOMATIC",
85                                             setting_network_select_network_chk_changed);
86                 setting_retvm_if(NULL == ad->data_auto_network_item,
87                                  SETTING_RETURN_FAIL, "Failed to calloc memory");
88                 ad->data_auto_network_item->sub_desc = (char *)g_strdup(ad->sel_network);
89                 ad->data_auto_network_item->userdata = ad;
90
91         } else if(TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net) {
92                 int tapi_ret;
93                 //searching list
94                 tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); //ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF
95                 if(tapi_ret != TAPI_API_SUCCESS) { // error handling..
96                         SETTING_TRACE_DEBUG("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
97                         setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
98                         // put error handler on the end of this function.
99                         goto err_handle;
100                 }
101                 ad->b_searching_network = TRUE;
102
103                 ad->data_auto_network_item  = setting_create_Gendial_field_1radio(
104                                             ad->genlist_sel_network,
105                                             &(itc_2text_1icon_7),
106                                             setting_network_Gendial_select_plmn_cb,
107                                             ad, SWALLOW_Type_1TOGGLE,
108                                             NULL, FALSE, "IDS_COM_BODY_AUTOMATIC",
109                                             setting_network_select_network_chk_changed);
110                 setting_retvm_if(NULL == ad->data_auto_network_item,
111                                  SETTING_RETURN_FAIL, "Failed to calloc memory");
112                 ad->data_auto_network_item->sub_desc = (char *)g_strdup(ad->sel_network);//just a simple display
113                 ad->data_auto_network_item->userdata = ad;
114                 if (0 != safeStrCmp("IDS_ST_BODY_NOSERVICE", ad->sel_network)
115                     && 0 != safeStrCmp("EMERGENCY", ad->sel_network))
116                 {
117                         //normal case:
118                         Setting_GenGroupItem_Data *item_Data = NULL;
119                         
120                         char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
121                         snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, "%s (%s)",
122                                  _(ad->sel_network),setting_network_get_act_str(ad->sel_act));
123
124                         item_Data = setting_create_Gendial_field_1radio(
125                                                         ad->genlist_sel_network,
126                                                         &itc_1text_2icon_2,
127                                                         setting_network_Gendial_select_plmn_cb, ad,
128                                                         SWALLOW_Type_1RADIO,
129                                                         ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL,
130                                                         sel_network_desc,
131                                                         setting_network_select_network_chk_changed);
132                         setting_retvm_if(NULL == item_Data, SETTING_RETURN_FAIL, "Failed to calloc memory");
133                         item_Data->userdata = ad;
134
135                         ad->data_search_network_item = setting_create_Gendial_field_1radio(
136                                                         ad->genlist_sel_network,
137                                                         &itc_1text_2icon_2,
138                                                         NULL, NULL,
139                                                         SWALLOW_Type_1RADIO_1SEARCH,
140                                                         ad->chk_sel, -1, NULL, NULL);
141
142                         elm_radio_value_set(ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL);
143
144                 }
145                 else
146                 {
147                         //no service case:
148                         ad->data_search_network_item = setting_create_Gendial_field_1radio(
149                                                         ad->genlist_sel_network,
150                                                         &itc_1text_2icon_2,
151                                                         NULL, NULL,
152                                                         SWALLOW_Type_1RADIO_1SEARCH,
153                                                         ad->chk_sel, -1, NULL, NULL);
154
155                 }
156         }
157
158         setting_view_network_select_network.is_create = TRUE;
159         return SETTING_RETURN_SUCCESS;
160
161 err_handle:
162         setting_view_network_select_network.is_create = TRUE;
163         return SETTING_RETURN_FAIL;
164 }
165
166 static int setting_network_select_network_destroy(void *cb)
167 {
168         SETTING_TRACE_BEGIN;
169         /* error check */
170         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
171
172         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
173         //cancel the searching operation
174         if (ad->b_searching_network) {
175                 int tapi_ret;
176                 tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
177                 if (tapi_ret != TAPI_API_SUCCESS) {
178                         SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
179                                             "tapi_ret=%d ***", tapi_ret);
180                 }
181                 ad->b_searching_network = FALSE;
182         }
183         /*roolback..*/
184         if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net)) {
185                 SETTING_TRACE_ERROR("vconf get failed");
186         }
187         
188         if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act)) {
189                 SETTING_TRACE_ERROR("vconf get failed");
190         }
191
192         FREE(ad->sel_network);
193         ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
194         if (NULL == ad->sel_network) {
195             ad->sel_network = strndup("IDS_ST_BODY_NOSERVICE", strlen("IDS_ST_BODY_NOSERVICE")+1);
196         }
197         
198         /*reset..*/
199         ad->b_set_manul_network = FALSE;
200         ad->b_set_auto_network = FALSE;
201         setting_network_update_sel_network(ad);
202
203         elm_naviframe_item_pop(ad->navi_bar);
204
205         //Following handlers will be used by async listening callback. They must be reset after genlist is 'popuped'.
206         ad->data_auto_network_item = NULL;
207         //data_sel_net was created in main view, it won't be destoryed.
208         //ad->data_sel_net = NULL;
209         setting_view_network_select_network.is_create = FALSE;
210
211         return SETTING_RETURN_SUCCESS;
212 }
213
214 static int setting_network_select_network_update(void *cb)
215 {
216         SETTING_TRACE_BEGIN;
217         /* error check */
218         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
219
220         //SettingNetworkUG *ad = (SettingNetworkUG *) cb;
221         //elm_radio_value_set(ad->chk_sel, ad->sel_net);
222
223         return SETTING_RETURN_SUCCESS;
224 }
225
226 static int setting_network_select_network_cleanup(void *cb)
227 {
228         SETTING_TRACE_BEGIN;
229         return setting_network_select_network_destroy(cb);
230 }
231
232 /* ***************************************************
233  *
234  *general func
235  *
236  ***************************************************/
237
238 /* ***************************************************
239  *
240  *call back func
241  *
242  ***************************************************/
243
244 static void
245 setting_network_select_network_click_softkey_cancel_cb(void *data,
246                                                        Evas_Object *obj,
247                                                        void *event_info)
248 {
249         /* error check */
250         retm_if(data == NULL,
251                 "[Setting > Network > Select] Data parameter is NULL");
252
253         SettingNetworkUG *ad = (SettingNetworkUG *) data;
254
255         setting_view_change(&setting_view_network_select_network,
256                             &setting_view_network_main, ad);
257 }
258