4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <setting-network-select-network.h>
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);
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,
35 /* ***************************************************
39 ***************************************************/
41 __network_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
44 ret_if(!data || !event_info);
45 SettingNetworkUG *ad = (SettingNetworkUG *) data;
46 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
47 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlist_sel_network, ev->output.x, ev->output.y, NULL);
48 ret_if(!selected_item);
49 Setting_GenGroupItem_Data *data_Item = elm_object_item_data_get(selected_item);
51 if (!safeStrCmp(data_Item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY"))
53 SETTING_TRACE("ev->output.x:%d, ev->output.y:%d", ev->output.x, ev->output.y);
54 Evas_Coord x, y, w, h;
55 evas_object_geometry_get(ad->data_auto_network_item->eo_check, &x, &y, &w, &h);
56 SETTING_TRACE("x:%d, y:%d, w:%d, h:%d", x, y, w ,h);
57 if (x <= ev->output.x && ev->output.x <= (x + w) && y <= ev->output.y && ev->output.y <= (y + h))
61 if (ad->data_auto_network_item->chk_status)
63 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
64 FREE(ad->data_auto_network_item->sub_desc);
65 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
70 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
71 FREE(ad->data_auto_network_item->sub_desc);
72 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
76 elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
80 __network_main_gl_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
83 ret_if(!data || !event_info);
84 SettingNetworkUG *ad = (SettingNetworkUG *) data;
85 Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down*)event_info;
86 ad->point_down.x = ev->output.x;
87 ad->point_down.y = ev->output.y;
88 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlist_sel_network, ev->output.x, ev->output.y, NULL);
89 ret_if(!selected_item);
90 Setting_GenGroupItem_Data *data_Item = elm_object_item_data_get(selected_item);
92 if (!safeStrCmp(data_Item->keyStr, "IDS_COM_BODY_SELECT_AUTOMATICALLY"))
94 SETTING_TRACE("ev->output.x:%d, ev->output.y:%d", ev->output.x, ev->output.y);
95 Evas_Coord x, y, w, h;
96 evas_object_geometry_get(ad->data_auto_network_item->eo_check, &x, &y, &w, &h);
97 SETTING_TRACE("x:%d, y:%d, w:%d, h:%d", x, y, w ,h);
98 if (x <= ev->output.x && ev->output.x <= (x + w) && y <= ev->output.y && ev->output.y <= (y + h))
103 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, WHITE_COLOR, NULL);
104 FREE(ad->data_auto_network_item->sub_desc);
105 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
107 elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
112 __network_main_gl_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
114 //SETTING_TRACE_BEGIN;
115 ret_if(!data || !event_info);
116 SettingNetworkUG *ad = (SettingNetworkUG *) data;
117 Evas_Event_Mouse_Move*ev = (Evas_Event_Mouse_Move*)event_info;
118 int x_offset = ev->cur.output.x - ad->point_down.x;
119 int y_offset = ev->cur.output.y - ad->point_down.y;
120 if(x_offset < 0) x_offset = -x_offset;
121 if(y_offset < 0) y_offset = -y_offset;
122 //SETTING_TRACE("x_offset:%d, y_offset:%d", x_offset, y_offset);
123 if (x_offset <= MIN_MOVE_DISTANCE && y_offset <= MIN_MOVE_DISTANCE)
128 //SETTING_TRACE("xxxxxxxxxx");
129 if (ad->data_auto_network_item->chk_status)
131 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
132 FREE(ad->data_auto_network_item->sub_desc);
133 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
138 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
139 FREE(ad->data_auto_network_item->sub_desc);
140 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
144 elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
147 static int setting_network_select_network_create(void *cb)
150 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
152 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
153 if (ad->view_to_load == &setting_view_network_select_network) {
154 ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
156 "IDS_COM_BODY_NETWORK_OPERATORS",
157 _("IDS_COM_BODY_BACK"), NULL,
158 setting_network_select_network_click_softkey_cancel_cb, NULL,
159 ad, &ad->genlist_sel_network, &ad->navi_bar);
161 setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
162 "IDS_COM_BODY_NETWORK_OPERATORS",
163 _("IDS_COM_BODY_BACK"),
165 setting_network_select_network_click_softkey_cancel_cb,
167 ad, &ad->genlist_sel_network, ad->navi_bar);
169 Elm_Object_Item *item = elm_genlist_item_append(ad->genlist_sel_network,
170 &(itc_seperator), NULL, NULL,
171 ELM_GENLIST_ITEM_NONE, NULL, NULL);
172 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
174 /* scroller is a genlist */
175 ad->chk_sel = elm_radio_add(ad->genlist_sel_network);
176 elm_radio_state_value_set(ad->chk_sel, -1);
177 vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);//retrieve here
178 SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
180 vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);//retrieve here
181 SETTING_TRACE("ad->sel_act:%d", ad->sel_act);
183 FREE(ad->sel_network);
184 //ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
185 ad->sel_network = get_pa_select_network();
186 SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
187 if (!ad->sel_network) {
188 ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
191 elm_genlist_mode_set(ad->genlist_sel_network, ELM_LIST_COMPRESS); /* resolve abnormal height issue */
193 evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_UP, __network_main_gl_mouse_up, ad);
194 evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_DOWN, __network_main_gl_mouse_down, ad);
195 evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_MOVE, __network_main_gl_mouse_move, ad);
197 if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
198 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
199 ad->genlist_sel_network,
200 //&(itc_2text_1icon_7),
202 setting_network_Gendial_select_plmn_cb,
203 ad, SWALLOW_Type_1TOGGLE,
205 "IDS_COM_BODY_SELECT_AUTOMATICALLY",
206 setting_network_select_network_chk_changed);
207 setting_retvm_if(NULL == ad->data_auto_network_item,
208 SETTING_RETURN_FAIL, "Failed to calloc memory");
209 char *sub_text = setting_customize_text(_(ad->sel_network), 0, BLUE_COLOR, NULL);
210 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
212 ad->data_auto_network_item->userdata = ad;
213 //setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
215 } else if(TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net) {
220 tapi_ret = tel_search_network(ad->handle, setting_tapi_search_network_cb, ad); //ASYNC API - TAPI_EVENT_NETWORK_SEARCH_CNF
221 if(tapi_ret != TAPI_API_SUCCESS) { // error handling..
222 SETTING_TRACE_DEBUG("%s*** [ERR] tel_search_network. tapi_ret=%d ***%s", SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
223 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(STR_SETTING_OPERATION_FAILED), NULL, POPUP_INTERVAL, FALSE, FALSE);
224 // put error handler on the end of this function.
227 ad->b_searching_network = TRUE;
230 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
231 ad->genlist_sel_network,
232 //&(itc_2text_1icon_7),
234 setting_network_Gendial_select_plmn_cb,
235 ad, SWALLOW_Type_1TOGGLE,
236 NULL, FALSE, "IDS_COM_BODY_SELECT_AUTOMATICALLY",
237 setting_network_select_network_chk_changed);
239 setting_retvm_if(NULL == ad->data_auto_network_item, SETTING_RETURN_FAIL, "Failed to calloc memory");
240 //ad->data_auto_network_item->sub_desc = (char *)g_strdup(ad->sel_network);//just a simple display
241 char *sub_text = setting_customize_text(_(ad->sel_network), 0, GRAY_COLOR, NULL);
242 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
243 setting_genlist_item_groupstyle_set(ad->data_auto_network_item, SETTING_GROUP_STYLE_TOP);
245 ad->data_auto_network_item->userdata = ad;
247 setting_view_network_select_network.is_create = TRUE;
249 setting_network_searching_network( ad->data_auto_network_item );
251 /* Searching icon appeared.
252 ad->data_search_network_item = setting_create_Gendial_field_1radio(
253 ad->genlist_sel_network,
256 SWALLOW_Type_1RADIO_1SEARCH,
257 ad->chk_sel, -1, NULL, NULL);
258 __BACK_POINTER_SET(ad->data_search_network_item);
259 elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
260 setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
264 if (0 == safeStrCmp("IDS_ST_BODY_NOSERVICE", ad->sel_network)
265 || 0 == safeStrCmp(_("IDS_ST_BODY_NOSERVICE"), _(ad->sel_network))
266 || 0 == safeStrCmp("EMERGENCY", ad->sel_network)
267 || 0 == safeStrCmp(_("EMERGENCY"), ad->sel_network)
268 || 0 == safeStrCmp("No service", ad->sel_network)
269 || 0 == safeStrCmp("No service", _(ad->sel_network))
270 || 0 == safeStrCmp(_("IDS_CALL_POP_CALLING_EMERG_ONLY"), _(ad->sel_network))
271 || 0 == safeStrCmp("Emergency calls only", _(ad->sel_network))
275 ad->data_search_network_item = setting_create_Gendial_field_1radio(
276 ad->genlist_sel_network,
279 SWALLOW_Type_1RADIO_1SEARCH,
280 ad->chk_sel, -1, NULL, NULL);
281 __BACK_POINTER_SET(ad->data_search_network_item);
282 elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
283 setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
288 Setting_GenGroupItem_Data *item_Data = NULL;
290 char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
292 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, "%s",_(ad->sel_network));
293 item_Data = setting_create_Gendial_field_1radio(
294 ad->genlist_sel_network,
295 &itc_multiline_1text_1icon,
296 setting_network_Gendial_select_plmn_cb, ad,
298 ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL,
300 setting_network_select_network_chk_changed);
301 setting_retvm_if(NULL == item_Data, SETTING_RETURN_FAIL, "Failed to calloc memory");
302 item_Data->userdata = ad;
303 setting_genlist_item_groupstyle_set(item_Data, SETTING_GROUP_STYLE_CENTER);
305 ad->data_search_network_item = setting_create_Gendial_field_1radio(
306 ad->genlist_sel_network,
309 SWALLOW_Type_1RADIO_1SEARCH,
310 ad->chk_sel, -1, NULL, NULL);
311 __BACK_POINTER_SET(ad->data_search_network_item);
312 elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
313 setting_genlist_item_groupstyle_set(ad->data_search_network_item, SETTING_GROUP_STYLE_BOTTOM);
314 elm_radio_value_set(ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL);
319 //ADD_GL_SEPARATOR(ad->genlist_sel_network);
321 setting_view_network_select_network.is_create = TRUE;
322 return SETTING_RETURN_SUCCESS;
325 setting_view_network_select_network.is_create = TRUE;
326 return SETTING_RETURN_FAIL;
330 static int setting_network_select_network_destroy(void *cb)
334 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
336 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
338 evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_UP, __network_main_gl_mouse_up);
339 evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_DOWN, __network_main_gl_mouse_down);
340 evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_MOVE, __network_main_gl_mouse_move);
343 ecore_timer_del(ad->timer);
348 evas_object_del(ad->popup);
352 //cancel the searching operation
353 if (ad->b_searching_network) {
355 tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
356 if (tapi_ret != TAPI_API_SUCCESS) {
357 SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
358 "tapi_ret=%d ***", tapi_ret);
360 ad->b_searching_network = FALSE;
363 if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net)) {
364 SETTING_TRACE_ERROR("vconf get failed");
367 if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act)) {
368 SETTING_TRACE_ERROR("vconf get failed");
371 FREE(ad->sel_network);
372 ad->sel_network = get_pa_select_network();
373 if (!ad->sel_network) {
374 ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK)+1);
378 ad->b_set_manul_network = FALSE;
379 ad->b_set_auto_network = FALSE;
380 setting_network_update_sel_network(ad);
382 if (ad->view_to_load == &setting_view_network_select_network) {
384 evas_object_del(ad->ly_main);
388 elm_naviframe_item_pop(ad->navi_bar);
390 // elm_naviframe_item_pop(ad->navi_bar);
392 //Following handlers will be used by async listening callback. They must be reset after genlist is 'popuped'.
393 ad->data_auto_network_item = NULL;
394 //data_sel_net was created in main view, it won't be destoryed.
395 //ad->data_sel_net = NULL;
396 setting_view_network_select_network.is_create = FALSE;
398 return SETTING_RETURN_SUCCESS;
401 static int setting_network_select_network_update(void *cb)
405 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
407 //SettingNetworkUG *ad = (SettingNetworkUG *) cb;
408 //elm_radio_value_set(ad->chk_sel, ad->sel_net);
410 return SETTING_RETURN_SUCCESS;
413 static int setting_network_select_network_cleanup(void *cb)
416 return setting_network_select_network_destroy(cb);
419 /* ***************************************************
423 ***************************************************/
425 /* ***************************************************
429 ***************************************************/
432 setting_network_select_network_click_softkey_cancel_cb(void *data,
437 SettingNetworkUG *ad = (SettingNetworkUG *) data;
439 // If registering.. popup is displaying, Back must be ignored.
440 if ( ad->network_select_registering_pop )
442 SETTING_TRACE("registering... popup is displaying. back key ignored");
447 retm_if(data == NULL, "[Setting > Network > Select] Data parameter is NULL");
449 if (ad->view_to_load == &setting_view_network_select_network) {
451 ug_destroy_me(ad->ug);
454 setting_view_change(&setting_view_network_select_network,
455 &setting_view_network_main, ad);