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_ST_BODY_SELECT_AUTOMATICALLY")) {
52 SETTING_TRACE("ev->output.x:%d, ev->output.y:%d", ev->output.x, ev->output.y);
53 Evas_Coord x, y, w, h;
54 evas_object_geometry_get(ad->data_auto_network_item->eo_check, &x, &y, &w, &h);
55 SETTING_TRACE("x:%d, y:%d, w:%d, h:%d", x, y, w , h);
56 if (x <= ev->output.x && ev->output.x <= (x + w) && y <= ev->output.y && ev->output.y <= (y + h)) {
59 if (ad->data_auto_network_item->chk_status) {
60 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
61 FREE(ad->data_auto_network_item->sub_desc);
62 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
65 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
66 FREE(ad->data_auto_network_item->sub_desc);
67 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
71 elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
75 __network_main_gl_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
78 ret_if(!data || !event_info);
79 SettingNetworkUG *ad = (SettingNetworkUG *) data;
80 Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
81 ad->point_down.x = ev->output.x;
82 ad->point_down.y = ev->output.y;
83 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlist_sel_network, ev->output.x, ev->output.y, NULL);
84 ret_if(!selected_item);
85 Setting_GenGroupItem_Data *data_Item = elm_object_item_data_get(selected_item);
87 if (!safeStrCmp(data_Item->keyStr, "IDS_ST_BODY_SELECT_AUTOMATICALLY")) {
88 SETTING_TRACE("ev->output.x:%d, ev->output.y:%d", ev->output.x, ev->output.y);
89 Evas_Coord x, y, w, h;
90 evas_object_geometry_get(ad->data_auto_network_item->eo_check, &x, &y, &w, &h);
91 SETTING_TRACE("x:%d, y:%d, w:%d, h:%d", x, y, w , h);
92 if (x <= ev->output.x && ev->output.x <= (x + w) && y <= ev->output.y && ev->output.y <= (y + h)) {
96 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, WHITE_COLOR, NULL);
97 FREE(ad->data_auto_network_item->sub_desc);
98 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
100 elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
105 __network_main_gl_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
107 /*SETTING_TRACE_BEGIN; */
108 ret_if(!data || !event_info);
109 SettingNetworkUG *ad = (SettingNetworkUG *) data;
110 Evas_Event_Mouse_Move *ev = (Evas_Event_Mouse_Move *)event_info;
111 int x_offset = ev->cur.output.x - ad->point_down.x;
112 int y_offset = ev->cur.output.y - ad->point_down.y;
113 if (x_offset < 0) x_offset = -x_offset;
114 if (y_offset < 0) y_offset = -y_offset;
115 /*SETTING_TRACE("x_offset:%d, y_offset:%d", x_offset, y_offset); */
116 if (x_offset <= MIN_MOVE_DISTANCE && y_offset <= MIN_MOVE_DISTANCE) {
120 /*SETTING_TRACE("xxxxxxxxxx"); */
121 if (ad->data_auto_network_item->chk_status) {
122 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, BLUE_COLOR, NULL);
123 FREE(ad->data_auto_network_item->sub_desc);
124 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
127 char *sub_text = setting_customize_text(ad->data_auto_network_item->sub_desc, 0, GRAY_COLOR, NULL);
128 FREE(ad->data_auto_network_item->sub_desc);
129 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
133 elm_genlist_item_fields_update(ad->data_auto_network_item->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
136 static int setting_network_select_network_create(void *cb)
139 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
141 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
142 if (ad->view_to_load == &setting_view_network_select_network) {
143 ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
145 "IDS_COM_BODY_NETWORK_OPERATORS",
146 _("IDS_ST_BUTTON_BACK"), NULL,
147 setting_network_select_network_click_softkey_cancel_cb, NULL,
148 ad, &ad->genlist_sel_network, &ad->navi_bar);
150 setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
151 "IDS_COM_BODY_NETWORK_OPERATORS",
152 _("IDS_ST_BUTTON_BACK"),
154 setting_network_select_network_click_softkey_cancel_cb,
156 ad, &ad->genlist_sel_network, ad->navi_bar);
158 Elm_Object_Item *item = elm_genlist_item_append(ad->genlist_sel_network,
159 &(itc_seperator), NULL, NULL,
160 ELM_GENLIST_ITEM_NONE, NULL, NULL);
161 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
163 /* scroller is a genlist */
164 ad->chk_sel = elm_radio_add(ad->genlist_sel_network);
165 elm_radio_state_value_set(ad->chk_sel, -1);
166 vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net);/*retrieve here */
167 SETTING_TRACE("ad->sel_net:%d", ad->sel_net);
169 vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act);/*retrieve here */
170 SETTING_TRACE("ad->sel_act:%d", ad->sel_act);
172 FREE(ad->sel_network);
173 /*ad->sel_network = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME); */
174 ad->sel_network = get_pa_select_network();
175 SETTING_TRACE("pa_sel_net_name:%s", ad->sel_network);
176 if (!ad->sel_network) {
177 ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK) + 1);
180 elm_genlist_mode_set(ad->genlist_sel_network, ELM_LIST_COMPRESS); /* resolve abnormal height issue */
182 evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_UP, __network_main_gl_mouse_up, ad);
183 evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_DOWN, __network_main_gl_mouse_down, ad);
184 evas_object_event_callback_add(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_MOVE, __network_main_gl_mouse_move, ad);
186 if (TAPI_NETWORK_SELECTIONMODE_AUTOMATIC == ad->sel_net) {
187 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
188 ad->genlist_sel_network,
190 setting_network_Gendial_select_plmn_cb,
191 ad, SWALLOW_Type_1ICON_1RADIO,
193 "IDS_ST_BODY_SELECT_AUTOMATICALLY",
194 setting_network_select_network_chk_changed);
195 setting_retvm_if(NULL == ad->data_auto_network_item,
196 SETTING_RETURN_FAIL, "Failed to calloc memory");
197 char *sub_text = setting_customize_text(_(ad->sel_network), 0, BLUE_COLOR, NULL);
198 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
200 ad->data_auto_network_item->userdata = ad;
202 } else if (TAPI_NETWORK_SELECTIONMODE_MANUAL == ad->sel_net) {
204 ad->data_auto_network_item = setting_create_Gendial_field_1radio(
205 ad->genlist_sel_network,
207 setting_network_Gendial_select_plmn_cb,
208 ad, SWALLOW_Type_1ICON_1RADIO,
209 NULL, FALSE, "IDS_ST_BODY_SELECT_AUTOMATICALLY",
210 setting_network_select_network_chk_changed);
212 setting_retvm_if(NULL == ad->data_auto_network_item, SETTING_RETURN_FAIL, "Failed to calloc memory");
213 /*ad->data_auto_network_item->sub_desc = (char *)g_strdup(ad->sel_network);//just a simple display */
214 char *sub_text = setting_customize_text(_(ad->sel_network), 0, GRAY_COLOR, NULL);
215 ad->data_auto_network_item->sub_desc = (char *)g_strdup(sub_text);
217 ad->data_auto_network_item->userdata = ad;
219 setting_view_network_select_network.is_create = TRUE;
221 setting_network_searching_network(ad->data_auto_network_item);
223 /* Searching icon appeared.
224 ad->data_search_network_item = setting_create_Gendial_field_1radio(
225 ad->genlist_sel_network,
228 SWALLOW_Type_1RADIO_1SEARCH,
229 ad->chk_sel, -1, NULL, NULL);
230 __BACK_POINTER_SET(ad->data_search_network_item);
231 elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
235 if (0 == safeStrCmp("IDS_ST_BODY_NOSERVICE", ad->sel_network)
236 || 0 == safeStrCmp(_("IDS_ST_BODY_NOSERVICE"), _(ad->sel_network))
237 || 0 == safeStrCmp("EMERGENCY", ad->sel_network)
238 || 0 == safeStrCmp(_("EMERGENCY"), ad->sel_network)
239 || 0 == safeStrCmp("No service", ad->sel_network)
240 || 0 == safeStrCmp("No service", _(ad->sel_network))
241 || 0 == safeStrCmp(_("IDS_CALL_POP_CALLING_EMERG_ONLY"), _(ad->sel_network))
242 || 0 == safeStrCmp("Emergency calls only", _(ad->sel_network))
246 ad->data_search_network_item = setting_create_Gendial_field_1radio(
247 ad->genlist_sel_network,
250 SWALLOW_Type_1RADIO_1SEARCH,
251 ad->chk_sel, -1, NULL, NULL);
252 __BACK_POINTER_SET(ad->data_search_network_item);
253 elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
258 Setting_GenGroupItem_Data *item_Data = NULL;
260 char sel_network_desc[MAX_COMMON_BUFFER_LEN] = { 0, };
262 snprintf(sel_network_desc, MAX_COMMON_BUFFER_LEN, "%s",_(ad->sel_network));
263 item_Data = setting_create_Gendial_field_1radio(
264 ad->genlist_sel_network,
265 &itc_multiline_1text_1icon,
266 setting_network_Gendial_select_plmn_cb, ad,
268 ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL,
270 setting_network_select_network_chk_changed);
271 setting_retvm_if(NULL == item_Data, SETTING_RETURN_FAIL, "Failed to calloc memory");
272 item_Data->userdata = ad;
274 ad->data_search_network_item = setting_create_Gendial_field_1radio(
275 ad->genlist_sel_network,
278 SWALLOW_Type_1RADIO_1SEARCH,
279 ad->chk_sel, -1, NULL, NULL);
280 __BACK_POINTER_SET(ad->data_search_network_item);
281 elm_genlist_item_select_mode_set(ad->data_search_network_item->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
282 elm_radio_value_set(ad->chk_sel, TAPI_NETWORK_SELECTIONMODE_MANUAL);
287 /*ADD_GL_SEPARATOR(ad->genlist_sel_network); */
289 setting_view_network_select_network.is_create = TRUE;
290 return SETTING_RETURN_SUCCESS;
293 setting_view_network_select_network.is_create = TRUE;
294 return SETTING_RETURN_FAIL;
298 static int setting_network_select_network_destroy(void *cb)
302 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
304 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
306 evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_UP, __network_main_gl_mouse_up);
307 evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_DOWN, __network_main_gl_mouse_down);
308 evas_object_event_callback_del(ad->genlist_sel_network, EVAS_CALLBACK_MOUSE_MOVE, __network_main_gl_mouse_move);
311 ecore_timer_del(ad->timer);
316 evas_object_del(ad->popup);
320 /*cancel the searching operation */
321 if (ad->b_searching_network) {
323 tapi_ret = tel_cancel_network_manual_search(ad->handle, setting_tapi_cancel_manual_search_cb, ad);
324 if (tapi_ret != TAPI_API_SUCCESS) {
325 SETTING_TRACE_ERROR("*** [ERR] tel_cancel_network_manual_search. "\
326 "tapi_ret=%d ***", tapi_ret);
328 ad->b_searching_network = FALSE;
331 if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_NETWORK_INT, &ad->sel_net)) {
332 SETTING_TRACE_ERROR("vconf get failed");
335 if (0 != vconf_get_int(VCONFKEY_SETAPPL_SELECT_OLD_NT_ACT, &ad->sel_act)) {
336 SETTING_TRACE_ERROR("vconf get failed");
339 FREE(ad->sel_network);
340 ad->sel_network = get_pa_select_network();
341 if (!ad->sel_network) {
342 ad->sel_network = strndup(Keystr_UNKNOWN_NETWORK, strlen(Keystr_UNKNOWN_NETWORK) + 1);
346 ad->b_set_manul_network = FALSE;
347 ad->b_set_auto_network = FALSE;
348 setting_network_update_sel_network(ad);
350 if (ad->view_to_load == &setting_view_network_select_network) {
352 evas_object_del(ad->ly_main);
356 elm_naviframe_item_pop(ad->navi_bar);
358 /* elm_naviframe_item_pop(ad->navi_bar); */
360 /*Following handlers will be used by async listening callback. They must be reset after genlist is 'popuped'. */
361 ad->data_auto_network_item = NULL;
362 /*data_sel_net was created in main view, it won't be destoryed. */
363 /*ad->data_sel_net = NULL; */
364 setting_view_network_select_network.is_create = FALSE;
366 return SETTING_RETURN_SUCCESS;
369 static int setting_network_select_network_update(void *cb)
373 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
375 /*SettingNetworkUG *ad = (SettingNetworkUG *) cb; */
376 /*elm_radio_value_set(ad->chk_sel, ad->sel_net); */
378 return SETTING_RETURN_SUCCESS;
381 static int setting_network_select_network_cleanup(void *cb)
384 return setting_network_select_network_destroy(cb);
387 /* ***************************************************
391 ***************************************************/
393 /* ***************************************************
397 ***************************************************/
400 setting_network_select_network_click_softkey_cancel_cb(void *data,
405 SettingNetworkUG *ad = (SettingNetworkUG *) data;
407 /* If registering.. popup is displaying, Back must be ignored. */
408 if (ad->network_select_registering_pop) {
409 SETTING_TRACE("registering... popup is displaying. back key ignored");
414 retm_if(data == NULL, "[Setting > Network > Select] Data parameter is NULL");
416 if (ad->view_to_load == &setting_view_network_select_network) {
418 ug_destroy_me(ad->ug);
421 setting_view_change(&setting_view_network_select_network,
422 &setting_view_network_main, ad);