3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include <setting-network-select-network.h>
19 static int setting_network_select_network_create(void *cb);
20 static int setting_network_select_network_destroy(void *cb);
21 static int setting_network_select_network_update(void *cb);
22 static int setting_network_select_network_cleanup(void *cb);
24 setting_view setting_view_network_select_network = {
25 .create = setting_network_select_network_create,
26 .destroy = setting_network_select_network_destroy,
27 .update = setting_network_select_network_update,
28 .cleanup = setting_network_select_network_cleanup,
31 /* ***************************************************
35 ***************************************************/
37 static int setting_network_select_network_create(void *cb)
40 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
42 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
43 ad->net_restore = NET_RESTORE_NONE;
45 setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
46 _("IDS_ST_BODY_SELECT_NETWORK"),
47 _("IDS_COM_BODY_BACK"),
49 setting_network_select_network_click_softkey_cancel_cb,
51 ad, &ad->genlist_sel_network, ad->navi_bar);
53 Elm_Object_Item *item = elm_genlist_item_append(ad->genlist_sel_network,
54 &(itc_seperator), NULL, NULL,
55 ELM_GENLIST_ITEM_NONE, NULL, NULL);
56 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
58 /* scroller is a genlist */
59 ad->chk_sel = elm_radio_add(ad->genlist_sel_network);
60 elm_radio_state_value_set(ad->chk_sel, -1);
61 vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);//retrieve here
62 SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
64 vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);//retrieve here
65 SETTING_TRACE("ad->sel_act:%d", ad->sel_act);
67 FREE(ad->sel_network);
68 //ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
69 ad->sel_network = get_pa_select_network();
70 SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
71 if (isEmptyStr(ad->sel_network)) {
72 ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
75 if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
76 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
77 ad->genlist_sel_network,
79 setting_network_Gendial_select_plmn_cb,
80 ad, SWALLOW_Type_1TOGGLE,
82 "IDS_COM_BODY_AUTOMATIC",
83 setting_network_select_network_chk_changed);
84 setting_retvm_if(NULL == ad->data_auto_network_item,
85 SETTING_RETURN_FAIL, "Failed to calloc memory");
86 char *sub_text = setting_customize_text(_(ad->sel_network), 0, BLUE_COLOR, NULL);
87 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
89 ad->data_auto_network_item->userdata = ad;
91 } else if(TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net) {
95 //when user select network manully, it should disable 3g service, or it will no network to be found.
97 int old_pdp_value = 0;
98 int old_roaming_value = 0;
99 setting_get_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, &old_pdp_value, &err);
100 setting_get_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, &old_roaming_value, &err);
103 SETTING_TRACE("Disable user packet data");
104 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, FALSE, &err);
106 if (old_roaming_value)
108 SETTING_TRACE("Disable data roaming");
109 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, FALSE, &err);
112 #ifdef FUTURE_FEATURE //feature in the future.
113 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(NotifyStr_PDP_OFF), NULL, POPUP_INTERVAL, FALSE, FALSE);
118 tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); //ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF
119 if(tapi_ret != TAPI_API_SUCCESS) { // error handling..
120 SETTING_TRACE_DEBUG("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
121 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
122 // put error handler on the end of this function.
125 ad->b_searching_network = TRUE;
127 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
128 ad->genlist_sel_network,
129 &(itc_2text_1icon_7),
130 setting_network_Gendial_select_plmn_cb,
131 ad, SWALLOW_Type_1TOGGLE,
132 NULL, FALSE, "IDS_COM_BODY_AUTOMATIC",
133 setting_network_select_network_chk_changed);
135 setting_retvm_if(NULL == ad->data_auto_network_item,
136 SETTING_RETURN_FAIL, "Failed to calloc memory");
137 //ad->data_auto_network_item->sub_desc = (char *)g_strdup(ad->sel_network);//just a simple display
138 char *sub_text = setting_customize_text(_(ad->sel_network), 0, GRAY_COLOR, NULL);
139 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
141 ad->data_auto_network_item->userdata = ad;
142 if (0 != safeStrCmp("IDS_ST_BODY_NOSERVICE", ad->sel_network)
143 && 0 != safeStrCmp("EMERGENCY", ad->sel_network))
146 Setting_GenGroupItem_Data *item_Data = NULL;
148 char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
149 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, "%s (%s)",
150 _(ad->sel_network),setting_network_get_act_str(ad->sel_act));
152 item_Data = setting_create_Gendial_field_1radio(
153 ad->genlist_sel_network,
155 setting_network_Gendial_select_plmn_cb, ad,
157 ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL,
159 setting_network_select_network_chk_changed);
160 setting_retvm_if(NULL == item_Data, SETTING_RETURN_FAIL, "Failed to calloc memory");
161 item_Data->userdata = ad;
163 ad->data_search_network_item = setting_create_Gendial_field_1radio(
164 ad->genlist_sel_network,
167 SWALLOW_Type_1RADIO_1SEARCH,
168 ad->chk_sel, -1, NULL, NULL);
170 elm_radio_value_set(ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL);
176 ad->data_search_network_item = setting_create_Gendial_field_1radio(
177 ad->genlist_sel_network,
180 SWALLOW_Type_1RADIO_1SEARCH,
181 ad->chk_sel, -1, NULL, NULL);
186 setting_view_network_select_network.is_create = TRUE;
187 return SETTING_RETURN_SUCCESS;
190 setting_view_network_select_network.is_create = TRUE;
191 return SETTING_RETURN_FAIL;
194 static int setting_network_select_network_destroy(void *cb)
198 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
200 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
202 switch (ad->net_restore) {
203 case NET_RESTORE_PDP:
204 //restore the pdp vconf to be true
205 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, TRUE, &err);
207 case NET_RESTORE_PDP_ROAM:
208 //restore the pdp and roaming vconfs to be true
209 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA, TRUE, &err);
210 setting_set_bool_slp_key(BOOL_SLP_SETTING_DATA_ROAMING, TRUE, &err);
212 case NET_RESTORE_NONE:
214 SETTING_TRACE("Do need restore any vconf");
217 ad->net_restore = NET_RESTORE_NONE;//reset the value
219 //cancel the searching operation
220 if (ad->b_searching_network) {
222 tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
223 if (tapi_ret != TAPI_API_SUCCESS) {
224 SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
225 "tapi_ret=%d ***", tapi_ret);
227 ad->b_searching_network = FALSE;
230 if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net)) {
231 SETTING_TRACE_ERROR("vconf get failed");
234 if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act)) {
235 SETTING_TRACE_ERROR("vconf get failed");
238 FREE(ad->sel_network);
239 //ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
240 ad->sel_network = get_pa_select_network();
241 if (isEmptyStr(ad->sel_network)) {
242 ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
246 ad->b_set_manul_network = FALSE;
247 ad->b_set_auto_network = FALSE;
248 setting_network_update_sel_network(ad);
250 elm_naviframe_item_pop(ad->navi_bar);
252 //Following handlers will be used by async listening callback. They must be reset after genlist is 'popuped'.
253 ad->data_auto_network_item = NULL;
254 //data_sel_net was created in main view, it won't be destoryed.
255 //ad->data_sel_net = NULL;
256 setting_view_network_select_network.is_create = FALSE;
258 return SETTING_RETURN_SUCCESS;
261 static int setting_network_select_network_update(void *cb)
265 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
267 //SettingNetworkUG *ad = (SettingNetworkUG *) cb;
268 //elm_radio_value_set(ad->chk_sel, ad->sel_net);
270 return SETTING_RETURN_SUCCESS;
273 static int setting_network_select_network_cleanup(void *cb)
276 return setting_network_select_network_destroy(cb);
279 /* ***************************************************
283 ***************************************************/
285 /* ***************************************************
289 ***************************************************/
292 setting_network_select_network_click_softkey_cancel_cb(void *data,
297 retm_if(data == NULL,
298 "[Setting > Network > Select] Data parameter is NULL");
300 SettingNetworkUG *ad = (SettingNetworkUG *) data;
302 setting_view_change(&setting_view_network_select_network,
303 &setting_view_network_main, ad);