From b232fe0024739213ba70902a98e4dc85231967c6 Mon Sep 17 00:00:00 2001 From: Abhishek Sansanwal Date: Fri, 12 May 2017 17:29:32 +0530 Subject: [PATCH] Added Fixes to keyboard input on passcode popup Description: Fixed issue where keyboard closed on more than 8 characters long input. Also enabled cancel and done button on keyboard to connect or close the wifi passcode popup. Signed-off-by: Abhishek Sansanwal Change-Id: Idca560a697b513b1e9b696117027e6b223310572 --- include/common/viewmgr.h | 1 + include/layout/network.h | 1 - res/layout/network.edc | 42 +------------ src/layout/layout_network.c | 110 +++++++++++++++++++--------------- src/view/network/view_wireless_list.c | 5 +- 5 files changed, 70 insertions(+), 89 deletions(-) diff --git a/include/common/viewmgr.h b/include/common/viewmgr.h index 2bcad6c..de3bec2 100644 --- a/include/common/viewmgr.h +++ b/include/common/viewmgr.h @@ -43,6 +43,7 @@ typedef struct _view_class { enum list_type { GRID_UPDATE = 0, GRID_FILL, + VIEW_HIDE, GRID_HIDE, GRID_FOREACH, GRID_SHOW diff --git a/include/layout/network.h b/include/layout/network.h index d4a8e7f..2c144f1 100644 --- a/include/layout/network.h +++ b/include/layout/network.h @@ -68,7 +68,6 @@ #define STR_REFRESH "Refresh" #define STR_RETRY "Retry" #define STR_NO_NETWORK "No network connection.
Please check your network." -#define STR_ENTER_PASSCODE "Enter password" #define STR_WIRED_PROGRESS "Checking wired network connection..." #define STR_WIRELESS_PROGRESS "Checking wireless network connection..." #define STR_WIRED_COMPLETED "Wired network connection." diff --git a/res/layout/network.edc b/res/layout/network.edc index 965704c..59f0e47 100644 --- a/res/layout/network.edc +++ b/res/layout/network.edc @@ -1425,44 +1425,6 @@ group { } } - part { - name, PART_WIFI_NAME; - type, TEXT; - scale, 1; - description { - state, "default" 0.0; - min, 0 24; - rel1 { - to, "padding.title"; - relative, 0.0 1.0; - } - rel2.to, "padding.title"; - align, 0.5 0.0; - fixed, 0 1; - color, COLOR_TEXT_POPUP; - text { - font, FONT_LIGHT; - size, 24; - } - } - } - - part { - name, "padding.passcode"; - type, SPACER; - scale, 1; - description { - state, "default" 0.0; - min, 0 20; - rel1 { - to, PART_WIFI_NAME; - relative, 0.0 1.0; - } - rel2.to, PART_WIFI_NAME; - align, 0.5 0.0; - fixed, 0 1; - } - } part { name, "padding.passcode.area"; @@ -1472,11 +1434,11 @@ group { state, "default" 0.0; min, 460 58; rel1 { - to, "padding.passcode"; + to, "padding.title"; relative, 0.5 1.0; } rel2 { - to, "padding.passcode"; + to, "padding.title"; relative, 0.5 1.0; } align, 0.5 0.0; diff --git a/src/layout/layout_network.c b/src/layout/layout_network.c index 621fc1f..96ebe66 100644 --- a/src/layout/layout_network.c +++ b/src/layout/layout_network.c @@ -42,6 +42,7 @@ #define SIG_LIST_ITEM_UNFOCUS "elm,state,unfocused" #define MAX_WIRELESS_LEN 64 +#define NW_BUF_MAX_LENGTH (255) #define MIN_WIRELESS_LEN 8 #define PADDING_X 4 #define PADDING_Y 0 @@ -919,7 +920,7 @@ static void _grid_focused_cb(int id, void *data, Evas_Object *obj, Elm_Object_It /* If popup is shown, revert focus to popup */ if (priv->passcode_popup) - elm_object_focus_set(priv->popup_btn1, EINA_TRUE); + elm_object_focus_set(priv->passcode_entry, EINA_TRUE); priv->focused_wireless_item = item; @@ -961,8 +962,8 @@ void _wireless_selected_cb(Elm_Object_Item *it, void *data) if (!wifi_name) return; - if (!viewmgr_remove_view(VIEW_WIRELESS_LIST)) { - _ERR("Remove view failed"); + if (!viewmgr_update_view(VIEW_WIRELESS_LIST, VIEW_HIDE, priv)) { + _ERR("Hide view failed"); } if (!_draw_wifi_passcode_popup(priv, wifi_name, false)) { @@ -1347,6 +1348,7 @@ static void _connect_wifi_with_passcode(struct _priv *priv) _remove_wifi_passcode_popup(priv); } +/* static void _popup_clicked_cb(int id, void *data, Evas_Object *obj) { struct _priv *priv; @@ -1368,9 +1370,6 @@ static void _popup_clicked_cb(int id, void *data, Evas_Object *obj) _popup_connecting_wireless_status(priv); _connect_wifi_with_passcode(priv); - /* Update status for all items */ -/* if (!listmgr_update_grid(priv->listmgr, LIST_WIRELESS)) - _ERR("Listmgr update list failed.");*/ viewmgr_update_view(VIEW_WIRELESS_LIST, GRID_UPDATE, NULL); break; @@ -1430,7 +1429,7 @@ static input_handler _popup_input_handler = { .clicked = _popup_clicked_cb, .key_down = _popup_key_down_cb }; - +*/ static void _popup_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { struct _priv *priv = (struct _priv *)data; @@ -1443,12 +1442,10 @@ static void _popup_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void return; } - if (!strcmp(ev->keyname, KEY_ENTER)) { - elm_object_focus_set(priv->popup_btn2, EINA_TRUE); - } else if (!strcmp(ev->keyname, KEY_BACK) + if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC) || !strcmp(ev->keyname, KEY_ESC_WAY) ) { - elm_object_focus_set(priv->popup_btn1, EINA_TRUE); + elm_object_focus_set(priv->passcode_entry, EINA_TRUE); } str = elm_entry_entry_get(priv->passcode_entry); @@ -1456,10 +1453,12 @@ static void _popup_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void return; len = strlen(str); - if (len >= MIN_WIRELESS_LEN) - elm_object_disabled_set(priv->popup_btn2, EINA_FALSE); - else - elm_object_disabled_set(priv->popup_btn2, EINA_TRUE); + if (len >= MIN_WIRELESS_LEN) { + if (elm_entry_input_panel_return_key_disabled_get(priv->passcode_entry) == EINA_TRUE) { + elm_entry_input_panel_return_key_disabled_set(priv->passcode_entry, EINA_FALSE); } + } else { + elm_entry_input_panel_return_key_disabled_set(priv->passcode_entry, EINA_TRUE); + } } static void _imf_commit_event_cb(void *data, Ecore_IMF_Context *ctx, void *event_info) @@ -1476,10 +1475,12 @@ static void _imf_commit_event_cb(void *data, Ecore_IMF_Context *ctx, void *event return; len = strlen(buf); - if (len >= MIN_WIRELESS_LEN) - elm_object_disabled_set(priv->popup_btn2, EINA_FALSE); - else - elm_object_disabled_set(priv->popup_btn2, EINA_TRUE); + if (len >= MAX_WIRELESS_LEN) { + if (elm_entry_input_panel_return_key_disabled_get(priv->passcode_entry) == EINA_TRUE) { + elm_entry_input_panel_return_key_disabled_set(priv->passcode_entry, EINA_FALSE);} + } else { + elm_entry_input_panel_return_key_disabled_set(priv->passcode_entry, EINA_TRUE); + } } static void _imf_delete_event_cb(void *data, Ecore_IMF_Context *ctx, void *event_info) @@ -1489,7 +1490,7 @@ static void _imf_delete_event_cb(void *data, Ecore_IMF_Context *ctx, void *event if (NULL == priv) return; - elm_object_disabled_set(priv->popup_btn2, EINA_TRUE); +// elm_object_disabled_set(priv->popup_btn2, EINA_TRUE); } static void _check_passcode_input_cb(void *data, Evas_Object *entry, char **text) @@ -1532,12 +1533,8 @@ static void _remove_wifi_passcode_popup(struct _priv *priv) return; } - inputmgr_remove_callback(priv->popup_btn1, &_popup_input_handler); - inputmgr_remove_callback(priv->popup_btn2, &_popup_input_handler); elm_entry_input_panel_enabled_set(priv->passcode_entry, EINA_FALSE); - priv->popup_btn1 = NULL; - priv->popup_btn2 = NULL; evas_object_del(priv->passcode_entry); priv->passcode_entry = NULL; @@ -1545,10 +1542,43 @@ static void _remove_wifi_passcode_popup(struct _priv *priv) priv->passcode_popup = NULL; } +Eina_Bool _keyboard_down_cb(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info) +{ + + struct _priv *priv = data; + if (NULL == priv) + return false; + const char *doneKey_str = "Select"; + const char *cancelKey_str = "Cancel"; + //const char *clearKey_str = "Clear"; + const char *BACK_KEY_STR = "XF86Back"; + Evas_Event_Key_Up *pInfo = (Evas_Event_Key_Up*) event_info; + + + if (!strncmp(pInfo->keyname, cancelKey_str, strlen(cancelKey_str)) || + !strncmp(pInfo->keyname, BACK_KEY_STR, NW_BUF_MAX_LENGTH)) + { + + _remove_wifi_passcode_popup(priv); + } + + else if (!strncmp(pInfo->keyname, doneKey_str, strlen(doneKey_str))) + { + _DBG("Done Key Pressed from IME"); + + _popup_connecting_wireless_status(priv); + _connect_wifi_with_passcode(priv); + } + + + return true; +} + + static bool _draw_wifi_passcode_popup(struct _priv *priv, char *wifi_name, bool isReconnect) { - Evas_Object *popup, *ly, *entry, *btn1, *btn2; + Evas_Object *popup, *entry, *ly; Evas_Object *scroller; Ecore_IMF_Context *ctx; @@ -1557,7 +1587,7 @@ static bool _draw_wifi_passcode_popup(struct _priv *priv, char *wifi_name, return false; } - popup = utils_add_popup(priv->base, STYLE_POPUP, STR_ENTER_PASSCODE, NULL); + popup = utils_add_popup(priv->base, STYLE_POPUP, wifi_name, NULL); if (!popup) { _ERR("Add popup failed"); return false; @@ -1569,7 +1599,8 @@ static bool _draw_wifi_passcode_popup(struct _priv *priv, char *wifi_name, evas_object_del(popup); return false; } - elm_object_part_text_set(ly, PART_WIFI_NAME, wifi_name); + +// elm_object_part_text_set(ly, PART_WIFI_NAME, wifi_name); scroller = elm_scroller_add(ly); evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -1585,30 +1616,15 @@ static bool _draw_wifi_passcode_popup(struct _priv *priv, char *wifi_name, elm_object_content_set(popup, ly); - btn1 = utils_add_button(ly, PART_WIFI_POPUP_BTN_CANCEL, STYLE_DISABLE_BTN, STR_CANCEL); - if (!btn1) { - _ERR("Add button failed."); - evas_object_del(popup); - return false; - } - - btn2 = utils_add_button(ly, PART_WIFI_POPUP_BTN_OK, STYLE_DISABLE_BTN, STR_OK); - if (!btn2) { - _ERR("Add button failed."); - evas_object_del(popup); - return false; - } priv->passcode_popup = popup; priv->passcode_entry = entry; - priv->popup_btn1 = btn1; - priv->popup_btn2 = btn2; /* use this function to limit entry string */ elm_entry_markup_filter_append(entry, _check_passcode_input_cb, priv); - inputmgr_add_callback(priv->popup_btn1, EO_BTN_CANCEL, &_popup_input_handler, priv); - inputmgr_add_callback(priv->popup_btn2, EO_BTN_OK, &_popup_input_handler, priv); + elm_object_event_callback_add(entry, (Elm_Event_Cb) _keyboard_down_cb, priv); //This callback for Done Button in IME. + elm_entry_input_panel_return_key_disabled_set(entry, EINA_TRUE); evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN, _popup_entry_key_down_cb, priv); @@ -1620,15 +1636,15 @@ static bool _draw_wifi_passcode_popup(struct _priv *priv, char *wifi_name, ecore_imf_context_event_callback_add(ctx, ECORE_IMF_CALLBACK_DELETE_SURROUNDING, _imf_delete_event_cb, priv); - elm_object_disabled_set(priv->popup_btn2, EINA_TRUE); /* Set focus into entry */ - elm_object_focus_set(priv->popup_btn1, EINA_TRUE); + elm_object_focus_set(priv->passcode_popup, EINA_TRUE); if (isReconnect) elm_object_part_text_set(ly, PART_WIFI_POPUP_ERROR_MSG, STR_WIRELESS_WRONG_PWD); evas_object_show(priv->passcode_popup); - elm_object_focus_set(entry, EINA_TRUE); + elm_object_focus_set(priv->passcode_entry, EINA_TRUE); +// elm_entry_input_panel_show(priv->passcode_entry); return true; } diff --git a/src/view/network/view_wireless_list.c b/src/view/network/view_wireless_list.c index 7ba73f6..0b3f0e4 100644 --- a/src/view/network/view_wireless_list.c +++ b/src/view/network/view_wireless_list.c @@ -190,7 +190,7 @@ static void _show(void *data) return; } - evas_object_show(priv->base); + evas_object_show(wifi_list_popup); } static void _hide(void *data) @@ -220,6 +220,9 @@ static void _update(void *layout_data, int update_type, void *data) case GRID_FILL: listmgr_fill_grid(priv->listmgr, LIST_WIRELESS, data, NULL, NULL); break; + case VIEW_HIDE: + _hide(priv); + break; case GRID_HIDE: listmgr_hide_grid(priv->listmgr, LIST_WIRELESS, PART_WIRELESS_LIST); -- 2.7.4