2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
20 #include "view_ime_password.h"
21 #include "i18nmanager.h"
22 #include "wlan_manager.h"
23 #include "viewer_manager.h"
27 static Elm_Genlist_Item_Class itc;
28 static Elm_Genlist_Item_Class show_pw_itc;
29 static Elm_Genlist_Item_Class wps_itc;
30 static Elm_Genlist_Item_Class wps_sep_itc;
32 static Evas_Object* button_done = NULL;
33 static Evas_Object* _entry = NULL;
34 static int view_ime_password_end = TRUE;
36 typedef struct _view_ime_password_data {
40 } view_ime_password_data;
41 view_ime_password_data *_password_data = NULL;
44 static void _entry_changed_cb(void* data, Evas_Object* obj, void* event_info)
46 __COMMON_FUNC_ENTER__;
48 if (elm_object_focus_get(data)) {
49 if (elm_entry_is_empty(obj))
50 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
52 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
55 const char* txt = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
59 INFO_LOG(UG_NAME_NORMAL, "* text [%s]", txt);
62 if (_password_data->security_mode == WLAN_SEC_MODE_WEP) {
64 elm_object_disabled_set(button_done, EINA_FALSE);
66 elm_object_disabled_set(button_done, EINA_TRUE);
69 if (len > 7 && len < 64) {
70 elm_object_disabled_set(button_done, EINA_FALSE);
72 elm_object_disabled_set(button_done, EINA_TRUE);
76 ERROR_LOG(UG_NAME_NORMAL, "Err!");
82 static void _entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
84 if (!elm_entry_is_empty(obj))
85 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
86 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
89 static void _entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
91 if (elm_entry_is_empty(obj))
92 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
93 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
96 static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
98 elm_entry_entry_set(data, "");
101 static int _genlist_item_disable_later(void* data)
104 elm_genlist_item_selected_set((Elm_Object_Item*) data, FALSE);
109 static void _wps_btn_cb(void* data, Evas_Object* obj, void* event_info)
111 __COMMON_FUNC_ENTER__;
113 if (_password_data == NULL)
116 int ret = wlan_manager_request_wps_connection(_password_data->profile_name);
117 if (ret == WLAN_MANAGER_ERR_NONE) {
118 viewer_manager_header_mode_set(HEADER_MODE_CONNECTING);
119 viewer_manager_item_radio_mode_set(NULL, viewer_manager_current_selected_item_get(), VIEWER_ITEM_RADIO_MODE_WPS_CONNECTING);
120 winset_popup_mode_set((void *)_password_data->profile_name, POPUP_MODE_PBC, POPUP_OPTION_NONE);
121 __COMMON_FUNC_EXIT__;
124 ecore_idler_add( (Ecore_Task_Cb) _genlist_item_disable_later, event_info);
126 __COMMON_FUNC_EXIT__;
129 static void _show_pw_changed_cb(void *data, Evas_Object *obj, void *event_info)
134 Eina_Bool state = elm_check_state_get(obj);
135 elm_entry_password_set(_entry, !state);
138 static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part)
140 Evas_Object *layout = NULL;
141 assertm_if(NULL == part, "NULL!!");
143 DEBUG_LOG(UG_NAME_NORMAL, "part [%s]", part);
145 if (!strncmp(part, "elm.icon", strlen(part))) {
146 layout = elm_layout_add(obj);
148 elm_layout_theme_set(layout, "layout", "editfield", "title");
149 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
150 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
151 _entry = elm_entry_add(obj);
152 elm_object_part_content_set(layout, "elm.swallow.content", _entry);
153 elm_object_part_text_set(layout, "elm.text", sc(PACKAGE, I18N_TYPE_Input_password));
154 elm_entry_entry_set(_entry, "");
156 evas_object_smart_callback_add(_entry, "changed", _entry_changed_cb, layout);
157 evas_object_smart_callback_add(_entry, "focused", _entry_focused_cb, layout);
158 evas_object_smart_callback_add(_entry, "unfocused", _entry_unfocused_cb, layout);
159 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, _entry);
161 elm_entry_password_set(_entry, TRUE);
162 elm_entry_input_panel_layout_set(_entry, ELM_INPUT_PANEL_LAYOUT_URL);
163 evas_object_show(_entry);
164 evas_object_show(layout);
165 elm_object_focus_set(layout, EINA_TRUE);
172 static Evas_Object *_show_pw_content_get(void *data, Evas_Object *obj, const char *part)
174 Evas_Object *check = NULL;
176 if (!strncmp(part, "elm.icon", strlen(part))) {
177 check = elm_check_add(obj);
178 elm_object_text_set(check, sc(PACKAGE, I18N_TYPE_Show_password));
179 elm_object_focus_allow_set(check, EINA_FALSE);
181 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
184 evas_object_smart_callback_add(check, "changed", _show_pw_changed_cb, obj);
190 static Evas_Object *_wps_content_get(void *data, Evas_Object *obj, const char *part)
195 Evas_Object* btn = NULL;
197 if(!strncmp(part, "elm.icon", strlen(part))) {
198 btn = elm_button_add(obj);
199 elm_object_text_set(btn, "WPS connection");
205 static Evas_Object* _create_list(Evas_Object* parent)
207 assertm_if(NULL == parent, "NULL!!");
209 Evas_Object *list = elm_genlist_add(parent);
210 elm_genlist_mode_set(list, ELM_LIST_LIMIT);
211 evas_object_size_hint_weight_set(list,
214 evas_object_size_hint_align_set(list,
218 itc.item_style = "1icon";
219 itc.func.text_get = NULL;
220 itc.func.content_get = _content_get;
221 itc.func.state_get = NULL;
224 WLAN_MANAGER_EAP_TYPES det = WLAN_MANAGER_EAP_TYPE_NONE;
226 INFO_LOG(UG_NAME_SCAN, "WlanSecMode %d", _password_data->security_mode);
227 if (_password_data->security_mode == WLAN_SEC_MODE_IEEE8021X) {
228 det =WLAN_MANAGER_EAP_TYPE_ERROR;
230 det = WLAN_MANAGER_EAP_TYPE_NONE;
233 INFO_LOG(UG_NAME_SCAN, "EAP Type %d", det);
235 case WLAN_MANAGER_EAP_TYPE_NONE:
236 elm_genlist_item_append(list, &itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
238 case WLAN_MANAGER_EAP_TYPE_ERROR:
241 INFO_LOG(UG_NAME_SCAN, "EAP Type error");
245 show_pw_itc.item_style = "1text.1icon.2";
246 show_pw_itc.func.text_get = NULL;
247 show_pw_itc.func.content_get = _show_pw_content_get;
248 show_pw_itc.func.state_get = NULL;
249 show_pw_itc.func.del = NULL;
250 Elm_Object_Item *item = elm_genlist_item_append(list, &show_pw_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
251 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
253 if (_password_data->wps_mode) {
254 wps_sep_itc.item_style = "dialogue/separator/20";
255 wps_sep_itc.func.text_get = NULL;
256 wps_sep_itc.func.content_get = NULL;
257 wps_sep_itc.func.state_get = NULL;
258 wps_sep_itc.func.del = NULL;
259 elm_genlist_item_append(list, &wps_sep_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
261 wps_itc.item_style = "dialogue/bg/1icon";
262 wps_itc.func.text_get = NULL;
263 wps_itc.func.content_get = _wps_content_get;
264 wps_itc.func.state_get = NULL;
265 wps_itc.func.del = NULL;
266 elm_genlist_item_append(list, &wps_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, _wps_btn_cb, NULL);
272 static void view_ime_password_back(void *data, Evas_Object *obj, void *event_info)
274 __COMMON_FUNC_ENTER__;
276 if(view_ime_password_end == TRUE)
279 view_ime_password_end = TRUE;
281 viewer_manager_set_enabled_list_click(EINA_TRUE);
282 viewer_manager_set_enabled_list_update(EINA_TRUE);
284 view_ime_password_destroy();
286 __COMMON_FUNC_EXIT__;
289 static void view_ime_password_done(void *data, Evas_Object *obj, void *event_info)
291 __COMMON_FUNC_ENTER__;
293 if(view_ime_password_end == TRUE) {
296 view_ime_password_end = TRUE;
298 int ret = WLAN_MANAGER_ERR_UNKNOWN;
299 wlan_manager_password_data* param = (wlan_manager_password_data*) g_malloc0(sizeof(wlan_manager_password_data));
300 param->wlan_eap_type = _password_data->security_mode;
303 const char* szPassword = NULL;
304 switch (param->wlan_eap_type) {
305 case WLAN_SEC_MODE_WEP:
306 szPassword = elm_entry_markup_to_utf8(elm_entry_entry_get(_entry));
307 nLen = strlen(szPassword);
309 if (nLen == 5 || nLen == 13 || nLen == 26 || nLen == 10) {
310 INFO_LOG(UG_NAME_NORMAL, "password = [%s]", szPassword);
312 winset_popup_mode_set(NULL, POPUP_MODE_CONNECTING_FAILED, POPUP_OPTION_CONNECTIONG_PASSWORD_WEP_ERROR);
313 view_ime_password_end = FALSE;
317 param->password = strdup(szPassword);
318 viewer_manager_item_radio_mode_all_reset();
319 viewer_manager_item_radio_mode_set(NULL, viewer_manager_current_selected_item_get(), VIEWER_ITEM_RADIO_MODE_CONNECTING);
320 viewer_manager_header_mode_set(HEADER_MODE_CONNECTING);
322 ret = wlan_manager_connect_with_password(_password_data->profile_name, _password_data->security_mode, param);
324 case WLAN_SEC_MODE_WPA_PSK:
325 case WLAN_SEC_MODE_WPA2_PSK:
326 szPassword = elm_entry_markup_to_utf8(elm_entry_entry_get(_entry));
327 nLen = strlen(szPassword);
329 if (nLen < 8 || nLen > 63) {
330 winset_popup_mode_set(NULL, POPUP_MODE_CONNECTING_FAILED, POPUP_OPTION_CONNECTIONG_PASSWORD_WPAPSK_ERROR);
331 view_ime_password_end = FALSE;
334 INFO_LOG(UG_NAME_NORMAL, "password = [%s]", szPassword);
337 param->password = strdup(szPassword);
338 viewer_manager_item_radio_mode_all_reset();
339 viewer_manager_item_radio_mode_set(NULL, viewer_manager_current_selected_item_get(), VIEWER_ITEM_RADIO_MODE_CONNECTING);
340 viewer_manager_header_mode_set(HEADER_MODE_CONNECTING);
342 ret = wlan_manager_connect_with_password(_password_data->profile_name, _password_data->security_mode, param);
349 case WLAN_MANAGER_ERR_NONE:
350 INFO_LOG(UG_NAME_SCAN, "connect with password comp");
353 ERROR_LOG(UG_NAME_SCAN, "wlan error %d", ret);
354 viewer_manager_refresh(TRUE);
358 view_ime_password_destroy();
360 __COMMON_FUNC_EXIT__;
363 void view_ime_password(wifi_device_info_t *device_info)
365 __COMMON_FUNC_ENTER__;
366 view_ime_password_end = FALSE;
368 Evas_Object *navi_frame = viewer_manager_get_naviframe();
369 if (navi_frame == NULL)
372 _password_data = (view_ime_password_data *) malloc(sizeof(view_ime_password_data));
373 if (_password_data == NULL)
376 memset(_password_data, 0, sizeof(view_ime_password_data));
377 _password_data->profile_name = strdup(device_info->profile_name);
378 _password_data->security_mode = device_info->security_mode;
379 _password_data->wps_mode = device_info->wps_mode;
381 Evas_Object* layout = elm_layout_add(navi_frame);
382 elm_layout_theme_set(layout, "standard", "window", "integration");
383 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
384 edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,show,content", "elm");
385 edje_object_signal_emit(elm_layout_edje_get(layout), "elm,bg,show,group_list", "elm");
387 Evas_Object* conform = elm_conformant_add(navi_frame);
388 elm_object_style_set(conform, "internal_layout");
389 elm_object_part_content_set(layout, "elm.swallow.content", conform);
391 Evas_Object* list = _create_list(navi_frame);
392 elm_object_content_set(conform, list);
394 elm_naviframe_prev_btn_auto_pushed_set(navi_frame, EINA_FALSE);
395 Elm_Object_Item *navi_it = elm_naviframe_item_push(navi_frame, sc(PACKAGE, I18N_TYPE_Password), NULL, NULL, layout, NULL);
396 elm_naviframe_prev_btn_auto_pushed_set(navi_frame, EINA_TRUE);
398 Evas_Object* button_back = elm_button_add(navi_frame);
399 elm_object_style_set(button_back, "naviframe/title/default");
400 elm_object_text_set(button_back, sc(PACKAGE, I18N_TYPE_Back));
401 evas_object_smart_callback_add(button_back, "clicked", view_ime_password_back, NULL);
402 elm_object_item_part_content_set(navi_it, "title_left_btn", button_back);
404 button_done = elm_button_add(navi_frame);
405 elm_object_style_set(button_done, "naviframe/title/default");
406 elm_object_text_set(button_done, sc(PACKAGE, I18N_TYPE_Done));
407 evas_object_smart_callback_add(button_done, "clicked", (Evas_Smart_Cb) view_ime_password_done, NULL);
408 elm_object_item_part_content_set(navi_it, "title_right_btn", button_done);
410 evas_object_show(layout);
412 __COMMON_FUNC_EXIT__;
415 void view_ime_password_destroy()
418 evas_object_smart_callback_del(_entry, "changed", _entry_changed_cb);
419 evas_object_smart_callback_del(_entry, "focused", _entry_focused_cb);
420 evas_object_smart_callback_del(_entry, "unfocused", _entry_unfocused_cb);
424 if (_password_data) {
425 g_free(_password_data);
426 _password_data = NULL;
429 elm_naviframe_item_pop(viewer_manager_get_naviframe());