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-preferred-network-list.h>
23 static int setting_network_preferred_network_list_create(void *cb);
24 static int setting_network_preferred_network_list_destroy(void *cb);
25 static int setting_network_preferred_network_list_update(void *cb);
26 static int setting_network_preferred_network_list_cleanup(void *cb);
28 static Evas_Object *__gl_network_radio_group = NULL;
30 setting_view setting_view_network_preferred_network_list = {
31 .create = setting_network_preferred_network_list_create,
32 .destroy = setting_network_preferred_network_list_destroy,
33 .update = setting_network_preferred_network_list_update,
34 .cleanup = setting_network_preferred_network_list_cleanup,
37 #define LIST_COUNT 100
38 #define MAX_PLMN_LEN 6
40 /* ***************************************************
44 ***************************************************/
46 static int gl_network_genlist_label_initialize(SettingNetworkUG *ad)
48 Elm_Object_Item *gl_item = NULL;
52 gl_item = elm_genlist_first_item_get(ad->gl_network);
54 sel_mem = (char *)elm_object_item_data_get(gl_item);
58 gl_item = elm_genlist_item_next_get(gl_item);
60 elm_genlist_clear(ad->gl_network);
65 return SETTING_RETURN_FAIL;
68 static char *gl_network_genlist_text_get(void *data, Evas_Object *obj,
73 struct gl_network_data *sel_mem = (struct gl_network_data *)data;
75 if (safeStrCmp(part, "elm.text") == 0) {
76 /* strcpy(buf, data); */
77 /* sprintf(buf, "<font color=#000000>%s</font>", sel_mem->name); */
78 snprintf(buf, sizeof(buf), "%s", sel_mem->name);
81 safeCopyStr(buf, "", strlen(""));
86 static void gl_network_genlist_delete(void *data, Evas_Object *obj)
88 struct gl_network_data *one_item = (struct gl_network_data *)data;
95 static Evas_Object *gl_network_getlist_content_get(void *data, Evas_Object *obj,
98 Evas_Object *radio = NULL;
99 struct gl_network_data *sel_mem = (struct gl_network_data *)data;
101 if (safeStrCmp(part, "elm.swallow.end") == 0
102 || safeStrCmp(part, "elm.icon") == 0) {
103 radio = elm_radio_add(obj);
104 retv_if(radio == NULL, NULL);
105 elm_radio_state_value_set(radio, sel_mem->index);
106 elm_radio_group_add(radio, __gl_network_radio_group);
111 static void gl_network_genlist_select(void *data, Evas_Object *obj,
114 SettingNetworkUG *ad = (SettingNetworkUG *) data;
115 Elm_Object_Item *item = NULL;
116 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
117 item = (Elm_Object_Item *) event_info;
118 elm_genlist_item_selected_set(item, 0);
121 (struct gl_network_data *)elm_object_item_data_get(item);
123 if (ad->cur_sel_mem == NULL) {
127 ad->cur_sel_index = ad->cur_sel_mem->index;
128 elm_radio_value_set(__gl_network_radio_group, ad->cur_sel_index);
129 /* SETTING_TRACE_WARNING("******sel_mem->index = %d, elm_radio_value_get = %d", ad->cur_sel_index, elm_radio_value_get(__gl_network_radio_group)); */
133 static void __get_preferred_network_list_item_name(char *name,
134 settings_preferred_network_table
137 setting_retm_if(NULL == name, "NULL == name")
138 const char *nw_type_str = NULL;
139 switch (network.nw_type) {
140 case SETTING_PREFERRED_NETWORK_TYPE_GSM_900:
142 nw_type_str = "GSM900";
145 case SETTING_PREFERRED_NETWORK_TYPE_DCS_1800:
150 case SETTING_PREFERRED_NETWORK_TYPE_PCS_1900:
155 case SETTING_PREFERRED_NETWORK_TYPE_GSM_SAT:
157 nw_type_str = "GSMSAT";
160 case SETTING_PREFERRED_NETWORK_TYPE_GSM_850:
162 nw_type_str = "GSM850";
165 case SETTING_PREFERRED_NETWORK_TYPE_UMTS:
167 nw_type_str = "UMTS";
176 snprintf(name, 255, "%s (%s)", network.short_name_ptr, nw_type_str);
179 static Eina_Bool __genlist_update(void *data)
182 setting_retvm_if(NULL == data, 0, "NULL == data")
184 SettingNetworkUG *ad = (SettingNetworkUG *) data;
185 Elm_Object_Item *gl_item = NULL;
186 const char *match_str = NULL;
188 SETTING_TRACE("match_str:%s", match_str);
190 struct gl_network_data *one_item;
191 elm_genlist_clear(ad->gl_network);
193 int items = (sizeof(network_table) / sizeof(network_table[0]));
194 for (i = 0; i < items; i++) {
196 (struct gl_network_data *)calloc(1,
199 setting_retvm_if(!one_item, FALSE, "calloc failed");
201 /* one_item->name = __get_preferred_network_list_item_name(network_table[i]); */
202 __get_preferred_network_list_item_name(one_item->name,
205 if ('\0' == ad->search_text[0]
206 || (one_item->name && is_substr_ncase(one_item->name, ad->search_text))) { /* is substring */
207 /* SETTING_TRACE("Adding item[%s]", one_item->name); */
208 /* SETTING_TRACE("ad->gl_network:%p", ad->gl_network); */
210 elm_genlist_item_append(ad->gl_network, &ad->itc,
212 ELM_GENLIST_ITEM_NONE,
213 gl_network_genlist_select,
219 ad->add_view_timer = NULL;
223 /* ***search bar****/
224 static void __searchbar_changed_cb(void *data, Evas_Object *obj,
228 setting_retm_if(NULL == data, "NULL == data")
230 SettingNetworkUG *ad = (SettingNetworkUG *) data;
232 if (elm_object_focus_get(ad->nw_search_bar)) {
233 if (elm_entry_is_empty(obj))
234 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,hide", "elm");
236 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,show", "elm");
239 const char *str = elm_object_text_get(obj);
240 /* SETTING_TRACE("the string in searchbar:%s, len(str):%d", str, strlen(str)); */
241 /* SETTING_TRACE("ad->search_text: %s", ad->search_text); */
244 SETTING_TRACE_ERROR("Searchbar text is NULL!");
247 /* if(!safeStrCmp(str, dgettext("sys_string", "IDS_COM_SK_SEARCH"))) return; */
248 if (!safeStrCmp(str, ad->search_text)) {
251 /* Evas_Object *entry = elm_searchbar_entry_get(ad->nw_search_bar); */
253 if (strlen(str) > MAX_SEARCH_STR_LEN) {
254 /* the content of entry won't change if enter too many characters */
255 elm_object_text_set(obj, ad->search_text);
256 /* elm_entry_cursor_end_set(entry); */
257 /* if input too long, show popup */
258 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Input too long!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
263 memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1);
264 safeCopyStr(ad->search_text, str, MAX_SEARCH_STR_LEN);
266 /* SETTING_TRACE("ad->search_text:%s", ad->search_text); */
267 /* if(safeStrCmp(ad->search_text, dgettext("sys_string", "IDS_COM_SK_SEARCH"))) */
269 SETTING_TRACE("Update the search view text, search_text=%s",
272 if (ad->add_view_timer) {
273 /* ecore_idler_del(ad->add_view_timer); */
274 /* ad->add_view_timer = NULL; */
277 ad->add_view_timer = ecore_idler_add(__genlist_update, ad);
282 static void __searchbar_cancel_clicked_cb(void *data, Evas_Object *obj,
286 SettingNetworkUG *ad = (SettingNetworkUG *) data;
288 /* memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1); */
289 /* safeCopyStr(ad->search_text, dgettext("sys_string", "IDS_COM_SK_SEARCH"), MAX_SEARCH_STR_LEN); */
290 /* elm_searchbar_text_set(ad->nw_search_bar, dgettext("sys_string", "IDS_COM_SK_SEARCH")); */
292 Evas_Object *entry = elm_object_part_content_get(ad->nw_search_bar, "elm.swallow.content");
293 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context*)elm_entry_imf_context_get(entry);
295 ecore_imf_context_input_panel_hide(imf_context);
297 /* ad->add_view_timer = ecore_idler_add(__genlist_update, ad); */
301 static void __searchbar_focused_cb(void *data, Evas_Object *obj,
305 setting_retm_if(NULL == data, "NULL == data");
306 SettingNetworkUG *ad = (SettingNetworkUG *) data;
308 if (!elm_entry_is_empty(obj))
309 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,show", "elm");
310 elm_object_signal_emit(ad->nw_search_bar, "elm,state,guidetext,hide", "elm");
311 elm_object_signal_emit(ad->nw_search_bar, "cancel,in", "");
314 static Evas_Object *__add_searchbar_add(Evas_Object *parent, void *data)
317 setting_retvm_if(NULL == data, NULL, "NULL == data");
319 Evas_Object *searchbar_layout = elm_layout_add(parent);
320 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
322 Evas_Object *entry = elm_entry_add(searchbar_layout);
323 elm_entry_scrollable_set(entry, EINA_TRUE);
324 elm_entry_single_line_set(entry, EINA_TRUE);
325 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
326 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
327 elm_object_part_text_set(searchbar_layout, "elm.guidetext", dgettext("sys_string", "IDS_COM_SK_SEARCH"));
329 evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, 0);
330 evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, 0.0);
331 evas_object_size_hint_min_set(searchbar_layout, 480, 66);
333 evas_object_smart_callback_add(entry, "changed", __searchbar_changed_cb, data);
334 evas_object_smart_callback_add(entry, "focused", __searchbar_focused_cb, data);
336 Evas_Object *cancel_btn = elm_button_add(searchbar_layout);
337 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
338 elm_object_style_set(cancel_btn, "searchbar/default");
339 //elm_object_text_set(cancel_btn, "Cancel");
341 evas_object_smart_callback_add(cancel_btn, "clicked",
342 __searchbar_cancel_clicked_cb, data);
344 edje_object_part_swallow(_EDJ(parent), "search_bar", searchbar_layout);
346 return searchbar_layout;
349 static int setting_network_preferred_network_list_create(void *cb)
353 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
355 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
357 Evas_Object *sub_layout = elm_layout_add(ad->win_main_layout);
358 elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME,
360 evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
361 evas_object_show(sub_layout);
363 /* add basic layout */
364 setting_push_layout_navi_bar(_(STR_SETTING_NETWORK_LIST),
365 dgettext("sys_string", "IDS_COM_SK_CANCEL"),
366 dgettext("sys_string", "IDS_COM_ADD"),
368 setting_network_preferred_network_list_click_softkey_cancel,
369 setting_network_preferred_network_list_click_softkey_add,
370 NULL, ad, sub_layout, ad->navi_bar, NULL);
372 Evas_Object *gl_network = NULL;
373 gl_network_genlist_label_initialize(ad);
375 ad->cur_sel_index = -1;
376 ad->itc.item_style = "1text.1icon.2";
377 ad->itc.func.text_get = gl_network_genlist_text_get;
378 ad->itc.func.content_get = gl_network_getlist_content_get;
379 ad->itc.func.state_get = NULL;
380 ad->itc.func.del = gl_network_genlist_delete;
382 ad->gl_network = gl_network = elm_genlist_add(ad->win_main_layout);
383 elm_object_style_set(ad->gl_network, "dialogue");
384 elm_genlist_clear(gl_network);
385 evas_object_show(gl_network);
387 __gl_network_radio_group = elm_radio_add(ad->win_main_layout);
388 elm_radio_state_value_set(__gl_network_radio_group, -1);
390 ad->nw_search_bar = __add_searchbar_add(sub_layout, ad);
391 edje_object_part_swallow(_EDJ(sub_layout), "search_list",
393 __genlist_update(ad);
395 elm_radio_value_set(__gl_network_radio_group, -100);
396 setting_view_network_preferred_network_list.is_create = 1;
398 return SETTING_RETURN_SUCCESS;
401 static int setting_network_preferred_network_list_destroy(void *cb)
405 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
407 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
408 if (__gl_network_radio_group != NULL) {
409 evas_object_del(__gl_network_radio_group);
411 if (ad->gl_network != NULL) {
412 elm_genlist_clear(ad->gl_network);
413 evas_object_del(ad->gl_network);
414 ad->gl_network = NULL;
416 if (ad->add_view_timer) {
417 ecore_idler_del(ad->add_view_timer);
418 ad->add_view_timer = NULL;
420 elm_naviframe_item_pop(ad->navi_bar);
421 setting_view_network_preferred_network_list.is_create = 0;
423 return SETTING_RETURN_SUCCESS;
426 static int setting_network_preferred_network_list_update(void *cb)
430 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
432 /* SettingNetworkUG *ad = (SettingNetworkUG*)cb; */
434 /* change background style */
436 /* elm_object_style_set(ad->bg, "list"); */
438 return SETTING_RETURN_SUCCESS;
441 static int setting_network_preferred_network_list_cleanup(void *cb)
443 return setting_network_preferred_network_list_destroy(cb);
446 /* ***************************************************
450 ***************************************************/
452 /* ***************************************************
456 ***************************************************/
459 setting_network_preferred_network_list_click_softkey_cancel(void *data,
465 retm_if(data == NULL,
466 "[Setting > Network > Preferred list] Data parameter is NULL");
468 SettingNetworkUG *ad = (SettingNetworkUG *) data;
470 setting_view_change(&setting_view_network_preferred_network_list,
471 &setting_view_network_preferred_network, ad);
475 setting_network_preferred_network_list_click_softkey_add(void *data,
481 retm_if(data == NULL,
482 "[Setting > Network > Preferred list] Data parameter is NULL");
484 SettingNetworkUG *ad = (SettingNetworkUG *) data;
487 int tapi_ret = TAPI_API_SUCCESS;
488 TelNetworkPreferredPlmnInfo_t pref_plmn_info = { 0, };
490 /* sel = ad->cur_sel_index; */
491 sel = elm_radio_value_get(__gl_network_radio_group);
493 ("setting_network_preferred_network_list_click_softkey_add: sel = %d",
497 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Please select item(s) to process!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
502 /* sprintf((char *)pref_plmn_info.Plmn, "%d", network_table[sel].mcc); */
503 /* sprintf((char *)pref_plmn_info.Plmn+3, "%d", network_table[sel].mnc); */
505 ret = snprintf((char *)pref_plmn_info.Plmn, MAX_PLMN_LEN / 2, "%d",
506 network_table[sel].mcc);
509 ret = snprintf((char *)pref_plmn_info.Plmn + (MAX_PLMN_LEN / 2),
510 MAX_PLMN_LEN / 2, "%d", network_table[sel].mnc);
513 SETTING_TRACE("selected item is:%s", network_table[sel].short_name_ptr);
515 switch (network_table[sel].nw_type) {
516 case SETTING_PREFERRED_NETWORK_TYPE_GSM_900:
517 case SETTING_PREFERRED_NETWORK_TYPE_DCS_1800:
518 case SETTING_PREFERRED_NETWORK_TYPE_PCS_1900:
519 case SETTING_PREFERRED_NETWORK_TYPE_GSM_SAT:
520 case SETTING_PREFERRED_NETWORK_TYPE_GSM_850:
521 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_GSM;
524 case SETTING_PREFERRED_NETWORK_TYPE_UMTS:
525 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_UMTS;
531 pref_plmn_info.Index =
532 ad->pref_list.PrefPlmnRecord[ad->pref_list.NumOfPrefPlmns -
536 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_SAVING"),
537 NULL, 0.0, TRUE, TRUE);
538 SETTING_TRACE_DEBUG("%s*** plmn=%s, index=%d ***%s",
539 SETTING_FONT_BGREEN, pref_plmn_info.Plmn,
540 (int)(pref_plmn_info.Index), SETTING_FONT_BLACK);
543 tel_set_network_preferred_plmn(ad->handle, TAPI_NETWORK_PREF_PLMN_ADD,
544 &pref_plmn_info, setting_tapi_set_preferred_plmn_cb, ad);
545 if (tapi_ret != TAPI_API_SUCCESS) {
547 ("%s*** [ERR] tel_set_network_preferred_plmn(PLMN_ADD) err=%d ***%s",
548 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
549 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Save Failed!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
552 ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_LIST;