Implement the 'Create' connection function
[apps/core/preloaded/settings.git] / setting-network / src / setting-network-con.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-con.h>
22
23 static int setting_network_con_create(void *cb);
24 static int setting_network_con_destroy(void *cb);
25 static int setting_network_con_update(void *cb);
26 static int setting_network_con_cleanup(void *cb);
27
28 setting_view setting_view_network_con = {
29         .create = setting_network_con_create,
30         .destroy = setting_network_con_destroy,
31         .update = setting_network_con_update,
32         .cleanup = setting_network_con_cleanup,
33 };
34
35 /* ***************************************************
36  *
37  *basic func
38  *
39  ***************************************************/
40
41 static int setting_network_con_create(void *cb)
42 {
43         SETTING_TRACE_BEGIN;
44         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
45
46         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
47
48         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
49         elm_object_style_set(scroller, "dialogue");
50         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
51                  "Cannot set scroller object  as contento of layout");
52         elm_genlist_clear(scroller);    /* first to clear list */
53         Evas_Object *controlbar = NULL;
54
55         setting_push_layout_navi_bar(CONNECTION_DSC,
56                                      _("IDS_COM_BODY_BACK"),
57                                      _(KeyStr_Reset_Def),
58                                      _("Create"),
59                                      setting_network_con_click_softkey_cancel_cb,
60                                      setting_network_con_click_softkey_reset_cb,
61                                      setting_network_con_click_softkey_create_cb,
62                                      ad, scroller, ad->navi_bar, &controlbar);
63         Elm_Object_Item *item = NULL;
64 #ifndef SUPPORT_CON_RESET
65         item = elm_toolbar_last_item_get(controlbar);
66         elm_object_item_disabled_set(item, EINA_TRUE);
67 #endif
68         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
69                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
70         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
71
72         /* scroller is a genlist */
73         setting_create_Gendial_field_def(scroller, &itc_1text,
74                                          setting_network_con_item_Gendial_mouse_up_cb,
75                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
76                                          0, "IDS_ST_BODY_INTERNET_CONNECTION",
77                                          NULL, NULL);
78         setting_create_Gendial_field_def(scroller, &itc_1text,
79                                          setting_network_con_item_Gendial_mouse_up_cb,
80                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
81                                          0, STR_SETTING_MMS_CONNECTIONS, NULL,
82                                          NULL);
83
84 #ifdef ENABLED_PREFERRED_NETWORKS
85         setting_create_Gendial_field_def(scroller, &itc_1text,
86                                          setting_network_con_item_Gendial_mouse_up_cb,
87                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
88                                          0, "IDS_ST_BODY_PREFERRED_NETWORKS",
89                                          NULL, NULL);
90 #endif
91 #ifdef ENABLED_2G3G_NETWORK
92         /*  create 3g connection option */
93         setting_create_Gendial_field_def(scroller, &itc_1text,
94                                          setting_network_con_item_Gendial_mouse_up_cb,
95                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
96                                          0, "2G/3G Connection", NULL, NULL);
97
98 #endif
99         if (NULL == ad->prof_list)
100         {
101                 int err = net_get_profile_list(NET_DEVICE_CELLULAR, &(ad->prof_list), &(ad->prof_count));
102                 if (err != NET_ERR_NONE) {
103                         SETTING_TRACE_DEBUG
104                             ("%s*** [ERR] Internet net_get_app_profile_id. err=%d ***%s",
105                              SETTING_FONT_RED, err, SETTING_FONT_BLACK);
106                 }
107
108         }
109         if (ad->prof_list)
110         {
111                 int ci = 0;
112                 for(ci = 0;ci < ad->prof_count;ci++){
113                         SETTING_TRACE_DEBUG("profList[%d].ProfileName:%s", ci,ad->prof_list[ci].ProfileName);
114                         SETTING_TRACE_DEBUG("profList[%d].ProfileInfo.Pdp.ServiceType:%d", ci, ad->prof_list[ci].ProfileInfo.Pdp.ServiceType);
115                         SETTING_TRACE_DEBUG("profList[%d].ProfileInfo.Pdp.Apn:%s", ci, ad->prof_list[ci].ProfileInfo.Pdp.Apn);
116                 }
117                 for(ci = ad->prof_count -1;ci >= 0;ci--){ //revert the sequence of profiles
118
119                         if(NET_DEVICE_CELLULAR == ad->prof_list[ci].profile_type) {
120                                 if (NET_SERVICE_INTERNET != ad->prof_list[ci].ProfileInfo.Pdp.ServiceType
121                                     && NET_SERVICE_MMS != ad->prof_list[ci].ProfileInfo.Pdp.ServiceType) //unknow, match with ad->con_name
122                                 {
123                                         SETTING_TRACE("ad->prof_list[ci].ProfileInfo.Pdp.Apn:%s", ad->prof_list[ci].ProfileInfo.Pdp.Apn);
124                                         setting_create_Gendial_field_def(scroller, &itc_1text,
125                                                                          setting_network_con_item_Gendial_mouse_up_cb,
126                                                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
127                                                                          0, ad->prof_list[ci].ProfileInfo.Pdp.Apn, NULL,
128                                                                          NULL);
129                                 }
130                         }
131                 }
132         }
133
134
135         /*  add separator */
136         item = elm_genlist_item_append(scroller, &itc_bottom_seperator,
137                                        NULL, NULL,
138                                        ELM_GENLIST_ITEM_NONE, NULL, NULL);
139         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
140         setting_view_network_con.is_create = 1;
141
142         return SETTING_RETURN_SUCCESS;
143 }
144
145 static int setting_network_con_destroy(void *cb)
146 {
147         SETTING_TRACE_BEGIN;
148         /* error check */
149         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
150
151         SettingNetworkUG *ad = (SettingNetworkUG *) cb;
152         FREE(ad->con_name);
153         elm_naviframe_item_pop(ad->navi_bar);
154         setting_view_network_con.is_create = 0;
155
156         return SETTING_RETURN_SUCCESS;
157 }
158
159 static int setting_network_con_update(void *cb)
160 {
161         setting_network_con_destroy(cb);
162         setting_network_con_create(cb);
163         return SETTING_RETURN_SUCCESS;
164 }
165
166 static int setting_network_con_cleanup(void *cb)
167 {
168         return setting_network_con_destroy(cb);
169 }
170
171 /* ***************************************************
172  *
173  *general func
174  *
175  ***************************************************/
176
177 /* ***************************************************
178  *
179  *call back func
180  *
181  ***************************************************/
182
183 static void
184 setting_network_con_item_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
185                                               void *event_info)
186 {
187         SETTING_TRACE_BEGIN;
188         /* error check */
189         setting_retm_if(data == NULL, "Data parameter is NULL");
190         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
191         elm_genlist_item_selected_set(item, 0);
192         Setting_GenGroupItem_Data *list_item =
193             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
194
195         SettingNetworkUG *ad = (SettingNetworkUG *) data;
196
197         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
198         int ret;
199
200         if (!safeStrCmp("IDS_ST_BODY_SELECT_NETWORK", list_item->keyStr)) {
201                 ret =
202                     setting_view_change(&setting_view_network_main,
203                                         &setting_view_network_select_network,
204                                         ad);
205         }
206 #ifdef ENABLED_PREFERRED_NETWORKS
207         else if (!safeStrCmp("IDS_ST_BODY_PREFERRED_NETWORKS",
208                                 list_item->keyStr)) {
209
210                 int value = -1;
211                 int err = -1;
212                 ret =
213                     setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value,
214                                             &err);
215                         /** @todo check 'err' variable for exception handling */
216                 SETTING_TRACE("INT_SLP_SETTING_SIM_SLOT value:%d", value);
217                 switch (value) {
218                 case VCONFKEY_TELEPHONY_SIM_INSERTED:
219                         /* To Recreate the view in order to search the perferred network again. */
220                         /* ret = setting_view_destroy(&setting_view_network_preferred_network, ad); */
221                         ret =
222                             setting_view_change(&setting_view_network_main,
223                                                 &setting_view_network_preferred_network,
224                                                 ad);
225
226                         break;
227
228                 case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
229
230                         setting_create_simple_popup(NULL, ad->win_get,
231                                                     NULL, _("IDS_ST_SECURITY_BODY_NOIMSI"));
232                         SETTING_TRACE_DEBUG
233                             ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
234                              SETTING_FONT_RED, value, SETTING_FONT_BLACK);
235                         return;
236
237                         break;
238
239                 case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
240                 case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
241
242                         setting_create_simple_popup(NULL, ad->win_get,
243                                                     NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
244                         SETTING_TRACE_DEBUG
245                             ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
246                              SETTING_FONT_RED, value, SETTING_FONT_BLACK);
247                         return;
248
249                         break;
250                 default:
251                         SETTING_TRACE("Unknown SIM information from vconf");
252                         break;
253                 }
254         }
255 #endif
256 #ifdef ENABLED_2G3G_NETWORK
257         else if (!safeStrCmp("2G/3G Connection", list_item->keyStr)) {
258                 ret =
259                     setting_view_change(&setting_view_network_main,
260                                         &setting_view_network_3gcon, ad);
261         }
262 #endif
263         else {//connections..
264                 ad->con_name = strdup(list_item->keyStr);
265                 ret = setting_view_change(&setting_view_network_main,
266                                         &setting_view_network_connection_create,
267                                         ad);
268         }
269 }
270
271 static void
272 setting_network_con_click_softkey_reset_cb(void *data, Evas_Object *obj, void *event_info)
273 {
274         SETTING_TRACE_BEGIN;
275         /* error check */
276         retm_if(data == NULL, "Data parameter is NULL");
277
278         SettingNetworkUG *ad = (SettingNetworkUG *) data;
279         //Reset connections info..
280         excuteCmd("/usr/bin/dbus-send", 1, NET_CON_RESET_DBUS_PARA);
281         setting_create_simple_popup(ad, ad->win_get, NULL, _("IDS_COM_POP_SUCCESS"));
282 }
283
284 static void
285 setting_network_con_click_softkey_create_cb(void *data, Evas_Object *obj,
286                                            void *event_info)
287 {
288         /* error check */
289         retm_if(data == NULL, "Data parameter is NULL");
290
291         SettingNetworkUG *ad = (SettingNetworkUG *) data;
292
293         //setting_create_simple_popup(ad, ad->win_get, NULL, _("UX Undefined"));
294         //return;
295
296         //to add a new connection
297         //ad->con_type = -1;
298         ad->con_name = strdup(STR_SETTING_NEW_CONNECTIONS);
299         setting_view_change(&setting_view_network_main, &setting_view_network_connection_create, ad);
300 }
301
302 static void
303 setting_network_con_click_softkey_cancel_cb(void *data, Evas_Object *obj,
304                                               void *event_info)
305 {
306         /* error check */
307         retm_if(data == NULL, "Data parameter is NULL");
308
309         SettingNetworkUG *ad = (SettingNetworkUG *) data;
310
311         setting_view_change(&setting_view_network_con,
312                             &setting_view_network_main, ad);
313 }