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-connection-create.h>
23 static int setting_network_connection_create(void *cb);
24 static int setting_network_connection_destroy(void *cb);
25 static int setting_network_connection_update(void *cb);
26 static int setting_network_connection_cleanup(void *cb);
28 setting_view setting_view_network_connection_create = {
29 .create = setting_network_connection_create,
30 .destroy = setting_network_connection_destroy,
31 .update = setting_network_connection_update,
32 .cleanup = setting_network_connection_cleanup,
35 SettingNetworkUG *g_networkUG = NULL;
36 #define SUPPORT_EXPANDABLE_AUTHTYPE 1
37 #define URL_HEAD "http://"
38 /* ***************************************************
42 ***************************************************/
45 __network_connection_gl_mouse_up(void *data, Evas *e, Evas_Object *obj,
49 SettingNetworkUG *ad = (SettingNetworkUG *) data;
51 if (ad->data_acs_name) {
52 setting_hide_input_pannel_cb(ad->data_acs_name->eo_check);
54 if (ad->data_user_name) {
55 setting_hide_input_pannel_cb(ad->data_user_name->eo_check);
58 setting_hide_input_pannel_cb(ad->data_pwd->eo_check);
60 if (ad->data_pxy_addr) {
61 setting_hide_input_pannel_cb(ad->data_pxy_addr->eo_check);
63 if (ad->data_pxy_port) {
64 setting_hide_input_pannel_cb(ad->data_pxy_port->eo_check);
66 if (ad->data_hm_url) {
67 setting_hide_input_pannel_cb(ad->data_hm_url->eo_check);
72 void __sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
75 retm_if(data == NULL, "Data parameter is NULL");
76 Setting_GenGroupItem_Data *list_item =
77 (Setting_GenGroupItem_Data *) data;
78 list_item->chk_status = elm_radio_value_get(obj); /* for update */
80 Elm_Object_Item *subItem = list_item->item;
81 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
83 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subItem); /* subItem data */
84 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
86 ret_if(NULL == data_subItem || NULL == data_parentItem);
88 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
89 elm_object_item_data_set(data_parentItem->item, data_parentItem);
90 elm_genlist_item_update(data_parentItem->item);
91 setting_network_edit_connection_display_auth_type
92 (data_parentItem->userdata, list_item->chk_status);
95 void __sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
99 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
100 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
101 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
102 elm_genlist_item_selected_set(subitem, 0);
103 Setting_GenGroupItem_Data *data_subItem =
104 elm_object_item_data_get(subitem);
105 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
106 ret_if(NULL == data_subItem || NULL == data_parentItem);
108 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
110 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
111 elm_object_item_data_set(data_parentItem->item, data_parentItem);
112 elm_genlist_item_update(data_parentItem->item);
113 setting_network_edit_connection_display_auth_type(data,
114 data_subItem->chk_status);
117 static void __setting_network_connection_exp_cb(void *data, Evas_Object *obj,
120 ret_if(NULL == data || NULL == event_info);
122 SettingNetworkUG *ad = (SettingNetworkUG *) data;
123 Elm_Object_Item *parentItem = event_info; /* parent item */
124 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
125 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
128 if (data_parentItem == ad->data_auth_type) {
129 rgd = elm_radio_add(scroller);
130 elm_radio_value_set(rgd, -1);
132 setting_create_Gendial_exp_sub_field(scroller,
133 &itc_1icon_1text_sub,
134 __sub_list_sel_cb, ad,
136 SWALLOW_Type_1RADIO, rgd,
139 __sub_list_rd_change);
141 setting_create_Gendial_exp_sub_field(scroller,
142 &itc_1icon_1text_sub,
143 __sub_list_sel_cb, ad,
145 SWALLOW_Type_1RADIO, rgd,
148 __sub_list_rd_change);
150 setting_create_Gendial_exp_sub_field(scroller,
151 &itc_1icon_1text_sub,
152 __sub_list_sel_cb, ad,
154 SWALLOW_Type_1RADIO, rgd,
157 __sub_list_rd_change);
159 elm_radio_value_set(rgd, ad->chkType);
163 static void __genlist_disable_set(Evas_Object *genlist, bool disabled)
167 Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
168 for(;item != elm_genlist_last_item_get(genlist);
169 item = elm_genlist_item_next_get(item))
171 elm_object_item_disabled_set(item, disabled);
173 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
174 if (item_data == NULL) {
175 SETTING_TRACE("item_data is null");
178 if (item_data->swallow_type == SWALLOW_Type_LAYOUT_ENTRY) {
179 elm_entry_context_menu_disabled_set(item_data->eo_check, disabled);
181 //elm_object_item_signal_emit(item, "elm,state,enabled", "elm");
183 elm_object_item_disabled_set(item, disabled);//the last one item
184 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
185 if (item_data == NULL) {
186 SETTING_TRACE("item_data is null");
189 if (item_data->swallow_type == SWALLOW_Type_LAYOUT_ENTRY) {
190 elm_entry_context_menu_disabled_set(item_data->eo_check, disabled);
193 static Eina_Bool __connection_idler(void *data)
196 retv_if (!data, FALSE);
197 SettingNetworkUG *ad = data;
198 __genlist_disable_set(ad->scl_edit, TRUE);
199 setting_network_connection_hide_input_pannel(ad);
202 void __get_connection_info(void *cb)
206 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
208 ad->ed_acs_name_desc = NULL;
209 ad->ed_user_name_desc = NULL;
210 ad->ed_pwd_desc = NULL;
211 G_FREE(ad->ed_pxy_addr_desc);
212 G_FREE(ad->ed_pxy_port_desc);
213 ad->ed_hm_url_desc = NULL;
214 ad->chkType = NET_PDP_AUTH_NONE;
215 ad->ed_auth_type_desc = NULL;
217 if (NULL == ad->prof_list)
219 int err = net_get_profile_list(NET_DEVICE_CELLULAR, &(ad->prof_list), &(ad->prof_count));
220 if (err != NET_ERR_NONE) {
222 ("%s*** [ERR] Internet net_get_app_profile_id. err=%d ***%s",
223 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
227 //SETTING_TRACE("NET_ERR_UNKNOWN_METHOD:%d", NET_ERR_UNKNOWN_METHOD);
229 ad->prof_sel_idx = SETTING_ADD_PROFILE_INDEX;//need add new configuration
233 for(ci = 0;ci < ad->prof_count;ci++){
234 SETTING_TRACE_DEBUG("profList[%d].ProfileName:%s", ci,ad->prof_list[ci].ProfileName);
235 SETTING_TRACE_DEBUG("profList[%d].profile_type:%d", ci, ad->prof_list[ci].profile_type);
236 if(NET_DEVICE_CELLULAR == ad->prof_list[ci].profile_type) {
237 if (ad->con_type == ad->prof_list[ci].ProfileInfo.Pdp.ServiceType)
239 ad->prof_sel_idx = ci;
245 SETTING_TRACE("ad->prof_sel_idx:%d", ad->prof_sel_idx);
246 char ProxyAddr[NET_PROXY_LEN_MAX+1] = {0,};
247 if (SETTING_ADD_PROFILE_INDEX != ad->prof_sel_idx)//found sucessfully
249 /* load access name */
250 ad->ed_acs_name_desc = ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.Apn;
251 ad->ed_user_name_desc =
252 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.UserName;
254 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.AuthType;
256 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.Password;
258 switch (ad->chkType) {
259 case NET_PDP_AUTH_PAP:
260 ad->ed_auth_type_desc = _("IDS_ST_MBODY_PAP");
262 case NET_PDP_AUTH_CHAP:
263 ad->ed_auth_type_desc = _("IDS_ST_POP_CHAP");
265 case NET_PDP_AUTH_NONE:
266 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
269 ad->chkType = NET_PDP_AUTH_NONE;
270 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
275 char *full_addr = NULL;
278 //Fix the Port 'NULL' issue when enter connection view repeatly..
279 full_addr = safeCopyStr(ProxyAddr, ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.net_info.ProxyAddr, NET_PROXY_LEN_MAX);
280 int url_head_len = strlen(URL_HEAD);
281 if (0 == safeStrNCmp(full_addr, URL_HEAD, url_head_len))
283 full_addr += url_head_len;
285 addr = strsep(&full_addr, ":");
286 if (NULL == full_addr)//format like "http://127.0.0.1/" or "http://127.0.0.1"
288 SETTING_TRACE("NULL == full_addr");
289 addr = strsep(&addr, "/");
291 if (is_ip_string(addr))
293 port = strsep(&full_addr, "/");
295 else //invalid format,let addr and port to be NULL.
300 ad->ed_pxy_addr_desc = g_strdup(addr);
301 ad->ed_pxy_port_desc = g_strdup(port);
303 if (ad->con_type == NET_SERVICE_MMS) { /* Message Connection */
305 ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.HomeURL;
308 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
309 ad->chkType = NET_PDP_AUTH_NONE;
313 void __update_genlist_info(void *cb)
317 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
318 if (ad->data_acs_name)
320 ad->data_acs_name->sub_desc = g_strdup(ad->ed_acs_name_desc);
323 if (ad->data_auth_type)
325 ad->data_auth_type->sub_desc = g_strdup(ad->ed_auth_type_desc);
327 int authType = ad->prof_list[ad->prof_sel_idx].ProfileInfo.Pdp.AuthInfo.AuthType;
328 ad->chkType = !ad->chkType;
329 setting_network_edit_connection_display_auth_type(ad, authType);
332 if (ad->data_user_name)
334 ad->data_user_name->sub_desc = g_strdup(ad->ed_user_name_desc);
338 ad->data_pwd->sub_desc = g_strdup(ad->ed_pwd_desc);
341 if (ad->data_pxy_addr)
343 ad->data_pxy_addr->sub_desc = g_strdup(ad->ed_pxy_addr_desc);
345 if (ad->data_pxy_port)
347 ad->data_pxy_port->sub_desc = g_strdup(ad->ed_pxy_port_desc);
351 ad->data_hm_url->sub_desc = g_strdup(ad->ed_hm_url_desc);
353 elm_genlist_realized_items_update(ad->scl_edit);
357 static int setting_network_connection_create(void *cb)
360 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
362 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
364 setting_retvm_if(NET_SERVICE_MMS != ad->con_type && NET_SERVICE_INTERNET != ad->con_type,
365 SETTING_GENERAL_ERR_WRONG_PARAMETER,
366 "Invalid connection type[%d]", ad->con_type)
368 const char *title = NULL;
369 if (ad->con_type == NET_SERVICE_INTERNET)
370 { /* Internet Connection & MMS Connection Head Title should be different. */
371 title = _("IDS_ST_BODY_INTERNET_CONNECTION");
375 title = _(STR_SETTING_MMS_CONNECTIONS);
378 Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
379 elm_object_style_set(scroller, "dialogue");
380 retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
381 "Cannot set scroller object as contento of layout");
382 elm_genlist_clear(scroller); /* first to clear list */
384 /* Enabling illume notification property for window */
385 elm_win_conformant_set(ad->win_main_layout, 1);
386 Evas_Object *conformant = elm_conformant_add(ad->win_main_layout);
387 elm_object_style_set(conformant, "internal_layout"); /* By Kollus. 2011-01-04 */
388 evas_object_show(conformant);
389 elm_object_content_set(conformant, scroller);
390 ad->conformant = conformant;
391 /* connection intializes */
392 ad->data_hm_url = NULL;
394 ad->data_user_name = NULL;
395 ad->data_pxy_addr = NULL;
396 ad->data_acs_name = NULL;
397 ad->data_auth_type = NULL;
399 ad->navi_it = setting_push_layout_navi_bar((char *)title,
400 _("IDS_COM_BODY_BACK"),
402 NULL,//_(KeyStr_Reset_Def),
403 setting_network_edit_connection_click_softkey_back_cb,
404 setting_network_edit_connection_click_softkey_eidt_cb,
405 setting_network_edit_connection_click_softkey_reset_cb,
406 ad, conformant, ad->navi_bar, &ad->controlbar);
408 retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
409 ad->has_form_changed = FALSE;
411 setting_enable_expandable_genlist(scroller, ad,
412 __setting_network_connection_exp_cb,
414 evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
415 __network_connection_gl_mouse_up, ad);
416 __get_connection_info(ad);
417 Elm_Object_Item *item;
419 /* item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL); */
421 elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
422 ELM_GENLIST_ITEM_NONE, NULL, NULL);
423 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
425 setting_create_Gendial_field_def(scroller,
427 NULL, SWALLOW_Type_LAYOUT_ENTRY,
429 "IDS_ST_BODY_ACCESS_NAME",
430 (char *)ad->ed_acs_name_desc,
431 setting_network_connection_entry_changed_cb);
432 if (ad->data_acs_name) {
433 ad->data_acs_name->userdata = ad;
435 SETTING_TRACE_ERROR("ad->data_acs_name is NULL");
438 #if !SUPPORT_EXPANDABLE_AUTHTYPE
439 (void)setting_create_Gendial_field_titleItem(scroller,
441 "IDS_ST_BODY_AUTH_TYPE",
443 ad->chk_type = elm_radio_add(scroller);
444 elm_radio_state_value_set(ad->chk_type, -1);
447 setting_create_Gendial_field_1radio(scroller,
449 setting_network_connection_mouse_up_Gendial_list_radio_cb,
452 ad->chk_type, NET_PDP_AUTH_PAP,
454 setting_network_edit_connection_chk_changed);
455 if (ad->data_type_nor) {
456 ad->data_type_nor->userdata = ad;
458 SETTING_TRACE_ERROR("ad->data_type_nor is NULL");
462 setting_create_Gendial_field_1radio(scroller,
464 setting_network_connection_mouse_up_Gendial_list_radio_cb,
467 ad->chk_type, NET_PDP_AUTH_CHAP,
469 setting_network_edit_connection_chk_changed);
470 if (ad->data_type_sec) {
471 ad->data_type_sec->userdata = ad;
473 SETTING_TRACE_ERROR("ad->data_type_sec is NULL");
477 setting_create_Gendial_field_1radio(scroller,
479 setting_network_connection_mouse_up_Gendial_list_radio_cb,
482 ad->chk_type, NET_PDP_AUTH_NONE,
484 setting_network_edit_connection_chk_changed);
485 if (ad->data_type_none) {
486 ad->data_type_none->userdata = ad;
488 SETTING_TRACE_ERROR("ad->data_type_none is NULL");
491 elm_radio_value_set(ad->chk_type, ad->chkType);
493 ad->item_above_user_name = item =
494 elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
495 ELM_GENLIST_ITEM_NONE, NULL, NULL);
496 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
499 elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
500 ELM_GENLIST_ITEM_GROUP, NULL, NULL);
501 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
504 setting_create_Gendial_exp_parent_field(scroller,
507 SWALLOW_Type_INVALID,
508 "IDS_ST_BODY_AUTH_TYPE",
509 (char *)ad->ed_auth_type_desc);
510 /* ad->data_auth_type->int_slp_setting_binded = INT_SLP_SETTING_INVALID; */
511 if (ad->data_auth_type) {
512 ad->data_auth_type->userdata = ad;
514 SETTING_TRACE_ERROR("ad->data_auth_type is NULL");
517 ad->item_above_user_name = item =
518 elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
519 ELM_GENLIST_ITEM_NONE, NULL, NULL);
520 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
522 ad->is_show_user = 0;
523 if (NET_PDP_AUTH_NONE != ad->chkType) {
525 setting_create_Gendial_field_def(scroller,
528 SWALLOW_Type_LAYOUT_ENTRY,
530 "IDS_COM_BODY_USER_NAME",
532 ad->ed_user_name_desc,
533 setting_network_connection_entry_changed_cb);
534 if (ad->data_user_name) {
535 ad->data_user_name->userdata = ad;
537 SETTING_TRACE_ERROR("ad->data_user_name is NULL");
541 setting_create_Gendial_field_def(scroller,
544 SWALLOW_Type_LAYOUT_ENTRY,
546 "IDS_COM_BODY_PASSWORD",
547 (char *)ad->ed_pwd_desc,
548 setting_network_connection_entry_changed_cb);
550 ad->data_pwd->userdata = ad;
551 ad->is_show_user = 1;
552 ad->data_pwd->isPasswordFlag = TRUE;
554 SETTING_TRACE_ERROR("ad->data_pwd is NULL");
557 ad->item_above_proxy_add = item =
558 elm_genlist_item_append(scroller, &itc_seperator,
559 NULL, NULL, ELM_GENLIST_ITEM_NONE,
561 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
565 setting_create_Gendial_field_def(scroller,
567 NULL, SWALLOW_Type_LAYOUT_ENTRY,
569 "IDS_ST_BODY_CONNECTIONSETTINGS_PROXY_ADDRESS",
570 (char *)ad->ed_pxy_addr_desc,
571 setting_network_connection_entry_changed_cb);
572 if (ad->data_pxy_addr) {
573 ad->data_pxy_addr->userdata = ad;
574 ad->data_pxy_addr->input_type = ELM_INPUT_PANEL_LAYOUT_IP;
576 SETTING_TRACE_ERROR("ad->data_pxy_addr is NULL");
580 setting_create_Gendial_field_def(scroller,
582 NULL, SWALLOW_Type_LAYOUT_ENTRY,
584 "IDS_ST_BODY_PROXY_PORT",
585 (char *)ad->ed_pxy_port_desc,
586 setting_network_connection_entry_changed_cb);
587 if (ad->data_pxy_port) {
588 ad->data_pxy_port->userdata = ad;
589 ad->data_pxy_port->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBERONLY;
591 SETTING_TRACE_ERROR("ad->data_pxy_port is NULL");
594 if (ad->con_type == NET_SERVICE_MMS) { /* mms Connection */
596 setting_create_Gendial_field_def(scroller,
599 SWALLOW_Type_LAYOUT_ENTRY,
601 "IDS_ST_BODY_HOME_URL",
602 (char *)ad->ed_hm_url_desc,
603 setting_network_connection_entry_changed_cb);
604 if (ad->data_hm_url) {
605 ad->data_hm_url->userdata = ad;
606 ad->data_hm_url->input_type = ELM_INPUT_PANEL_LAYOUT_URL;
608 SETTING_TRACE_ERROR("ad->data_hm_url is NULL");
610 /* ad->is_show_url = 1; */
613 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
614 ELM_GENLIST_ITEM_NONE, NULL, NULL);
615 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
617 setting_view_network_connection_create.is_create = 1;
618 ad->scl_edit = scroller;
619 __genlist_disable_set(ad->scl_edit, TRUE);
620 ecore_idler_add(__connection_idler, ad);
621 return SETTING_RETURN_SUCCESS;
624 static int setting_network_connection_destroy(void *cb)
628 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
630 SettingNetworkUG *ad = (SettingNetworkUG *) cb;
632 ad->controlbar = NULL;
637 evas_object_del(ad->l_button);
642 evas_object_del(ad->m_button);
647 evas_object_del(ad->r_button);
651 elm_naviframe_item_pop(ad->navi_bar);
652 setting_view_network_connection_create.is_create = 0;
653 return SETTING_RETURN_SUCCESS;
656 static int setting_network_connection_update(void *cb)
659 return SETTING_RETURN_SUCCESS;
662 static int setting_network_connection_cleanup(void *cb)
664 return setting_network_connection_destroy(cb);
667 /* ***************************************************
671 ***************************************************/
673 static int setting_network_edit_connection_save_connection(void *data)
677 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
679 SettingNetworkUG *ad = (SettingNetworkUG *) data;
680 const char *acs_name = NULL;
681 const char *usr_name = NULL;
682 const char *pwd = NULL;
683 const char *addr = NULL;
684 const char *port = NULL;
685 const char *home = NULL;
687 if (ad->data_acs_name)
688 acs_name = ad->data_acs_name->sub_desc;
689 if (ad->data_user_name)
690 usr_name = ad->data_user_name->sub_desc;
692 pwd = ad->data_pwd->sub_desc;
693 if (ad->data_pxy_addr)
694 addr = ad->data_pxy_addr->sub_desc;
695 if (ad->data_pxy_port)
696 port = ad->data_pxy_port->sub_desc;
708 SETTING_TRACE("acs_name:%s", acs_name);
709 SETTING_TRACE("usr_name:%s", usr_name);
710 SETTING_TRACE("pwd:%s", pwd);
712 SETTING_TRACE("addr:%s", addr);
713 SETTING_TRACE("port:%s", port);
714 SETTING_TRACE("home:%s", home);
716 char sz_text[NET_PROXY_LEN_MAX + 1] = { 0, };
718 int ret = SETTING_RETURN_SUCCESS;
721 net_profile_info_t *con_info = NULL;
722 if (ad->prof_sel_idx != SETTING_ADD_PROFILE_INDEX) {
723 con_info = &(ad->prof_list[ad->prof_sel_idx]);
725 con_info = (net_profile_info_t *)calloc(1, sizeof(net_profile_info_t));
727 /* save access name */
728 if (!safeStrCmp(acs_name, "")) {
729 setting_create_simple_popup(ad, ad->win_get,
730 NULL, _(Insert_Access_Name_desc));
731 return SETTING_DNET_RETURN_NULL_ACCESS_NAME;
733 safeCopyStr(con_info->ProfileInfo.Pdp.Apn, acs_name,
734 NET_PDP_APN_LEN_MAX);
738 /* type = elm_radio_value_get(ad->chk_type); */
742 case NET_PDP_AUTH_PAP: /* Normal */
744 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
749 case NET_PDP_AUTH_CHAP: /* Secure */
751 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
756 case NET_PDP_AUTH_NONE: /* None */
758 con_info->ProfileInfo.Pdp.AuthInfo.AuthType =
767 if (!safeStrCmp(usr_name, "")
768 && NET_PDP_AUTH_NONE != type) {
769 setting_create_simple_popup(ad, ad->win_get,
770 NULL, _(Insert_User_Name_Desc));
771 return SETTING_DNET_RETURN_NULL_USER_NAME;
773 safeCopyStr(con_info->ProfileInfo.Pdp.AuthInfo.UserName,
774 usr_name, NET_PDP_AUTH_USERNAME_LEN_MAX - 1);
777 if (!safeStrCmp(pwd, "")
778 && NET_PDP_AUTH_NONE != type) {
779 setting_create_simple_popup(ad, ad->win_get,
780 NULL, _("IDS_ST_BODY_ENTER_PASSWORD"));
781 return SETTING_DNET_RETURN_NULL_PASSWORD;
783 safeCopyStr(con_info->ProfileInfo.Pdp.AuthInfo.Password, pwd,
784 NET_PDP_AUTH_PASSWORD_LEN_MAX - 1);
787 /* save proxy addr */
788 if (!safeStrCmp(addr, "")) {
789 /* addr = "0.0.0.0"; */
790 ret = SETTING_DNET_RETURN_NULL_PROXY_ADDR;
791 } else if (!is_ip_string(addr)) {
792 setting_create_simple_popup(ad, ad->win_get,
793 NULL, _("IDS_ST_HEADER_INCORRECT_PROXY_ADDRESS"));
794 return SETTING_DNET_RETURN_INVALID_PROXY_ADDR;
796 /* check proxy port */
797 if (!safeStrCmp(port, "")) {
799 ret = SETTING_DNET_RETURN_NULL_PROXY_PORT;
802 ret = snprintf(sz_text, sizeof(sz_text), "%s:%s", addr, port);
803 retv_if(ret < 0, SETTING_DNET_RETURN_ERR);
804 safeCopyStr(con_info->ProfileInfo.Pdp.net_info.ProxyAddr, sz_text,
807 /* save home url(message connection only) */
808 if (ad->con_type == NET_SERVICE_MMS) { /* Message Connection */
809 home = ad->data_hm_url->sub_desc;
810 if (home == (char *)NULL) {
811 safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL,
812 URL_HEAD, NET_HOME_URL_LEN_MAX);
814 if (!safeStrCmp(home, "")) {
816 ret = SETTING_DNET_RETURN_NULL_HOMEURL;
819 safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL, home,
820 NET_HOME_URL_LEN_MAX);
824 SETTING_TRACE("ad->con_type:%d", ad->con_type);
825 /* save connection */
826 if (ad->prof_sel_idx == SETTING_ADD_PROFILE_INDEX) {
828 if (ad->con_type == NET_SERVICE_INTERNET) { /* Internet Connection */
829 safeCopyStr(con_info->ProfileName,
830 "IDS_ST_BODY_INTERNET_CONNECTION",
831 strlen("IDS_ST_BODY_INTERNET_CONNECTION"));
832 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 1;
834 safeCopyStr(con_info->ProfileName, STR_SETTING_MMS_CONNECTIONS,
835 strlen(STR_SETTING_MMS_CONNECTIONS));
836 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 2;
838 /** Specifies a protocol type */
840 /** network information */
841 con_info->ProfileInfo.Pdp.ServiceType = ad->con_type;
843 con_info->profile_type = NET_DEVICE_CELLULAR;
844 con_info->ProfileState = NET_STATE_TYPE_UNKNOWN;
845 con_info->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_GPRS;
846 err = net_add_profile(ad->con_type, con_info);
847 if (err != NET_ERR_NONE) {
849 ("%s*** [ERR] net_add_profile. err=%d ***%s",
850 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
851 ret = SETTING_DNET_RETURN_ERR;
852 setting_create_simple_popup(ad, ad->win_get,
853 NULL, _(Invok_API_Failed_Desc));
858 err = net_modify_profile(con_info->ProfileName, con_info);
859 if (err != NET_ERR_NONE) {
861 ("%s*** [ERR] net_modify_profile. err=%d ***%s",
862 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
863 ret = SETTING_DNET_RETURN_ERR;
869 /* ***************************************************
873 ***************************************************/
874 #define BTN_STYLE_DEF "naviframe/title/default"
876 setting_network_edit_connection_click_softkey_eidt_cb(void *data,
882 retm_if(data == NULL, "Data parameter is NULL");
884 SettingNetworkUG *ad = (SettingNetworkUG *) data;
885 //setting_enable_evas_object(ad->scl_edit);
886 __genlist_disable_set(ad->scl_edit, FALSE);
888 if (!ad->l_button) //go into first time
890 ad->l_button = setting_create_button(ad->navi_bar, _("IDS_COM_SK_DONE"),
892 setting_network_edit_connection_click_softkey_save_cb,
896 if (!ad->r_button) //go into first time
898 ad->r_button = setting_create_button(ad->navi_bar, _("IDS_COM_SK_CANCEL"),
900 setting_network_edit_connection_click_softkey_cancel_cb,
903 if (!ad->m_button) //go into first time
905 ad->m_button = setting_create_button(ad->navi_bar, NULL,
910 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_LEFT, ad->l_button);
911 evas_object_show(ad->l_button);
914 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_RIGHT, ad->r_button);
915 ad->has_form_changed = TRUE;//intialize
916 setting_network_connection_check_entry_empty(ad);
917 ad->has_form_changed = FALSE;//restore
920 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_MORE, ad->m_button);
921 evas_object_show(ad->r_button);
925 ad->back_btn = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_PREV);
926 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_PREV, NULL);
927 evas_object_hide(ad->back_btn);
929 //remove other buttons on controlbar
930 ad->controlbar = elm_object_item_part_content_unset(ad->navi_it, NAVI_CONTROLBAR_PART);
931 elm_object_item_part_content_set(ad->navi_it, NAVI_CONTROLBAR_PART, NULL);
932 evas_object_hide(ad->controlbar);
935 setting_network_edit_connection_click_softkey_reset_cb(void *data,
941 retm_if(data == NULL, "Data parameter is NULL");
943 SettingNetworkUG *ad = (SettingNetworkUG *) data;
944 net_profile_info_t *con_info = NULL;
946 if (ad->prof_sel_idx != SETTING_ADD_PROFILE_INDEX) {
947 con_info = &(ad->prof_list[ad->prof_sel_idx]);
949 con_info = (net_profile_info_t *)calloc(1, sizeof(net_profile_info_t));
950 setting_retm_if(!con_info, "Failed to alloc for net_profile_info_t");
953 const char *access_name = _("Connection");
954 int auth_type = NET_PDP_AUTH_NONE;
955 safeCopyStr(con_info->ProfileInfo.Pdp.Apn, access_name, NET_PDP_APN_LEN_MAX);
956 con_info->ProfileInfo.Pdp.AuthInfo.AuthType = auth_type;
958 safeCopyStr(con_info->ProfileInfo.Pdp.net_info.ProxyAddr, "0.0.0.0:80",
960 safeCopyStr(con_info->ProfileInfo.Pdp.HomeURL,
961 URL_HEAD, NET_HOME_URL_LEN_MAX);
963 SETTING_TRACE("ad->con_type:%d", ad->con_type);
964 /* save connection */
965 if (ad->prof_sel_idx == SETTING_ADD_PROFILE_INDEX)
968 if (ad->con_type == NET_SERVICE_INTERNET)
969 { /* Internet Connection */
970 safeCopyStr(con_info->ProfileName,
971 "IDS_ST_BODY_INTERNET_CONNECTION",
972 strlen("IDS_ST_BODY_INTERNET_CONNECTION"));
973 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 1;
977 safeCopyStr(con_info->ProfileName, STR_SETTING_MMS_CONNECTIONS,
978 strlen(STR_SETTING_MMS_CONNECTIONS));
979 //con_info->ProfileInfo.Pdp.ServiceCategoryId = 2;
981 /** Specifies a protocol type */
983 /** network information */
984 con_info->ProfileInfo.Pdp.ServiceType = ad->con_type;
986 con_info->profile_type = NET_DEVICE_CELLULAR;
987 con_info->ProfileState = NET_STATE_TYPE_UNKNOWN;
988 con_info->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_GPRS;
990 err = net_add_profile(ad->con_type, con_info);
991 if (err != NET_ERR_NONE)
994 ("%s*** [ERR] net_add_profile. err=%d ***%s",
995 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
996 setting_create_simple_popup(ad, ad->win_get,
997 NULL, _(Invok_API_Failed_Desc));
1003 err = net_modify_profile(con_info->ProfileName, con_info);
1004 if (err != NET_ERR_NONE)
1007 ("%s*** [ERR] net_modify_profile. err=%d ***%s",
1008 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
1012 if (err == NET_ERR_NONE) //update genlist when it operaters sucessfully
1014 if (!ad->prof_list) __get_connection_info(ad);//maybe new added
1015 ad->ed_acs_name_desc = access_name;
1016 ad->ed_user_name_desc = NULL;
1017 ad->ed_pwd_desc = NULL;
1018 ad->ed_pxy_addr_desc = g_strdup("0.0.0.0");
1019 ad->ed_pxy_port_desc = g_strdup("80");
1020 ad->ed_hm_url_desc = URL_HEAD;
1021 ad->chkType = NET_PDP_AUTH_NONE;
1022 ad->ed_auth_type_desc = _("IDS_COM_BODY_NONE");
1023 __update_genlist_info(ad);
1027 elm_genlist_realized_items_update(ad->scl_edit);//refresh genlist
1029 ecore_idler_add(__connection_idler, ad);
1033 setting_network_edit_connection_click_softkey_save_cb(void *data,
1037 SETTING_TRACE_BEGIN;
1039 retm_if(data == NULL, "Data parameter is NULL");
1041 SettingNetworkUG *ad = (SettingNetworkUG *) data;
1042 /* elm_box_unpack_all(ad->bx_blk); */
1043 /* elm_dialoguegroup_remove_all(ad->dg_blk); */
1045 int ret = setting_network_edit_connection_save_connection(ad);
1046 /* need special handle */
1047 if (SETTING_DNET_RETURN_NULL_ACCESS_NAME == ret
1048 || SETTING_DNET_RETURN_NULL_USER_NAME == ret
1049 || SETTING_DNET_RETURN_NULL_PASSWORD == ret
1050 || SETTING_DNET_RETURN_INVALID_PROXY_ADDR == ret) {
1053 if (ret != SETTING_RETURN_SUCCESS) {
1055 ("%s*** [ERR] setting_network_edit_connection_save_connection ***%s",
1056 SETTING_FONT_RED, SETTING_FONT_BLACK);
1059 setting_create_popup_without_btn(ad, ad->win_get, NULL, _(KeyStr_Saved), NULL, POPUP_INTERVAL, FALSE, FALSE);
1060 //re-fetch connection info..
1061 FREE(ad->prof_list);
1062 __get_connection_info(ad);
1064 setting_network_edit_connection_click_softkey_cancel_cb(ad, ad->r_button, NULL);
1068 setting_network_edit_connection_click_softkey_back_cb(void *data,
1072 SETTING_TRACE_BEGIN;
1074 retm_if(data == NULL, "Data parameter is NULL");
1076 SettingNetworkUG *ad = (SettingNetworkUG *) data;
1077 /* elm_box_unpack_all(ad->bx_blk); */
1078 /* elm_dialoguegroup_remove_all(ad->dg_blk); */
1079 setting_view_change(&setting_view_network_connection_create,
1080 &setting_view_network_main, ad);
1083 setting_network_edit_connection_click_softkey_cancel_cb(void *data,
1087 SETTING_TRACE_BEGIN;
1089 retm_if(data == NULL, "Data parameter is NULL");
1091 SettingNetworkUG *ad = (SettingNetworkUG *) data;
1092 ad->l_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1093 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_LEFT, NULL);
1094 evas_object_hide(ad->l_button);
1096 ad->m_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_MORE);
1097 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_MORE, NULL);
1098 evas_object_hide(ad->m_button);
1100 ad->r_button = elm_object_item_part_content_unset(ad->navi_it, NAVI_BTN_STYLE_RIGHT);
1101 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_RIGHT, NULL);
1102 evas_object_hide(ad->r_button);
1103 //setting_disable_evas_object(ad->r_button);
1104 setting_undo_dim_evas_object(ad->r_button, TRUE);
1106 elm_object_item_part_content_set(ad->navi_it, NAVI_BTN_STYLE_PREV, ad->back_btn);
1107 elm_object_item_part_content_set(ad->navi_it, NAVI_CONTROLBAR_PART, ad->controlbar);
1108 evas_object_show(ad->back_btn);
1109 evas_object_show(ad->controlbar);
1111 __get_connection_info(ad);
1112 __update_genlist_info(ad);
1113 if(ad->data_auth_type) elm_genlist_item_expanded_set(ad->data_auth_type->item, FALSE);
1114 ecore_idler_add(__connection_idler, ad);
1116 static void _gl_Gendial_sel(void *data, Evas_Object *obj, void *event_info)
1118 /* SETTING_TRACE_BEGIN; */
1119 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1120 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1121 elm_genlist_item_selected_set(item, 0);
1125 static void setting_network_connection_check_entry_empty(SettingNetworkUG *ad)
1127 SETTING_TRACE_BEGIN;
1128 if (!ad->has_form_changed)
1130 SETTING_TRACE_DEBUG("ad->has_form_changed == FALSE!");
1133 bool isFoundEmptyEntry = FALSE;
1136 if (ad->data_acs_name && isEmptyStr(ad->data_acs_name->sub_desc)) {
1137 SETTING_TRACE("entry_str:%s", ad->data_acs_name->sub_desc);
1138 isFoundEmptyEntry = TRUE;
1141 if (ad->data_user_name && isEmptyStr(ad->data_user_name->sub_desc)) {
1142 SETTING_TRACE("entry_str:%s", ad->data_user_name->sub_desc);
1143 isFoundEmptyEntry = TRUE;
1146 if (ad->data_pwd && isEmptyStr(ad->data_pwd->sub_desc)) {
1147 SETTING_TRACE("entry_str:%s", ad->data_pwd->sub_desc);
1148 isFoundEmptyEntry = TRUE;
1151 if (ad->data_hm_url && isEmptyStr(ad->data_hm_url->sub_desc)) {
1152 SETTING_TRACE("entry_str:%s", ad->data_hm_url->sub_desc);
1153 isFoundEmptyEntry = TRUE;
1157 Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1158 if (isFoundEmptyEntry) {
1159 if (!evas_object_pass_events_get(done_btn)) {//it had not yet been disabled
1160 setting_disable_evas_object(done_btn);
1161 setting_dim_evas_object(done_btn, TRUE);
1165 //do nothing..if invoke setting_dim_evas_object many times, the done button will be dimer until it cannot be see.
1166 //refer to the API of setting_dim_evas_object(). The API is supplied by Setting itself, winset doesn't support until now as I now.
1169 setting_enable_evas_object(done_btn);
1170 setting_undo_dim_evas_object(done_btn, TRUE);
1175 setting_network_edit_connection_display_auth_type(SettingNetworkUG *ad,
1178 SETTING_TRACE_BEGIN;
1179 retm_if(ad == NULL, "Data parameter is NULL");
1180 if (ad->chkType == auth_type) return;
1182 ad->chkType = auth_type; /* for update genlist */
1183 if (NET_PDP_AUTH_NONE != auth_type) { /* to show */
1184 SETTING_TRACE("ad->is_show_user:%d", ad->is_show_user);
1185 if (ad->is_show_user == 0) { /* do only when hiden */
1186 SETTING_TRACE("to create");
1188 ad->data_user_name =
1189 (Setting_GenGroupItem_Data *) calloc(1,
1191 (Setting_GenGroupItem_Data));
1192 setting_retm_if(ad->data_user_name == NULL, "calloc failed");
1193 ad->data_user_name->keyStr =
1194 (char *)g_strdup("IDS_COM_BODY_USER_NAME");
1195 ad->data_user_name->sub_desc =
1196 (char *)g_strdup(ad->ed_user_name_desc);
1197 ad->data_user_name->swallow_type =
1198 SWALLOW_Type_LAYOUT_ENTRY;
1199 ad->data_user_name->userdata = ad;
1200 ad->data_user_name->chk_change_cb =
1201 setting_network_connection_entry_changed_cb;
1202 ad->data_user_name->item =
1203 elm_genlist_item_insert_after(ad->scl_edit,
1207 ad->item_above_user_name,
1208 ELM_GENLIST_ITEM_NONE,
1209 _gl_Gendial_sel, ad);
1212 (Setting_GenGroupItem_Data *) calloc(1,
1214 (Setting_GenGroupItem_Data));
1216 setting_retm_if(ad->data_pwd == NULL, "calloc failed");
1217 ad->data_pwd->keyStr =
1218 (char *)g_strdup("IDS_COM_BODY_PASSWORD");
1219 ad->data_pwd->sub_desc =
1220 (char *)g_strdup(ad->ed_pwd_desc);
1221 ad->data_pwd->swallow_type = SWALLOW_Type_LAYOUT_ENTRY;
1222 ad->data_pwd->userdata = ad;
1223 ad->data_pwd->chk_change_cb =
1224 setting_network_connection_entry_changed_cb;
1225 ad->data_pwd->isPasswordFlag = TRUE;
1226 /* ad->data_pwd->chk_change_cb = chk_change_cb; */
1227 ad->data_pwd->item =
1228 elm_genlist_item_insert_after(ad->scl_edit,
1232 data_user_name->item,
1233 ELM_GENLIST_ITEM_NONE,
1234 _gl_Gendial_sel, ad);
1236 ad->item_above_proxy_add =
1237 elm_genlist_item_insert_after(ad->scl_edit,
1241 ELM_GENLIST_ITEM_NONE,
1243 elm_genlist_item_select_mode_set
1244 (ad->item_above_proxy_add, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1246 ad->has_form_changed = TRUE;
1247 setting_network_connection_check_entry_empty(ad);
1248 /* ad->is_show_user = 1; */
1250 ad->is_show_user = 1;
1251 } else { /* to hide */
1253 SETTING_TRACE("ad->is_show_user:%d", ad->is_show_user);
1254 if (ad->is_show_user == 1) { /* do only when shown */
1255 SETTING_TRACE("to destroy");
1256 if (ad->data_user_name) {
1257 elm_object_item_del(ad->data_user_name->item);
1258 ad->data_user_name = NULL;
1261 elm_object_item_del(ad->data_pwd->item);
1262 ad->data_pwd = NULL;
1264 if (ad->item_above_proxy_add) {
1265 elm_object_item_del(ad->item_above_proxy_add);
1266 ad->item_above_proxy_add = NULL;
1270 ad->has_form_changed = TRUE;
1271 setting_network_connection_check_entry_empty(ad);
1272 ad->is_show_user = 0;
1278 setting_network_connection_entry_changed_cb(void *data, Evas_Object *obj,
1281 SETTING_TRACE_BEGIN;
1282 retm_if(data == NULL, "Data parameter is NULL");
1283 Setting_GenGroupItem_Data *list_item =
1284 (Setting_GenGroupItem_Data *) data;
1285 SettingNetworkUG *ad = list_item->userdata;
1286 const char *entry_str = elm_entry_entry_get(obj);
1287 list_item->sub_desc = (char *)g_strdup(entry_str);
1288 ad->has_form_changed = TRUE;
1289 setting_network_connection_check_entry_empty(ad);
1292 setting_network_connection_hide_input_pannel(void *data)
1294 SETTING_TRACE_BEGIN;
1295 retm_if(data == NULL, "Data parameter is NULL");
1296 SettingNetworkUG *ad = data;
1297 if (ad->data_acs_name) {
1298 setting_hide_input_pannel_cb(ad->data_acs_name->eo_check);
1300 if (ad->data_user_name) {
1301 setting_hide_input_pannel_cb(ad->data_user_name->eo_check);
1304 setting_hide_input_pannel_cb(ad->data_pwd->eo_check);
1306 if (ad->data_pxy_addr) {
1307 setting_hide_input_pannel_cb(ad->data_pxy_addr->eo_check);
1309 if (ad->data_pxy_port) {
1310 setting_hide_input_pannel_cb(ad->data_pxy_port->eo_check);
1312 if (ad->data_hm_url) {
1313 setting_hide_input_pannel_cb(ad->data_hm_url->eo_check);