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>
24 static int setting_network_preferred_network_list_create(void *cb);
25 static int setting_network_preferred_network_list_destroy(void *cb);
26 static int setting_network_preferred_network_list_update(void *cb);
27 static int setting_network_preferred_network_list_cleanup(void *cb);
29 static Evas_Object *__gl_network_radio_group = NULL;
30 static char *STR_SETTING_NETWORK_LIST = "IDS_ST_OPT_NETWORK_LIST";
32 setting_view setting_view_network_preferred_network_list = {
33 .create = setting_network_preferred_network_list_create,
34 .destroy = setting_network_preferred_network_list_destroy,
35 .update = setting_network_preferred_network_list_update,
36 .cleanup = setting_network_preferred_network_list_cleanup,
39 #define LIST_COUNT 100
40 #define MAX_PLMN_LEN 6
42 /* ***************************************************
46 ***************************************************/
48 static int gl_network_genlist_label_initialize(SettingNetworkUG *ad)
50 Elm_Object_Item *gl_item = NULL;
54 gl_item = elm_genlist_first_item_get(ad->gl_network);
56 sel_mem = (char *)elm_object_item_data_get(gl_item);
60 gl_item = elm_genlist_item_next_get(gl_item);
62 elm_genlist_clear(ad->gl_network);
67 return SETTING_RETURN_FAIL;
70 static char *gl_network_genlist_text_get(void *data, Evas_Object *obj,
75 struct gl_network_data *sel_mem = (struct gl_network_data *)data;
77 if (safeStrCmp(part, "elm.text") == 0) {
78 /* strcpy(buf, data); */
79 /* sprintf(buf, "<font color=#080808>%s</font>", sel_mem->name); */
80 snprintf(buf, sizeof(buf), "%s", sel_mem->name);
83 safeCopyStr(buf, "", strlen(""));
88 static void gl_network_genlist_delete(void *data, Evas_Object *obj)
90 struct gl_network_data *one_item = (struct gl_network_data *)data;
97 static Evas_Object *gl_network_getlist_content_get(void *data, Evas_Object *obj,
100 Evas_Object *radio = NULL;
101 struct gl_network_data *sel_mem = (struct gl_network_data *)data;
103 if (safeStrCmp(part, "elm.swallow.end") == 0
104 || safeStrCmp(part, "elm.icon") == 0) {
105 radio = elm_radio_add(obj);
106 retv_if(radio == NULL, NULL);
107 elm_radio_state_value_set(radio, sel_mem->index);
108 elm_radio_group_add(radio, __gl_network_radio_group);
113 static void gl_network_genlist_select(void *data, Evas_Object *obj,
116 SettingNetworkUG *ad = (SettingNetworkUG *) data;
117 Elm_Object_Item *item = NULL;
118 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
119 item = (Elm_Object_Item *) event_info;
120 elm_genlist_item_selected_set(item, 0);
123 (struct gl_network_data *)elm_object_item_data_get(item);
125 if (ad->cur_sel_mem == NULL) {
129 ad->cur_sel_index = ad->cur_sel_mem->index;
130 elm_radio_value_set(__gl_network_radio_group, ad->cur_sel_index);
131 /* SETTING_TRACE_WARNING("******sel_mem->index = %d, elm_radio_value_get = %d", ad->cur_sel_index, elm_radio_value_get(__gl_network_radio_group)); */
135 static void __get_preferred_network_list_item_name(char *name,
136 settings_preferred_network_table
139 setting_retm_if(NULL == name, "NULL == name")
140 const char *nw_type_str = NULL;
141 switch (network.nw_type) {
142 case SETTING_PREFERRED_NETWORK_TYPE_GSM_900: {
143 nw_type_str = "GSM900";
146 case SETTING_PREFERRED_NETWORK_TYPE_DCS_1800: {
150 case SETTING_PREFERRED_NETWORK_TYPE_PCS_1900: {
154 case SETTING_PREFERRED_NETWORK_TYPE_GSM_SAT: {
155 nw_type_str = "GSMSAT";
158 case SETTING_PREFERRED_NETWORK_TYPE_GSM_850: {
159 nw_type_str = "GSM850";
162 case SETTING_PREFERRED_NETWORK_TYPE_UMTS: {
163 nw_type_str = "UMTS";
171 snprintf(name, 255, "%s (%s)", network.short_name_ptr, nw_type_str);
174 static Eina_Bool __genlist_update(void *data)
177 setting_retvm_if(NULL == data, 0, "NULL == data")
179 SettingNetworkUG *ad = (SettingNetworkUG *) data;
180 const char *match_str = NULL;
182 SETTING_TRACE("match_str:%s", match_str);
184 struct gl_network_data *one_item;
185 elm_genlist_clear(ad->gl_network);
187 int items = (sizeof(network_table) / sizeof(network_table[0]));
188 for (i = 0; i < items; i++) {
190 (struct gl_network_data *)calloc(1,
193 setting_retvm_if(!one_item, FALSE, "calloc failed");
195 /* one_item->name = __get_preferred_network_list_item_name(network_table[i]); */
196 __get_preferred_network_list_item_name(one_item->name,
199 if ('\0' == ad->search_text[0]
200 || ('\0' == one_item->name[0] && is_substr_ncase(one_item->name, ad->search_text))) { /* is substring */
201 /* SETTING_TRACE("Adding item[%s]", one_item->name); */
202 /* SETTING_TRACE("ad->gl_network:%p", ad->gl_network); */
203 elm_genlist_item_append(ad->gl_network, &ad->itc,
205 ELM_GENLIST_ITEM_NONE,
206 gl_network_genlist_select,
212 ad->add_view_timer = NULL;
216 /* ***search bar****/
217 static void __searchbar_changed_cb(void *data, Evas_Object *obj,
221 setting_retm_if(NULL == data, "NULL == data")
223 SettingNetworkUG *ad = (SettingNetworkUG *) data;
225 if (elm_object_focus_get(ad->nw_search_bar)) {
226 if (elm_entry_is_empty(obj))
227 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,hide", "elm");
229 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,show", "elm");
232 const char *str = elm_object_text_get(obj);
233 /* SETTING_TRACE("the string in searchbar:%s, len(str):%d", str, strlen(str)); */
234 /* SETTING_TRACE("ad->search_text: %s", ad->search_text); */
237 SETTING_TRACE_ERROR("Searchbar text is NULL!");
240 /* if(!safeStrCmp(str, dgettext("sys_string", "IDS_ST_BODY_SEARCH"))) return; */
241 if (!safeStrCmp(str, ad->search_text)) {
244 /* Evas_Object *entry = elm_searchbar_entry_get(ad->nw_search_bar); */
246 if (strlen(str) > MAX_SEARCH_STR_LEN) {
247 /* the content of entry won't change if enter too many characters */
248 elm_object_text_set(obj, ad->search_text);
249 /* elm_entry_cursor_end_set(entry); */
250 /* if input too long, show popup */
251 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Input too long!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
256 memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1);
257 safeCopyStr(ad->search_text, str, MAX_SEARCH_STR_LEN);
259 /* SETTING_TRACE("ad->search_text:%s", ad->search_text); */
260 /* if(safeStrCmp(ad->search_text, dgettext("sys_string", "IDS_ST_BODY_SEARCH"))) */
262 SETTING_TRACE("Update the search view text, search_text=%s",
265 if (ad->add_view_timer) {
266 /* ecore_idler_del(ad->add_view_timer); */
267 /* ad->add_view_timer = NULL; */
270 ad->add_view_timer = ecore_idler_add(__genlist_update, ad);
275 static void __searchbar_cancel_clicked_cb(void *data, Evas_Object *obj,
279 SettingNetworkUG *ad = (SettingNetworkUG *) data;
281 /* memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1); */
282 /* safeCopyStr(ad->search_text, dgettext("sys_string", "IDS_ST_BODY_SEARCH"), MAX_SEARCH_STR_LEN); */
283 /* elm_searchbar_text_set(ad->nw_search_bar, dgettext("sys_string", "IDS_ST_BODY_SEARCH")); */
285 Evas_Object *entry = elm_object_part_content_get(ad->nw_search_bar, "elm.swallow.content");
286 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(entry);
288 ecore_imf_context_input_panel_hide(imf_context);
290 /* ad->add_view_timer = ecore_idler_add(__genlist_update, ad); */
294 static void __searchbar_focused_cb(void *data, Evas_Object *obj,
298 setting_retm_if(NULL == data, "NULL == data");
299 SettingNetworkUG *ad = (SettingNetworkUG *) data;
301 if (!elm_entry_is_empty(obj))
302 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,show", "elm");
303 elm_object_signal_emit(ad->nw_search_bar, "elm,state,guidetext,hide", "elm");
304 elm_object_signal_emit(ad->nw_search_bar, "cancel,in", "");
307 static Evas_Object *__add_searchbar_add(Evas_Object *parent, void *data)
310 setting_retvm_if(NULL == data, NULL, "NULL == data");
312 Evas_Object *searchbar_layout = elm_layout_add(parent);
313 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
315 Evas_Object *entry = elm_entry_add(searchbar_layout);
316 elm_entry_scrollable_set(entry, EINA_TRUE);
317 elm_entry_single_line_set(entry, EINA_TRUE);
318 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
319 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
320 elm_object_part_text_set(searchbar_layout, "elm.guidetext", dgettext("sys_string", "IDS_ST_BODY_SEARCH"));
322 evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, 0);
323 evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, 0.0);
324 evas_object_size_hint_min_set(searchbar_layout, ELM_SCALE_SIZE(480), ELM_SCALE_SIZE(66));
326 evas_object_smart_callback_add(entry, "changed", __searchbar_changed_cb, data);
327 evas_object_smart_callback_add(entry, "focused", __searchbar_focused_cb, data);
329 Evas_Object *cancel_btn = elm_button_add(searchbar_layout);
330 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
331 elm_object_style_set(cancel_btn, "searchbar/default");
332 /*elm_object_text_set(cancel_btn, "Cancel"); */
334 evas_object_smart_callback_add(cancel_btn, "clicked",
335 __searchbar_cancel_clicked_cb, data);
337 edje_object_part_swallow(_EDJ(parent), "search_bar", searchbar_layout);
339 return searchbar_layout;
344 static int setting_network_preferred_network_list_create(void *cb)
348 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
350 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
352 Evas_Object *sub_layout = elm_layout_add(ad->win_main_layout);
353 elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME,
355 evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
356 evas_object_show(sub_layout);
358 /* add basic layout */
359 setting_push_layout_navi_bar(_(STR_SETTING_NETWORK_LIST),
360 dgettext("sys_string", "IDS_ST_BUTTON_CANCEL_ABB"),
361 dgettext("sys_string", "IDS_COM_ADD"),
363 setting_network_preferred_network_list_click_softkey_cancel,
364 setting_network_preferred_network_list_click_softkey_add,
365 NULL, ad, sub_layout, ad->navi_bar, NULL);
367 Evas_Object *gl_network = NULL;
368 gl_network_genlist_label_initialize(ad);
370 ad->cur_sel_index = -1;
371 ad->itc.item_style = "1text.1icon.2";
372 ad->itc.func.text_get = gl_network_genlist_text_get;
373 ad->itc.func.content_get = gl_network_getlist_content_get;
374 ad->itc.func.state_get = NULL;
375 ad->itc.func.del = gl_network_genlist_delete;
377 ad->gl_network = gl_network = elm_genlist_add(ad->win_main_layout);
378 retvm_if(ad->gl_network == NULL, SETTING_RETURN_FAIL,
379 "ad->gl_network == NULL");
380 //elm_genlist_realization_mode_set(ad->gl_network, EINA_TRUE);
381 elm_object_style_set(ad->gl_network, "dialogue");
382 elm_genlist_clear(gl_network);
383 evas_object_show(gl_network);
384 evas_object_smart_callback_add(ad->gl_network, "realized", __gl_realized_cb, NULL);
386 __gl_network_radio_group = elm_radio_add(ad->win_main_layout);
387 elm_radio_state_value_set(__gl_network_radio_group, -1);
389 ad->nw_search_bar = __add_searchbar_add(sub_layout, ad);
390 edje_object_part_swallow(_EDJ(sub_layout), "search_list",
392 __genlist_update(ad);
394 elm_radio_value_set(__gl_network_radio_group, -100);
395 setting_view_network_preferred_network_list.is_create = 1;
397 return SETTING_RETURN_SUCCESS;
400 static int setting_network_preferred_network_list_destroy(void *cb)
404 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
406 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
407 if (__gl_network_radio_group != NULL) {
408 evas_object_del(__gl_network_radio_group);
410 if (ad->gl_network != NULL) {
411 elm_genlist_clear(ad->gl_network);
412 evas_object_del(ad->gl_network);
413 ad->gl_network = NULL;
415 if (ad->add_view_timer) {
416 ecore_idler_del(ad->add_view_timer);
417 ad->add_view_timer = NULL;
419 elm_naviframe_item_pop(ad->navi_bar);
420 setting_view_network_preferred_network_list.is_create = 0;
422 return SETTING_RETURN_SUCCESS;
425 static int setting_network_preferred_network_list_update(void *cb)
429 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
431 /* SettingNetworkUG *ad = (SettingNetworkUG*)cb; */
433 /* change background style */
435 /* elm_object_style_set(ad->bg, "list"); */
437 return SETTING_RETURN_SUCCESS;
440 static int setting_network_preferred_network_list_cleanup(void *cb)
442 return setting_network_preferred_network_list_destroy(cb);
445 /* ***************************************************
449 ***************************************************/
451 /* ***************************************************
455 ***************************************************/
458 setting_network_preferred_network_list_click_softkey_cancel(void *data,
464 retm_if(data == NULL,
465 "[Setting > Network > Preferred list] Data parameter is NULL");
467 SettingNetworkUG *ad = (SettingNetworkUG *) data;
469 setting_view_change(&setting_view_network_preferred_network_list,
470 &setting_view_network_preferred_network, ad);
474 setting_network_preferred_network_list_click_softkey_add(void *data,
480 retm_if(data == NULL,
481 "[Setting > Network > Preferred list] Data parameter is NULL");
483 SettingNetworkUG *ad = (SettingNetworkUG *) data;
486 int tapi_ret = TAPI_API_SUCCESS;
487 TelNetworkPreferredPlmnInfo_t pref_plmn_info = { 0, };
489 /* sel = ad->cur_sel_index; */
490 sel = elm_radio_value_get(__gl_network_radio_group);
492 ("setting_network_preferred_network_list_click_softkey_add: sel = %d",
496 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Please select item(s) to process!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
501 /* sprintf((char *)pref_plmn_info.Plmn, "%d", network_table[sel].mcc); */
502 /* sprintf((char *)pref_plmn_info.Plmn+3, "%d", network_table[sel].mnc); */
504 ret = snprintf((char *)pref_plmn_info.Plmn, MAX_PLMN_LEN / 2, "%d",
505 network_table[sel].mcc);
508 ret = snprintf((char *)pref_plmn_info.Plmn + (MAX_PLMN_LEN / 2),
509 MAX_PLMN_LEN / 2, "%d", network_table[sel].mnc);
512 SETTING_TRACE("selected item is:%s", network_table[sel].short_name_ptr);
514 switch (network_table[sel].nw_type) {
515 case SETTING_PREFERRED_NETWORK_TYPE_GSM_900:
516 case SETTING_PREFERRED_NETWORK_TYPE_DCS_1800:
517 case SETTING_PREFERRED_NETWORK_TYPE_PCS_1900:
518 case SETTING_PREFERRED_NETWORK_TYPE_GSM_SAT:
519 case SETTING_PREFERRED_NETWORK_TYPE_GSM_850:
520 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_GSM;
523 case SETTING_PREFERRED_NETWORK_TYPE_UMTS:
524 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_UMTS;
530 pref_plmn_info.Index =
531 ad->pref_list.PrefPlmnRecord[ad->pref_list.NumOfPrefPlmns -
535 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_SAVING"),
536 NULL, 0.0, TRUE, TRUE);
537 SETTING_TRACE_DEBUG("%s*** plmn=%s, index=%d ***%s",
538 SETTING_FONT_BGREEN, pref_plmn_info.Plmn,
539 (int)(pref_plmn_info.Index), SETTING_FONT_BLACK);
542 tel_set_network_preferred_plmn(ad->handle, TAPI_NETWORK_PREF_PLMN_ADD,
543 &pref_plmn_info, setting_tapi_set_preferred_plmn_cb, ad);
544 if (tapi_ret != TAPI_API_SUCCESS) {
546 ("%s*** [ERR] tel_set_network_preferred_plmn(PLMN_ADD) err=%d ***%s",
547 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
548 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Save Failed!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
551 ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_LIST;