apply FSL(Flora Software License)
[apps/core/preloaded/settings.git] / setting-network / src / setting-network-preferred-network-edit.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   *
4   * Licensed under the Flora License, Version 1.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *     http://www.tizenopensource.org/license
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16
17
18 #include <setting-network-preferred-network-edit.h>
19
20 static int setting_network_preferred_network_edit_create(void *cb);
21 static int setting_network_preferred_network_edit_destroy(void *cb);
22 static int setting_network_preferred_network_edit_update(void *cb);
23 static int setting_network_preferred_network_edit_cleanup(void *cb);
24
25 setting_view setting_view_network_preferred_network_edit = {
26         .create = setting_network_preferred_network_edit_create,
27         .destroy = setting_network_preferred_network_edit_destroy,
28         .update = setting_network_preferred_network_edit_update,
29         .cleanup = setting_network_preferred_network_edit_cleanup,
30 };
31
32 /* ***************************************************
33  *
34  *basic func
35  *
36  ***************************************************/
37
38 static int setting_network_preferred_network_edit_create(void *cb)
39 {
40         /* error check */
41         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
42         SETTING_TRACE_BEGIN;
43         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
44
45         Evas_Object *scroller = NULL;
46         setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
47                                              _(ad->
48                                                pref_list.PreffPlmnRecord
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, &(ad->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         memcpy(&mcc, ad->pref_list.PreffPlmnRecord[ad->sel_pref_idx].Plmn, 3);
68         memcpy(&mnc, ad->pref_list.PreffPlmnRecord[ad->sel_pref_idx].Plmn + 3,
69                3);
70
71         if (ad->pref_list.PreffPlmnRecord[ad->sel_pref_idx].SystemType ==
72             TAPI_NETWORK_SYSTEM_GSM) {
73                 network_type = 0;
74         } else {
75                 network_type = 1;
76         }
77         ad->data_edit_mcc =
78             setting_create_Gendial_field_def(scroller,
79                                              &(ad->itc_variable_height), NULL,
80                                              NULL, SWALLOW_Type_LAYOUT_ENTRY,
81                                              NULL, NULL, 0,
82                                              "IDS_ST_BODY_COUNTRY_CODE", _(mcc),
83                                              setting_network_preffered_network_edit_entry_changed_cb);
84         if (ad->data_edit_mcc) {
85                 ad->data_edit_mcc->userdata = ad;
86                 ad->data_edit_mcc->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBERONLY;
87         } else {
88                 SETTING_TRACE_ERROR("ad->data_edit_mcc is NULL");
89         }
90
91         ad->data_edit_mnc =
92             setting_create_Gendial_field_def(scroller,
93                                              &(ad->itc_variable_height), NULL,
94                                              NULL, SWALLOW_Type_LAYOUT_ENTRY,
95                                              NULL, NULL, 0,
96                                              "IDS_ST_BODY_NETWORK_CODE", _(mnc),
97                                              setting_network_preffered_network_edit_entry_changed_cb);
98         if (ad->data_edit_mnc) {
99                 ad->data_edit_mnc->userdata = ad;
100                 ad->data_edit_mnc->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBERONLY;
101         } else {
102                 SETTING_TRACE_ERROR("ad->data_edit_mnc is NULL");
103         }
104
105         (void)setting_create_Gendial_field_titleItem(scroller,
106                                                      &(ad->itc_group_item),
107                                                      "IDS_ST_BODY_NETWORK_TYPE",
108                                                      NULL);
109         ad->chk_edit_type = elm_radio_add(scroller);
110         elm_radio_state_value_set(ad->chk_edit_type, -1);
111
112         setting_create_Gendial_field_1radio(scroller, &(ad->itc_1text_1icon_2),
113                                             setting_mouse_up_Gendial_list_radio_cb,
114                                             ad->chk_edit_type,
115                                             SWALLOW_Type_1RADIO,
116                                             ad->chk_edit_type, 0, "IDS_ST_BODY_GSM", NULL);
117
118         setting_create_Gendial_field_1radio(scroller, &(ad->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, 1, "UMTS", NULL);
123         elm_radio_value_set(ad->chk_edit_type, network_type);
124         setting_view_network_preferred_network_edit.is_create = 1;
125         return SETTING_RETURN_SUCCESS;
126 }
127
128 static int setting_network_preferred_network_edit_destroy(void *cb)
129 {
130         /* error check */
131         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
132         SETTING_TRACE_BEGIN;
133         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
134
135         elm_naviframe_item_pop(ad->navi_bar);
136         setting_view_network_preferred_network_edit.is_create = 0;
137
138         return SETTING_RETURN_SUCCESS;
139 }
140
141 static int setting_network_preferred_network_edit_update(void *cb)
142 {
143         return SETTING_RETURN_SUCCESS;
144 }
145
146 static int setting_network_preferred_network_edit_cleanup(void *cb)
147 {
148         return setting_network_preferred_network_edit_destroy(cb);
149 }
150
151 /* ***************************************************
152  *
153  *general func
154  *
155  ***************************************************/
156
157 /* ***************************************************
158  *
159  *call back func
160  *
161  ***************************************************/
162 static void
163 setting_network_preffered_network_edit_entry_changed_cb(void *data,
164                                                         Evas_Object *obj,
165                                                         void *event_info)
166 {
167         retm_if(data == NULL, "Data parameter is NULL");
168         Setting_GenGroupItem_Data *list_item =
169             (Setting_GenGroupItem_Data *) data;
170         const char *entry_str = elm_entry_entry_get(obj);
171         list_item->sub_desc = (char *)g_strdup(entry_str);
172 }
173
174 static void
175 setting_network_preffered_network_edit_click_softkey_save_cb(void *data,
176                                                              Evas_Object *obj,
177                                                              void *event_info)
178 {
179         /* error check */
180         retm_if(data == NULL,
181                 "[Setting > Network > Preferred Net] Data parameter for setting_network_preffered_network_edit_click_softkey_save_cb is NULL");
182
183         SettingNetworkUG *ad = (SettingNetworkUG *) data;
184         int request_id = -1;
185         int tapi_ret = TAPI_API_SUCCESS;
186         TelNetworkPrefferedPlmnInfo_t pref_plmn_info = { 0, };
187
188         int network_type = 0;
189         const char *mcc = NULL;
190         const char *mnc = NULL;
191         if (ad->data_edit_mcc) {
192                 mcc = ad->data_edit_mcc->sub_desc;
193         }
194         if (ad->data_edit_mnc) {
195                 mnc = ad->data_edit_mnc->sub_desc;
196         }
197
198         setting_retm_if(isEmptyStr(mcc)
199                         || isEmptyStr(mcc),
200                         "mcc or mnc got from editfiled error");
201         SETTING_TRACE("mcc:%s, mnc:%s", mcc, mnc);
202         int mcc_len = safeStrLen(mcc);
203         int mnc_len = safeStrLen(mnc);
204         if (COUNTRY_CODE_LEN != mcc_len) {
205                 if ((NETWORK_CODE_LEN < mnc_len) || (mnc_len <= 0)) {
206                         setting_create_popup_without_btn(ad, ad->win_get,
207                                              _("please input country code made up of 3 digital number and network code made up of 1 ~ 3 digital number"),
208                                              NULL, NULL, POPUP_INTERVAL);
209                 } else {
210                         setting_create_popup_without_btn(ad, ad->win_get,
211                                              _("please input country code made up of 3 digital number"),
212                                              NULL, NULL, POPUP_INTERVAL);
213                 }
214                 return;
215         }
216
217         if ((NETWORK_CODE_LEN < mnc_len) || (mnc_len <= 0)) {
218                 setting_create_popup_without_btn(ad, ad->win_get,
219                                      _("please input network code made up of 1 ~ 3 digital number"),
220                                      NULL, NULL, POPUP_INTERVAL);
221                 return;
222         }
223
224         network_type = elm_radio_value_get(ad->chk_edit_type);
225
226         memset(&pref_plmn_info, 0x00, sizeof(TelNetworkPrefferedPlmnInfo_t));
227         memcpy(&pref_plmn_info,
228                &ad->pref_list.PreffPlmnRecord[ad->sel_pref_idx],
229                sizeof(TelNetworkPrefferedPlmnInfo_t));
230
231         safeCopyStr((char *)pref_plmn_info.Plmn, mcc, 3);
232         safeCopyStr((char *)pref_plmn_info.Plmn + 3, mnc, 3);
233
234         /* save network type */
235         if (network_type == 0) {
236                 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_GSM;
237         } else {
238                 pref_plmn_info.SystemType = TAPI_NETWORK_SYSTEM_UMTS;
239         }
240         setting_network_popup_create(ad, _("IDS_ST_POP_SAVING"), TRUE);
241
242         tapi_ret =
243             tel_set_network_preferred_plmn(TAPI_NETWORK_PREF_PLMN_EDIT,
244                                            &pref_plmn_info, &request_id);
245         if (tapi_ret != TAPI_API_SUCCESS || request_id < 0) {
246                 SETTING_TRACE_DEBUG
247                     ("%s*** [ERR] tel_set_network_preferred_plmn(PLMN_EDIT) err=%d ***%s",
248                      SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
249                 setting_network_popup_update(ad, _("Save Failed!"), FALSE);
250         }
251
252         ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_EDIT;
253 }
254
255 static void
256 setting_network_preferred_network_edit_click_softkey_cancel_cb(void *data,
257                                                                Evas_Object *
258                                                                obj,
259                                                                void *event_info)
260 {
261         SettingNetworkUG *ad = (SettingNetworkUG *) data;
262
263         /* error check */
264         retm_if(data == NULL,
265                 "[Setting > Network > Preferred Net] Data parameter for setting_network_preffered_network_edit_click_softkey_save_cb is NULL");
266         ad->op_type = SETTING_NETWORK_PREFERRED_NETWORK_NONE;
267         setting_view_change(&setting_view_network_preferred_network_edit,
268                             &setting_view_network_preferred_network, ad);
269 }