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-preferred-network-list.h>
19 static int setting_network_preferred_network_list_create(void *cb);
20 static int setting_network_preferred_network_list_destroy(void *cb);
21 static int setting_network_preferred_network_list_update(void *cb);
22 static int setting_network_preferred_network_list_cleanup(void *cb);
24 static Evas_Object *__gl_network_radio_group = NULL;
26 setting_view setting_view_network_preferred_network_list = {
27 .create = setting_network_preferred_network_list_create,
28 .destroy = setting_network_preferred_network_list_destroy,
29 .update = setting_network_preferred_network_list_update,
30 .cleanup = setting_network_preferred_network_list_cleanup,
33 #define LIST_COUNT 100
34 #define MAX_PLMN_LEN 6
36 /* ***************************************************
40 ***************************************************/
42 static int gl_network_genlist_label_initialize(SettingNetworkUG *ad)
44 Elm_Object_Item *gl_item = NULL;
48 gl_item = elm_genlist_first_item_get(ad->gl_network);
50 sel_mem = (char *)elm_object_item_data_get(gl_item);
54 gl_item = elm_genlist_item_next_get(gl_item);
56 elm_genlist_clear(ad->gl_network);
61 return SETTING_RETURN_FAIL;
64 static char *gl_network_genlist_text_get(void *data, Evas_Object *obj,
69 struct gl_network_data *sel_mem = (struct gl_network_data *)data;
71 if (safeStrCmp(part, "elm.text") == 0) {
72 /* strcpy(buf, data); */
73 /* sprintf(buf, "<font color=#000000>%s</font>", sel_mem->name); */
74 snprintf(buf, sizeof(buf), "%s", sel_mem->name);
77 safeCopyStr(buf, "", strlen(""));
82 static void gl_network_genlist_delete(void *data, Evas_Object *obj)
84 struct gl_network_data *one_item = (struct gl_network_data *)data;
91 static Evas_Object *gl_network_getlist_content_get(void *data, Evas_Object *obj,
94 Evas_Object *radio = NULL;
95 struct gl_network_data *sel_mem = (struct gl_network_data *)data;
97 if (safeStrCmp(part, "elm.swallow.end") == 0
98 || safeStrCmp(part, "elm.icon") == 0) {
99 radio = elm_radio_add(obj);
100 retv_if(radio == NULL, NULL);
101 elm_radio_state_value_set(radio, sel_mem->index);
102 elm_radio_group_add(radio, __gl_network_radio_group);
107 static void gl_network_genlist_select(void *data, Evas_Object *obj,
110 SettingNetworkUG *ad = (SettingNetworkUG *) data;
111 Elm_Object_Item *item = NULL;
112 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
113 item = (Elm_Object_Item *) event_info;
114 elm_genlist_item_selected_set(item, 0);
117 (struct gl_network_data *)elm_object_item_data_get(item);
119 if (ad->cur_sel_mem == NULL) {
123 ad->cur_sel_index = ad->cur_sel_mem->index;
124 elm_radio_value_set(__gl_network_radio_group, ad->cur_sel_index);
125 /* SETTING_TRACE_WARNING("******sel_mem->index = %d, elm_radio_value_get = %d", ad->cur_sel_index, elm_radio_value_get(__gl_network_radio_group)); */
129 static void __get_preferred_network_list_item_name(char *name,
130 settings_preferred_network_table
133 setting_retm_if(NULL == name, "NULL == name")
134 const char *nw_type_str = NULL;
135 switch (network.nw_type) {
136 case SETTING_PREFERRED_NETWORK_TYPE_GSM_900:
138 nw_type_str = "GSM900";
141 case SETTING_PREFERRED_NETWORK_TYPE_DCS_1800:
146 case SETTING_PREFERRED_NETWORK_TYPE_PCS_1900:
151 case SETTING_PREFERRED_NETWORK_TYPE_GSM_SAT:
153 nw_type_str = "GSMSAT";
156 case SETTING_PREFERRED_NETWORK_TYPE_GSM_850:
158 nw_type_str = "GSM850";
161 case SETTING_PREFERRED_NETWORK_TYPE_UMTS:
163 nw_type_str = "UMTS";
172 snprintf(name, 255, "%s (%s)", network.short_name_ptr, nw_type_str);
175 static Eina_Bool __genlist_update(void *data)
178 setting_retvm_if(NULL == data, 0, "NULL == data")
180 SettingNetworkUG *ad = (SettingNetworkUG *) data;
181 Elm_Object_Item *gl_item = NULL;
182 const char *match_str = NULL;
184 SETTING_TRACE("match_str:%s", match_str);
186 struct gl_network_data *one_item;
187 elm_genlist_clear(ad->gl_network);
189 int items = (sizeof(network_table) / sizeof(network_table[0]));
190 for (i = 0; i < items; i++) {
192 (struct gl_network_data *)calloc(1,
195 setting_retvm_if(!one_item, FALSE, "calloc failed");
197 /* one_item->name = __get_preferred_network_list_item_name(network_table[i]); */
198 __get_preferred_network_list_item_name(one_item->name,
201 if ('\0' == ad->search_text[0]
202 || ('\0' == one_item->name[0] && is_substr_ncase(one_item->name, ad->search_text))) { /* is substring */
203 /* SETTING_TRACE("Adding item[%s]", one_item->name); */
204 /* SETTING_TRACE("ad->gl_network:%p", ad->gl_network); */
206 elm_genlist_item_append(ad->gl_network, &ad->itc,
208 ELM_GENLIST_ITEM_NONE,
209 gl_network_genlist_select,
215 ad->add_view_timer = NULL;
219 /* ***search bar****/
220 static void __searchbar_changed_cb(void *data, Evas_Object *obj,
224 setting_retm_if(NULL == data, "NULL == data")
226 SettingNetworkUG *ad = (SettingNetworkUG *) data;
228 if (elm_object_focus_get(ad->nw_search_bar)) {
229 if (elm_entry_is_empty(obj))
230 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,hide", "elm");
232 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,show", "elm");
235 const char *str = elm_object_text_get(obj);
236 /* SETTING_TRACE("the string in searchbar:%s, len(str):%d", str, strlen(str)); */
237 /* SETTING_TRACE("ad->search_text: %s", ad->search_text); */
240 SETTING_TRACE_ERROR("Searchbar text is NULL!");
243 /* if(!safeStrCmp(str, dgettext("sys_string", "IDS_COM_SK_SEARCH"))) return; */
244 if (!safeStrCmp(str, ad->search_text)) {
247 /* Evas_Object *entry = elm_searchbar_entry_get(ad->nw_search_bar); */
249 if (strlen(str) > MAX_SEARCH_STR_LEN) {
250 /* the content of entry won't change if enter too many characters */
251 elm_object_text_set(obj, ad->search_text);
252 /* elm_entry_cursor_end_set(entry); */
253 /* if input too long, show popup */
254 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Input too long!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
259 memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1);
260 safeCopyStr(ad->search_text, str, MAX_SEARCH_STR_LEN);
262 /* SETTING_TRACE("ad->search_text:%s", ad->search_text); */
263 /* if(safeStrCmp(ad->search_text, dgettext("sys_string", "IDS_COM_SK_SEARCH"))) */
265 SETTING_TRACE("Update the search view text, search_text=%s",
268 if (ad->add_view_timer) {
269 /* ecore_idler_del(ad->add_view_timer); */
270 /* ad->add_view_timer = NULL; */
273 ad->add_view_timer = ecore_idler_add(__genlist_update, ad);
278 static void __searchbar_cancel_clicked_cb(void *data, Evas_Object *obj,
282 SettingNetworkUG *ad = (SettingNetworkUG *) data;
284 /* memset(ad->search_text, '\0', MAX_SEARCH_STR_LEN + 1); */
285 /* safeCopyStr(ad->search_text, dgettext("sys_string", "IDS_COM_SK_SEARCH"), MAX_SEARCH_STR_LEN); */
286 /* elm_searchbar_text_set(ad->nw_search_bar, dgettext("sys_string", "IDS_COM_SK_SEARCH")); */
288 Evas_Object *entry = elm_object_part_content_get(ad->nw_search_bar, "elm.swallow.content");
289 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context*)elm_entry_imf_context_get(entry);
291 ecore_imf_context_input_panel_hide(imf_context);
293 /* ad->add_view_timer = ecore_idler_add(__genlist_update, ad); */
297 static void __searchbar_focused_cb(void *data, Evas_Object *obj,
301 setting_retm_if(NULL == data, "NULL == data");
302 SettingNetworkUG *ad = (SettingNetworkUG *) data;
304 if (!elm_entry_is_empty(obj))
305 elm_object_signal_emit(ad->nw_search_bar, "elm,state,eraser,show", "elm");
306 elm_object_signal_emit(ad->nw_search_bar, "elm,state,guidetext,hide", "elm");
307 elm_object_signal_emit(ad->nw_search_bar, "cancel,in", "");
310 static Evas_Object *__add_searchbar_add(Evas_Object *parent, void *data)
313 setting_retvm_if(NULL == data, NULL, "NULL == data");
315 Evas_Object *searchbar_layout = elm_layout_add(parent);
316 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
318 Evas_Object *entry = elm_entry_add(searchbar_layout);
319 elm_entry_scrollable_set(entry, EINA_TRUE);
320 elm_entry_single_line_set(entry, EINA_TRUE);
321 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
322 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
323 elm_object_part_text_set(searchbar_layout, "elm.guidetext", dgettext("sys_string", "IDS_COM_SK_SEARCH"));
325 evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, 0);
326 evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, 0.0);
327 evas_object_size_hint_min_set(searchbar_layout, 480, 66);
329 evas_object_smart_callback_add(entry, "changed", __searchbar_changed_cb, data);
330 evas_object_smart_callback_add(entry, "focused", __searchbar_focused_cb, data);
332 Evas_Object *cancel_btn = elm_button_add(searchbar_layout);
333 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
334 elm_object_style_set(cancel_btn, "searchbar/default");
335 //elm_object_text_set(cancel_btn, "Cancel");
337 evas_object_smart_callback_add(cancel_btn, "clicked",
338 __searchbar_cancel_clicked_cb, data);
340 edje_object_part_swallow(_EDJ(parent), "search_bar", searchbar_layout);
342 return searchbar_layout;
345 static int setting_network_preferred_network_list_create(void *cb)
349 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
351 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
353 Evas_Object *sub_layout = elm_layout_add(ad->win_main_layout);
354 elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME,
356 evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
357 evas_object_show(sub_layout);
359 /* add basic layout */
360 setting_push_layout_navi_bar(_(STR_SETTING_NETWORK_LIST),
361 dgettext("sys_string", "IDS_COM_SK_CANCEL"),
362 dgettext("sys_string", "IDS_COM_ADD"),
364 setting_network_preferred_network_list_click_softkey_cancel,
365 setting_network_preferred_network_list_click_softkey_add,
366 NULL, ad, sub_layout, ad->navi_bar, NULL);
368 Evas_Object *gl_network = NULL;
369 gl_network_genlist_label_initialize(ad);
371 ad->cur_sel_index = -1;
372 ad->itc.item_style = "1text.1icon.2";
373 ad->itc.func.text_get = gl_network_genlist_text_get;
374 ad->itc.func.content_get = gl_network_getlist_content_get;
375 ad->itc.func.state_get = NULL;
376 ad->itc.func.del = gl_network_genlist_delete;
378 ad->gl_network = gl_network = elm_genlist_add(ad->win_main_layout);
379 elm_object_style_set(ad->gl_network, "dialogue");
380 elm_genlist_clear(gl_network);
381 evas_object_show(gl_network);
383 __gl_network_radio_group = elm_radio_add(ad->win_main_layout);
384 elm_radio_state_value_set(__gl_network_radio_group, -1);
386 ad->nw_search_bar = __add_searchbar_add(sub_layout, ad);
387 edje_object_part_swallow(_EDJ(sub_layout), "search_list",
389 __genlist_update(ad);
391 elm_radio_value_set(__gl_network_radio_group, -100);
392 setting_view_network_preferred_network_list.is_create = 1;
394 return SETTING_RETURN_SUCCESS;
397 static int setting_network_preferred_network_list_destroy(void *cb)
401 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
403 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
404 if (__gl_network_radio_group != NULL) {
405 evas_object_del(__gl_network_radio_group);
407 if (ad->gl_network != NULL) {
408 elm_genlist_clear(ad->gl_network);
409 evas_object_del(ad->gl_network);
410 ad->gl_network = NULL;
412 if (ad->add_view_timer) {
413 ecore_idler_del(ad->add_view_timer);
414 ad->add_view_timer = NULL;
416 elm_naviframe_item_pop(ad->navi_bar);
417 setting_view_network_preferred_network_list.is_create = 0;
419 return SETTING_RETURN_SUCCESS;
422 static int setting_network_preferred_network_list_update(void *cb)
426 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
428 /* SettingNetworkUG *ad = (SettingNetworkUG*)cb; */
430 /* change background style */
432 /* elm_object_style_set(ad->bg, "list"); */
434 return SETTING_RETURN_SUCCESS;
437 static int setting_network_preferred_network_list_cleanup(void *cb)
439 return setting_network_preferred_network_list_destroy(cb);
442 /* ***************************************************
446 ***************************************************/
448 /* ***************************************************
452 ***************************************************/
455 setting_network_preferred_network_list_click_softkey_cancel(void *data,
461 retm_if(data == NULL,
462 "[Setting > Network > Preferred list] Data parameter is NULL");
464 SettingNetworkUG *ad = (SettingNetworkUG *) data;
466 setting_view_change(&setting_view_network_preferred_network_list,
467 &setting_view_network_preferred_network, ad);
471 setting_network_preferred_network_list_click_softkey_add(void *data,
477 retm_if(data == NULL,
478 "[Setting > Network > Preferred list] Data parameter is NULL");
480 SettingNetworkUG *ad = (SettingNetworkUG *) data;
483 int tapi_ret = TAPI_API_SUCCESS;
484 TelNetworkPreferredPlmnInfo_t pref_plmn_info = { 0, };
486 /* sel = ad->cur_sel_index; */
487 sel = elm_radio_value_get(__gl_network_radio_group);
489 ("setting_network_preferred_network_list_click_softkey_add: sel = %d",
493 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Please select item(s) to process!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
498 /* sprintf((char *)pref_plmn_info.Plmn, "%d", network_table[sel].mcc); */
499 /* sprintf((char *)pref_plmn_info.Plmn+3, "%d", network_table[sel].mnc); */
501 ret = snprintf((char *)pref_plmn_info.Plmn, MAX_PLMN_LEN / 2, "%d",
502 network_table[sel].mcc);
505 ret = snprintf((char *)pref_plmn_info.Plmn + (MAX_PLMN_LEN / 2),
506 MAX_PLMN_LEN / 2, "%d", network_table[sel].mnc);
509 SETTING_TRACE("selected item is:%s", network_table[sel].short_name_ptr);
511 switch (network_table[sel].nw_type) {
512 case SETTING_PREFERRED_NETWORK_TYPE_GSM_900:
513 case SETTING_PREFERRED_NETWORK_TYPE_DCS_1800:
514 case SETTING_PREFERRED_NETWORK_TYPE_PCS_1900:
515 case SETTING_PREFERRED_NETWORK_TYPE_GSM_SAT:
516 case SETTING_PREFERRED_NETWORK_TYPE_GSM_850:
517 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_GSM;
520 case SETTING_PREFERRED_NETWORK_TYPE_UMTS:
521 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_UMTS;
527 pref_plmn_info.Index =
528 ad->pref_list.PrefPlmnRecord[ad->pref_list.NumOfPrefPlmns -
532 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_SAVING"),
533 NULL, 0.0, TRUE, TRUE);
534 SETTING_TRACE_DEBUG("%s*** plmn=%s, index=%d ***%s",
535 SETTING_FONT_BGREEN, pref_plmn_info.Plmn,
536 (int)(pref_plmn_info.Index), SETTING_FONT_BLACK);
539 tel_set_network_preferred_plmn(ad->handle, TAPI_NETWORK_PREF_PLMN_ADD,
540 &pref_plmn_info, setting_tapi_set_preferred_plmn_cb, ad);
541 if (tapi_ret != TAPI_API_SUCCESS) {
543 ("%s*** [ERR] tel_set_network_preferred_plmn(PLMN_ADD) err=%d ***%s",
544 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
545 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Save Failed!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
548 ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_LIST;