Added Fixes to keyboard input on passcode popup 28/129028/2
authorAbhishek Sansanwal <abhishek.s94@samsung.com>
Fri, 12 May 2017 11:59:32 +0000 (17:29 +0530)
committerAbhishek Sansanwal <abhishek.s94@samsung.com>
Fri, 12 May 2017 12:32:31 +0000 (18:02 +0530)
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 <abhishek.s94@samsung.com>
Change-Id: Idca560a697b513b1e9b696117027e6b223310572

include/common/viewmgr.h
include/layout/network.h
res/layout/network.edc
src/layout/layout_network.c
src/view/network/view_wireless_list.c

index 2bcad6c..de3bec2 100644 (file)
@@ -43,6 +43,7 @@ typedef struct _view_class {
 enum list_type {
        GRID_UPDATE = 0,
        GRID_FILL,
+       VIEW_HIDE,
        GRID_HIDE,
        GRID_FOREACH,
        GRID_SHOW
index d4a8e7f..2c144f1 100644 (file)
@@ -68,7 +68,6 @@
 #define STR_REFRESH "Refresh"
 #define STR_RETRY "Retry"
 #define STR_NO_NETWORK "No network connection.<br>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."
index 965704c..59f0e47 100644 (file)
@@ -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;
index 621fc1f..96ebe66 100644 (file)
@@ -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;
 }
index 7ba73f6..0b3f0e4 100644 (file)
@@ -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);