tizen 2.3 release
[apps/home/settings.git] / setting-network / src / setting-network-preferred-network-edit.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  *
20  */
21 #include <setting-network-preferred-network-edit.h>
22
23 static int setting_network_preferred_network_edit_create(void *cb);
24 static int setting_network_preferred_network_edit_destroy(void *cb);
25 static int setting_network_preferred_network_edit_update(void *cb);
26 static int setting_network_preferred_network_edit_cleanup(void *cb);
27
28 setting_view setting_view_network_preferred_network_edit = {
29         .create = setting_network_preferred_network_edit_create,
30         .destroy = setting_network_preferred_network_edit_destroy,
31         .update = setting_network_preferred_network_edit_update,
32         .cleanup = setting_network_preferred_network_edit_cleanup,
33 };
34
35 /* ***************************************************
36  *
37  *basic func
38  *
39  ***************************************************/
40
41 static int setting_network_preferred_network_edit_create(void *cb)
42 {
43         /* error check */
44         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
45         SETTING_TRACE_BEGIN;
46         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
47
48         Evas_Object *scroller = NULL;
49         /* Evas_Object *outer_box = NULL; */
50         setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
51                                              _(ad->
52                                                pref_list.PrefPlmnRecord
53                                                [ad->sel_pref_idx].network_name),
54                                              dgettext("sys_string",
55                                                       "IDS_COM_SK_CANCEL"),
56                                              dgettext("sys_string",
57                                                       "IDS_COM_SK_DONE"),
58                                              setting_network_preferred_network_edit_click_softkey_cancel_cb,
59                                              setting_network_preffered_network_edit_click_softkey_save_cb,
60                                              ad, &scroller, ad->navi_bar);
61         Elm_Object_Item *item = NULL;;
62
63         item =
64             elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
65                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
66         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
67
68         char mcc[SETTING_NETWORK_PREFERRED_NETWORK_CODE_LEN] = { 0, };
69         char mnc[SETTING_NETWORK_PREFERRED_NETWORK_CODE_LEN] = { 0, };
70         int network_type = 0;
71         /* SETTING_TRACE("Plmn:%s", ad->pref_list.PrefPlmnRecord[ad->sel_pref_idx].Plmn); */
72         memcpy(&mcc, ad->pref_list.PrefPlmnRecord[ad->sel_pref_idx].Plmn, 3);
73         memcpy(&mnc, ad->pref_list.PrefPlmnRecord[ad->sel_pref_idx].Plmn + 3,
74                3);
75
76         if (ad->pref_list.PrefPlmnRecord[ad->sel_pref_idx].SystemType ==
77             TAPI_NETWORK_SYSTEM_GSM) {
78                 network_type = 0;
79         } else {
80                 network_type = 1;
81         }
82         ad->data_edit_mcc =
83             setting_create_Gendial_field_def(scroller,
84                                              &itc_editfield, NULL,
85                                              NULL, SWALLOW_Type_LAYOUT_EDITFIELD,
86                                              NULL, NULL, 0,
87                                              "IDS_ST_BODY_COUNTRY_CODE", _(mcc),
88                                              setting_network_preffered_network_edit_entry_changed_cb);
89         if (ad->data_edit_mcc) {
90                 ad->data_edit_mcc->userdata = ad;
91                 ad->data_edit_mcc->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBERONLY;
92         } else {
93                 SETTING_TRACE_ERROR("ad->data_edit_mcc is NULL");
94         }
95
96         ad->data_edit_mnc =
97             setting_create_Gendial_field_def(scroller,
98                                              &itc_editfield, NULL,
99                                              NULL, SWALLOW_Type_LAYOUT_EDITFIELD,
100                                              NULL, NULL, 0,
101                                              "IDS_ST_BODY_NETWORK_CODE", _(mnc),
102                                              setting_network_preffered_network_edit_entry_changed_cb);
103         if (ad->data_edit_mnc) {
104                 ad->data_edit_mnc->userdata = ad;
105                 ad->data_edit_mnc->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBERONLY;
106         } else {
107                 SETTING_TRACE_ERROR("ad->data_edit_mnc is NULL");
108         }
109         ADD_GL_SEPARATOR(scroller);
110
111         (void)setting_create_Gendial_field_titleItem(scroller,
112                                                      &itc_group_item,
113                                                      "IDS_ST_BODY_NETWORK_TYPE",
114                                                      NULL);
115         ad->chk_edit_type = elm_radio_add(scroller);
116         elm_radio_state_value_set(ad->chk_edit_type, -1);
117
118         setting_create_Gendial_field_1radio(scroller, &itc_1text_1icon_2,
119                                             setting_mouse_up_Gendial_list_radio_cb,
120                                             ad->chk_edit_type,
121                                             SWALLOW_Type_1RADIO,
122                                             ad->chk_edit_type, 0, "IDS_ST_BODY_GSM", NULL);
123
124         setting_create_Gendial_field_1radio(scroller, &itc_1text_1icon_2,
125                                             setting_mouse_up_Gendial_list_radio_cb,
126                                             ad->chk_edit_type,
127                                             SWALLOW_Type_1RADIO,
128                                             ad->chk_edit_type, 1, "UMTS", NULL);
129         elm_radio_value_set(ad->chk_edit_type, network_type);
130         setting_view_network_preferred_network_edit.is_create = 1;
131         return SETTING_RETURN_SUCCESS;
132 }
133
134 static int setting_network_preferred_network_edit_destroy(void *cb)
135 {
136         /* error check */
137         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
138         SETTING_TRACE_BEGIN;
139         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
140
141         elm_naviframe_item_pop(ad->navi_bar);
142         setting_view_network_preferred_network_edit.is_create = 0;
143
144         return SETTING_RETURN_SUCCESS;
145 }
146
147 static int setting_network_preferred_network_edit_update(void *cb)
148 {
149         return SETTING_RETURN_SUCCESS;
150 }
151
152 static int setting_network_preferred_network_edit_cleanup(void *cb)
153 {
154         return setting_network_preferred_network_edit_destroy(cb);
155 }
156
157 /* ***************************************************
158  *
159  *general func
160  *
161  ***************************************************/
162
163 /* ***************************************************
164  *
165  *call back func
166  *
167  ***************************************************/
168 static void
169 setting_network_preffered_network_edit_entry_changed_cb(void *data,
170                                                         Evas_Object *obj,
171                                                         void *event_info)
172 {
173         retm_if(data == NULL, "Data parameter is NULL");
174         Setting_GenGroupItem_Data *list_item =
175             (Setting_GenGroupItem_Data *) data;
176         const char *entry_str = elm_entry_entry_get(obj);
177         /* SETTING_TRACE("entry_str:%s", entry_str); */
178         list_item->sub_desc = (char *)g_strdup(entry_str);
179 }
180
181 static void
182 setting_network_preffered_network_edit_click_softkey_save_cb(void *data,
183                                                              Evas_Object *obj,
184                                                              void *event_info)
185 {
186         /* error check */
187         retm_if(data == NULL,
188                 "[Setting > Network > Preferred Net] Data parameter for setting_network_preffered_network_edit_click_softkey_save_cb is NULL");
189
190         SettingNetworkUG *ad = (SettingNetworkUG *) data;
191         int tapi_ret = TAPI_API_SUCCESS;
192         TelNetworkPreferredPlmnInfo_t pref_plmn_info = { 0, };
193
194         int network_type = 0;
195         const char *mcc = NULL;
196         const char *mnc = NULL;
197         if (ad->data_edit_mcc) {
198                 mcc = ad->data_edit_mcc->sub_desc;
199         }
200         if (ad->data_edit_mnc) {
201                 mnc = ad->data_edit_mnc->sub_desc;
202         }
203
204         setting_retm_if(isEmptyStr(mcc)
205                         || isEmptyStr(mcc),
206                         "mcc or mnc got from editfiled error");
207         SETTING_TRACE("mcc:%s, mnc:%s", mcc, mnc);
208         int mcc_len = safeStrLen(mcc);
209         int mnc_len = safeStrLen(mnc);
210         if (COUNTRY_CODE_LEN != mcc_len) {
211                 if ((NETWORK_CODE_LEN < mnc_len) || (mnc_len <= 0)) {
212                         setting_create_popup_without_btn(ad, ad->win_get,
213                                              NULL, _("please input country code made up of 3 digital number and network code made up of 1 ~ 3 digital number"),
214                                              NULL, POPUP_INTERVAL, FALSE, FALSE);
215                 } else {
216                         setting_create_popup_without_btn(ad, ad->win_get,
217                                              NULL, _("please input country code made up of 3 digital number"),
218                                              NULL, POPUP_INTERVAL, FALSE, FALSE);
219                 }
220                 return;
221         }
222
223         if ((NETWORK_CODE_LEN < mnc_len) || (mnc_len <= 0)) {
224                 setting_create_popup_without_btn(ad, ad->win_get,
225                                      NULL, _("please input network code made up of 1 ~ 3 digital number"),
226                                      NULL, POPUP_INTERVAL, FALSE, FALSE);
227                 return;
228         }
229
230         network_type = elm_radio_value_get(ad->chk_edit_type);
231
232         memset(&pref_plmn_info, 0x00, sizeof(TelNetworkPreferredPlmnInfo_t));
233         memcpy(&pref_plmn_info,
234                &ad->pref_list.PrefPlmnRecord[ad->sel_pref_idx],
235                sizeof(TelNetworkPreferredPlmnInfo_t));
236
237         safeCopyStr((char *)pref_plmn_info.Plmn, mcc, 3);
238         safeCopyStr((char *)pref_plmn_info.Plmn + 3, mnc, 3);
239
240         /* save network type */
241         if (network_type == 0) {
242                 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_GSM;
243         } else {
244                 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_UMTS;
245         }
246         ad->network_ug_pop =
247             setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_ST_POP_SAVING"),
248                                              NULL, 0.0, TRUE, TRUE);
249
250         tapi_ret =
251             tel_set_network_preferred_plmn(ad->handle, TAPI_NETWORK_PREF_PLMN_EDIT,
252                                            &pref_plmn_info, setting_tapi_set_preferred_plmn_cb, ad);
253         if (tapi_ret != TAPI_API_SUCCESS) {
254                 SETTING_TRACE_DEBUG
255                     ("%s*** [ERR] tel_set_network_preferred_plmn(PLMN_EDIT) err=%d ***%s",
256                      SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
257                 setting_create_popup_without_btn(ad, ad->win_get, NULL, _("Save Failed!"), NULL, POPUP_INTERVAL, FALSE, FALSE);
258         }
259
260         ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_EDIT;
261 }
262
263 static void
264 setting_network_preferred_network_edit_click_softkey_cancel_cb(void *data,
265                                                                Evas_Object *
266                                                                obj,
267                                                                void *event_info)
268 {
269         SettingNetworkUG *ad = (SettingNetworkUG *) data;
270
271         /* error check */
272         retm_if(data == NULL,
273                 "[Setting > Network > Preferred Net] Data parameter for setting_network_preffered_network_edit_click_softkey_save_cb is NULL");
274         ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_NONE;
275         setting_view_change(&setting_view_network_preferred_network_edit,
276                             &setting_view_network_preferred_network, ad);
277 }