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