4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
23 #include "view-main.h"
24 #include "common_pswd_popup.h"
25 #include "common_utils.h"
26 #include "view-alerts.h"
27 #include "i18nmanager.h"
28 #include "common_eap_connect.h"
30 extern wifi_object* syspopup_app_state;
32 static Evas_Object* list = NULL;
33 static Elm_Genlist_Item_Class itc;
35 int view_main_item_connection_mode_set(syspopup_genlist_data_t *data, ITEM_CONNECTION_MODES mode)
37 __COMMON_FUNC_ENTER__;
40 WARN_LOG(SP_NAME_NORMAL, "NULL == data");
45 if (ITEM_CONNECTION_MODE_NULL >= mode || ITEM_CONNECTION_MODE_MAX <= mode) {
46 ERROR_LOG(SP_NAME_NORMAL, "mode[%d] is not valid", mode);
52 data->connection_mode = mode;
53 INFO_LOG(SP_NAME_NORMAL, "mode: [%d]", data->connection_mode);
55 elm_genlist_item_update(data->it);
62 static ITEM_CONNECTION_MODES view_main_state_get(Evas_Object *glist)
64 __COMMON_FUNC_ENTER__;
67 return ITEM_CONNECTION_MODE_NULL;
69 Elm_Object_Item* it = NULL;
70 it = elm_genlist_first_item_get(glist);
72 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *)elm_object_item_data_get(it);
73 if (gdata->connection_mode == ITEM_CONNECTION_MODE_CONNECTING) {
74 return ITEM_CONNECTION_MODE_CONNECTING;
77 it = elm_genlist_item_next_get(it);
81 return ITEM_CONNECTION_MODE_OFF;
84 static void _popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
86 __COMMON_FUNC_ENTER__;
87 if (!syspopup_app_state->passpopup) {
90 assertm_if(NULL == data, "data is NULL!!");
91 assertm_if(NULL == obj, "obj is NULL!!");
92 assertm_if(NULL == event_info, "event_info is NULL!!");
94 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *)data;
95 char *profile_name = gdata->dev_info->profile_name;
96 wlan_security_mode_type_t sec_mode = gdata->dev_info->security_mode;
98 char* password = NULL;
100 int ret = WLAN_MANAGER_ERR_UNKNOWN;
101 password = common_pswd_popup_get_txt(syspopup_app_state->passpopup);
102 len_password = strlen(password);
103 INFO_LOG(SP_NAME_NORMAL, "* password len [%d]", len_password);
106 case WLAN_SEC_MODE_WEP:
107 if (len_password == 5 || len_password == 13 || len_password == 26 || len_password == 10) {
108 wlan_manager_password_data* param = (wlan_manager_password_data *)g_malloc0(sizeof(wlan_manager_password_data));
109 assertm_if(NULL == param, "param is NULL!!");
111 param->wlan_eap_type = WLAN_MANAGER_EAP_TYPE_NONE;
112 param->password = password;
114 ret = wlan_manager_connect_with_password(profile_name, sec_mode, param);
118 view_alerts_popup_show(WEP_WRONG_PASSWORD_LEN_ERR_MSG_STR);
123 case WLAN_SEC_MODE_WPA_PSK:
124 case WLAN_SEC_MODE_WPA2_PSK:
125 if (len_password < 8 || len_password > 63) {
126 view_alerts_popup_show(WPA_WRONG_PASSWORD_LEN_ERR_MSG_STR);
129 wlan_manager_password_data* param = (wlan_manager_password_data *)g_malloc0(sizeof(wlan_manager_password_data));
130 assertm_if(NULL == param, "param is NULL!!");
132 param->wlan_eap_type = WLAN_MANAGER_EAP_TYPE_NONE;
133 param->password = password;
135 ret = wlan_manager_connect_with_password(profile_name, sec_mode, param);
141 ret = WLAN_MANAGER_ERR_UNKNOWN;
142 ERROR_LOG(SP_NAME_ERR, "Fatal: Wrong security mode : %d", sec_mode);
146 if (WLAN_MANAGER_ERR_NONE == ret)
147 view_main_item_connection_mode_set(gdata, ITEM_CONNECTION_MODE_CONNECTING);
149 view_main_item_connection_mode_set(gdata, ITEM_CONNECTION_MODE_OFF);
151 common_pswd_popup_destroy(syspopup_app_state->passpopup);
152 syspopup_app_state->passpopup = NULL;
157 __COMMON_FUNC_EXIT__;
160 static void _popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
162 __COMMON_FUNC_ENTER__;
164 INFO_LOG(SP_NAME_NORMAL, "button cancel");
166 common_pswd_popup_destroy(syspopup_app_state->passpopup);
167 syspopup_app_state->passpopup = NULL;
169 __COMMON_FUNC_EXIT__;
172 static void _wps_pbc_popup_cancel_connecting(void* data, Evas_Object* obj, void* event_info)
174 if (!syspopup_app_state->passpopup || !data) {
178 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *)data;
179 char *profile_name = gdata->dev_info->profile_name;
180 int ret = wlan_manager_request_cancel_wps_connection(profile_name);
181 if (ret == WLAN_MANAGER_ERR_NONE) {
182 INFO_LOG(SP_NAME_NORMAL, "WPS conection cancelled successfully for AP[%s]", profile_name);
184 ERROR_LOG(SP_NAME_ERR, "Error!!! wlan_manager_request_cancel_wps_connection failed for AP[%s]", profile_name);
186 common_pswd_popup_destroy(syspopup_app_state->passpopup);
187 syspopup_app_state->passpopup = NULL;
191 static void _wps_btn_cb(void* data, Evas_Object* obj, void* event_info)
193 __COMMON_FUNC_ENTER__;
194 if (!syspopup_app_state->passpopup || !data) {
198 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *)data;
199 int ret = wlan_manager_request_wps_connection(gdata->dev_info->profile_name);
200 if (ret == WLAN_MANAGER_ERR_NONE) {
201 common_pswd_popup_pbc_popup_create(syspopup_app_state->passpopup, _wps_pbc_popup_cancel_connecting, gdata);
203 ERROR_LOG(SP_NAME_ERR, "Error!!! wlan_manager_request_wps_connection failed");
205 __COMMON_FUNC_EXIT__;
209 static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
211 __COMMON_FUNC_ENTER__;
212 assertm_if(NULL == data, "data is NULL!!");
213 assertm_if(NULL == obj, "obj is NULL!!");
214 assertm_if(NULL == event_info, "event_info is NULL!!");
215 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
217 if (view_main_state_get(obj) != ITEM_CONNECTION_MODE_OFF) {
218 INFO_LOG(SP_NAME_NORMAL, "In connecting state, nothing can do" );
219 elm_genlist_item_selected_set(item, 0);
220 __COMMON_FUNC_EXIT__;
224 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t*) data;
226 int ret = WLAN_MANAGER_ERR_UNKNOWN;
228 switch (gdata->connection_mode) {
229 case ITEM_CONNECTION_MODE_OFF:
230 INFO_LOG( SP_NAME_NORMAL, "item state: off");
231 ret = wlan_manager_request_connection(gdata->dev_info);
233 case ITEM_CONNECTION_MODE_CONNECTING:
234 INFO_LOG( SP_NAME_NORMAL, "item state: connecting");
237 ERROR_LOG( SP_NAME_NORMAL, "item state: etc [%d]", gdata->connection_mode);
242 case WLAN_MANAGER_ERR_NONE:
243 INFO_LOG( SP_NAME_NORMAL, "ERROR_NONE");
244 view_main_item_connection_mode_set(gdata, ITEM_CONNECTION_MODE_CONNECTING);
246 case WLAN_MANAGER_ERR_CONNECT_PASSWORD_NEEDED:
247 INFO_LOG( SP_NAME_NORMAL, "Password view will show up");
248 pswd_popup_create_req_data_t popup_info;
249 popup_info.title = gdata->dev_info->ssid;
250 popup_info.ok_cb = _popup_ok_cb;
251 popup_info.cancel_cb = _popup_cancel_cb;
252 popup_info.show_wps_btn = gdata->dev_info->wps_mode;
253 popup_info.wps_btn_cb = _wps_btn_cb;
254 popup_info.cb_data = gdata;
255 syspopup_app_state->passpopup = common_pswd_popup_create(syspopup_app_state->win_main, PACKAGE, &popup_info);
257 case WLAN_MANAGER_ERR_CONNECT_EAP_SEC_TYPE:
258 create_eap_connect(syspopup_app_state->win_main, NULL, PACKAGE, gdata->dev_info, NULL);
261 view_main_item_connection_mode_set(gdata, ITEM_CONNECTION_MODE_OFF);
263 ERROR_LOG( SP_NAME_NORMAL, "errro code [%d]", ret);
267 elm_genlist_item_selected_set(item, 0);
268 elm_genlist_item_update(item);
270 __COMMON_FUNC_EXIT__;
273 static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
275 __COMMON_FUNC_ENTER__;
277 assertm_if(NULL == data, "data param is NULL!!");
278 assertm_if(NULL == obj, "obj param is NULL!!");
279 assertm_if(NULL == part, "part param is NULL!!");
281 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *) data;
282 if (!strncmp(part, "elm.text.1", strlen(part))) {
283 ret = gdata->dev_info->ssid;
285 ERROR_LOG(SP_NAME_NORMAL, "ssid name is NULL!!");
287 } else if (!strncmp(part, "elm.text.2", strlen(part))) {
288 if (ITEM_CONNECTION_MODE_CONNECTING == gdata->connection_mode) {
289 ret = sc(PACKAGE, I18N_TYPE_Connecting);
291 ret = gdata->dev_info->ap_status_txt;
294 ERROR_LOG(SP_NAME_NORMAL, "ap_status_txt is NULL!!");
298 __COMMON_FUNC_EXIT__;
300 return g_strdup(ret);
303 static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
305 __COMMON_FUNC_ENTER__;
309 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *) data;
311 const char* ssid_name = gdata->dev_info->ssid;
312 INFO_LOG(SP_NAME_NORMAL, "ssid name [%s]", ssid_name);
314 Evas_Object* icon = NULL;
316 if (!strncmp(part, "elm.icon.1", strlen(part))) {
317 icon = elm_icon_add(obj);
318 elm_icon_file_set(icon, gdata->dev_info->ap_image_path, NULL);
319 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 5, 5);
320 } else if (!strncmp(part, "elm.icon.2", strlen(part))) {
321 switch (gdata->connection_mode) {
322 case ITEM_CONNECTION_MODE_OFF:
325 case ITEM_CONNECTION_MODE_CONNECTING:
326 icon = elm_progressbar_add(obj);
327 elm_object_style_set(icon, "list_process");
328 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, 0.5);
329 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
330 elm_progressbar_pulse(icon, TRUE);
336 __COMMON_FUNC_EXIT__;
340 static void _gl_list_del(void* data, Evas_Object* obj)
345 syspopup_genlist_data_t* gdata = (syspopup_genlist_data_t *) data;
347 if (gdata->dev_info) {
348 DEBUG_LOG(UG_NAME_NORMAL, "del target ssid:[%s]", gdata->dev_info->ssid);
349 g_free(gdata->dev_info->ap_image_path);
350 g_free(gdata->dev_info->ap_status_txt);
351 g_free(gdata->dev_info->ssid);
352 g_free(gdata->dev_info);
354 elm_object_item_data_set(gdata->it, NULL);
360 Evas_Object *view_main_create(Evas_Object* parent)
362 __COMMON_FUNC_ENTER__;
363 assertm_if(NULL == parent, "parent is NULL!!");
365 list = elm_genlist_add(parent); //syspopup_app_state->win_main);
366 assertm_if(NULL == list, "list allocation fail!!");
368 evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
369 evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
371 __COMMON_FUNC_EXIT__;
376 int view_main_destroy(void)
378 __COMMON_FUNC_ENTER__;
380 evas_object_del(list);
384 __COMMON_FUNC_EXIT__;
388 static void view_main_scan_ui_clear(void)
390 __COMMON_FUNC_ENTER__;
394 elm_genlist_clear(list);
396 __COMMON_FUNC_EXIT__;
399 void *view_main_item_set(net_profile_info_t *profile_info)
401 __COMMON_FUNC_ENTER__;
403 wifi_device_info_t *wifi_device = (wifi_device_info_t*)g_malloc0(sizeof(wifi_device_info_t));
405 wifi_device->profile_name = g_strdup(profile_info->ProfileName);
406 wifi_device->ssid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
407 wifi_device->rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
408 wifi_device->security_mode = (int)profile_info->ProfileInfo.Wlan.security_info.sec_mode;
409 wifi_device->wps_mode = (int)profile_info->ProfileInfo.Wlan.security_info.wps_support;
410 wifi_device->ap_status_txt = common_utils_get_ap_security_type_info_txt(PACKAGE, wifi_device);
411 wifi_device->ap_image_path = common_utils_get_device_icon(WIFI_SP_ICON_PATH, wifi_device);
413 __COMMON_FUNC_EXIT__;
417 int view_main_refresh()
419 view_main_show(NULL);
424 Eina_Bool view_main_show(void *data)
426 __COMMON_FUNC_ENTER__;
429 ERROR_LOG( SP_NAME_NORMAL, "list is NULL!!" );
430 return ECORE_CALLBACK_CANCEL;
433 view_main_scan_ui_clear();
435 char profile_name[NET_PROFILE_NAME_LEN_MAX+1] = "";
436 int state = wlan_manager_state_get(profile_name);
438 if (WLAN_MANAGER_ERROR == state || WLAN_MANAGER_OFF == state) {
439 return ECORE_CALLBACK_CANCEL;
442 net_profile_info_t *profiles_list = wlan_manager_profile_table_get();
443 if (profiles_list == NULL)
444 return ECORE_CALLBACK_CANCEL;
446 int profiles_list_size = wlan_manager_profile_scanned_length_get();
447 INFO_LOG(SP_NAME_NORMAL, "profiles list count [%d]\n", profiles_list_size);
448 if (profiles_list_size <= 0) {
449 WARN_LOG(SP_NAME_NORMAL, "scan size is ZERO");
450 return ECORE_CALLBACK_CANCEL;
453 itc.item_style = "2text.2icon.4";
454 itc.func.text_get = _gl_text_get;
455 itc.func.content_get = _gl_content_get;
456 itc.func.state_get = NULL;
457 itc.func.del = _gl_list_del;
460 if (WLAN_MANAGER_CONNECTING == state) {
461 for (; i < profiles_list_size; i++) {
462 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *)g_malloc0(sizeof(syspopup_genlist_data_t));
463 gdata->dev_info = (wifi_device_info_t *)view_main_item_set(profiles_list+i);
464 if (!g_strcmp0((profiles_list+i)->ProfileName, profile_name)) {
465 gdata->connection_mode = ITEM_CONNECTION_MODE_CONNECTING;
466 gdata->it = elm_genlist_item_append(list, &itc, gdata, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, gdata);
467 /* We have found the connecting AP, so lets break here and continue list
468 * the remaining in the below for loop. The below for loop doesnt have comparison.
469 * So it makes things little fast.
473 gdata->connection_mode = ITEM_CONNECTION_MODE_OFF;
474 gdata->it = elm_genlist_item_append(list, &itc, gdata, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, gdata);
478 for (; i < profiles_list_size; i++) {
479 syspopup_genlist_data_t *gdata = (syspopup_genlist_data_t *)g_malloc0(sizeof(syspopup_genlist_data_t));
480 gdata->dev_info = (wifi_device_info_t *)view_main_item_set(profiles_list+i);
481 gdata->connection_mode = ITEM_CONNECTION_MODE_OFF;
483 gdata->it = elm_genlist_item_append(list, &itc, gdata, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, gdata);
484 elm_object_item_data_set(gdata->it, gdata);
487 evas_object_show(list);
488 __COMMON_FUNC_EXIT__;
490 return ECORE_CALLBACK_CANCEL;