Network layout: Draw passcode popup when wifi ap is locked 15/49415/7
authorHyojung Jo <hj903.jo@samsung.com>
Tue, 13 Oct 2015 05:45:28 +0000 (14:45 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Wed, 14 Oct 2015 01:15:42 +0000 (10:15 +0900)
Change-Id: Idfeb74625c130759e21771fa33f6445135c9cd6e
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
include/define.h
include/layout/network.h
res/layout/network.edc
src/data/data_wireless.c
src/layout/layout_network.c

index 38cb7c9..a3708ce 100644 (file)
@@ -51,6 +51,8 @@
 #define PART_BUTTON "part.button"
 #define PART_PROGRESSBAR "part.progressbar"
 #define PART_MENU_VALUE "part.menu.value"
+#define PART_POPUP_BTN1 "button1"
+#define PART_POPUP_BTN2 "button2"
 
 /* Style */
 #define STYLE_MENU_BTN "style.menu.button"
@@ -87,6 +89,9 @@
 #define COLOR_TEXT_DISABLE 92 92 92 155
 #define COLOR_TEXT_VALUE 64 136 211 255
 #define COLOR_TEXT_VALUE_DISABLE 64 136 211 155
+#define COLOR_TEXT_POPUP 104 104 104 255
+
+#define COLOR_LINE_INSIDE 127 127 127 255
 
 /* String for view*/
 #define STR_SETTINGS "Settings"
index cfe7a70..801b4e8 100644 (file)
 
 /* Group for edc */
 #define GRP_LAYOUT_NETWORK "grp.layout.network"
+#define GRP_POPUP_PASSCODE "grp.popup.passcode"
 
 /* Style */
 #define STYLE_GRID_WIRELESS "style.grid.wireless"
+#define STYLE_ENTRY_PASSCODE_TXT "DEFAULT='font_size=32 linesize=68'"
 
 /* Part for network layout */
 #define PART_NETWORK_TYPE "part.network.type"
@@ -34,6 +36,7 @@
 #define PART_WIFI_NAME "part.wifi.name"
 #define PART_STATE_LOCK "part_state_lock"
 #define PART_STATE_CHECK "part_state_check"
+#define PART_WIFI_PASSCODE "part.wifi.passcode"
 
 /* Signal for network layout */
 #define SIG_NO_WIRELESS "sig.no.wireless"
@@ -45,6 +48,9 @@
 #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_OK "OK"
+#define STR_CANCEL "Cancel"
 
 /* Count */
 #define COUNT_NETWORK_TYPE 2
index 49e7db3..99b6d0a 100644 (file)
@@ -315,3 +315,224 @@ group {
                }
        }
 }
+
+group {
+       name, GRP_POPUP_PASSCODE;
+       parts {
+               part {
+                       name, "area";
+                       type, RECT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               visible, 0;
+                       }
+               }
+
+               part {
+                       name, "padding.title";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 0 24;
+                               rel1.to, "area";
+                               rel2 {
+                                       to, "area";
+                                       relative, 1.0 0.0;
+                               }
+                               align, 0.5 0.0;
+                               fixed, 0 1;
+                       }
+               }
+
+               part {
+                       name, PART_WIFI_NAME;
+                       type, TEXT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 0 32;
+                               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, 32;
+                               }
+                       }
+               }
+
+               part {
+                       name, "padding.passcode";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 0 32;
+                               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";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 488 68;
+                               rel1 {
+                                       to, "padding.passcode";
+                                       relative, 0.5 1.0;
+                               }
+                               rel2 {
+                                       to, "padding.passcode";
+                                       relative, 0.5 1.0;
+                               }
+                               align, 0.5 0.0;
+                               fixed, 1 1;
+                       }
+               }
+
+               part {
+                       name, "part.inside.line.up";
+                       type, RECT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 0 1;
+                               color, COLOR_LINE_INSIDE;
+                               rel1.to, "padding.passcode.area";
+                               rel2 {
+                                       to, "padding.passcode.area";
+                                       relative, 1.0 0.0;
+                               }
+                               align, 0.5 0.0;
+                               fixed, 0 1;
+                       }
+               }
+
+               part {
+                       name, "part.inside.line.left";
+                       type, RECT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 1 0;
+                               color, COLOR_LINE_INSIDE;
+                               rel1 {
+                                       to, "part.inside.line.up";
+                                       relative, 0.0 1.0;
+                               }
+                               rel2 {
+                                       to, "padding.passcode.area";
+                                       relative, 0.0 1.0;
+                               }
+                               align, 0.0 0.5;
+                               fixed, 1 0;
+                       }
+               }
+
+               part {
+                       name, "part.inside.line.right";
+                       type, RECT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 1 0;
+                               color, COLOR_LINE_INSIDE;
+                               rel1 {
+                                       to, "part.inside.line.up";
+                                       relative, 1.0 1.0;
+                               }
+                               rel2.to, "padding.passcode.area";
+                               align, 1.0 0.5;
+                               fixed, 1 0;
+                       }
+               }
+
+               part {
+                       name, "part.inside.line.down";
+                       type, RECT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 0 1;
+                               color, COLOR_LINE_INSIDE;
+                               rel1 {
+                                       to, "part.inside.line.left";
+                                       relative, 1.0 1.0;
+                               }
+                               rel2 {
+                                       to, "part.inside.line.right";
+                                       relative, 0.0 1.0;
+                               }
+                               align, 0.5 1.0;
+                               fixed, 0 1;
+                       }
+               }
+
+               part {
+                       name, "padding.passcode.left";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 20 0;
+                               rel1.to, "padding.passcode.area";
+                               rel2 {
+                                       to, "padding.passcode.area";
+                                       relative, 0.0 1.0;
+                               }
+                               align, 0.0 0.5;
+                               fixed, 1 0;
+                       }
+               }
+
+               part {
+                       name, "padding.passcode.right";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 34 0;
+                               rel1 {
+                                       to, "padding.passcode.area";
+                                       relative, 1.0 0.0;
+                               }
+                               rel2.to, "padding.passcode.area";
+                               align, 1.0 0.5;
+                               fixed, 1 0;
+                       }
+               }
+
+               part {
+                       name, PART_WIFI_PASSCODE;
+                       type, SWALLOW;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               rel1 {
+                                       to, "padding.passcode.left";
+                                       relative, 1.0 0.0;
+                               }
+                               rel2 {
+                                       to, "padding.passcode.right";
+                                       relative, 0.0 1.0;
+                               }
+                               fixed, 1 1;
+                       }
+               }
+       }
+}
index a31b9ff..1fc974c 100644 (file)
@@ -298,7 +298,7 @@ static void _wifi_connected_cb(wifi_error_e err, void *user_data)
                priv->event_cb(EVENT_DATA_SELECT_DONE, priv->cb_data);
 }
 
-bool _select(void *dclass_data, Elm_Object_Item *it, void *data)
+static bool _select(void *dclass_data, Elm_Object_Item *it, void *data)
 {
        struct _priv *priv;
        struct wifi_ap_info *ap_info;
@@ -336,7 +336,7 @@ bool _select(void *dclass_data, Elm_Object_Item *it, void *data)
        return true;
 }
 
-Eina_List *_get_data(void *dclass_data)
+static Eina_List *_get_data(void *dclass_data)
 {
        struct _priv *priv;
 
index 677d6fa..3880056 100644 (file)
 #include "datamgr.h"
 #include "utils.h"
 
+enum object_type {
+       EO_BTN_OK = 0,
+       EO_BTN_CANCEL,
+       EO_ENTRY_PASSCODE,
+};
+
 enum network_type {
        TYPE_WIRELESS = 0,
        TYPE_WIRED,
@@ -53,6 +59,9 @@ struct _priv {
        layoutmgr *lmgr;
        struct listmgr *listmgr;
        struct datamgr *wirelessmgr;
+       Elm_Object_Item *selected_wireless_item;
+       Evas_Object *passcode_popup;
+       Evas_Object *passcode_entry;
        enum network_type cur_type;
 };
 
@@ -231,13 +240,19 @@ static input_handler _action_input_handler = {
        .key_down = _action_key_down_cb,
 };
 
+static void _draw_no_contents_message(struct _priv *priv)
+{
+       elm_object_signal_emit(priv->ly, SIG_NO_WIRELESS, SRC_ELM);
+       elm_object_part_text_set(priv->ly, PART_NO_NETWORK_TEXT,
+                       STR_NO_NETWORK);
+}
+
 static void _wireless_data_found_done(struct _priv *priv, Eina_List *list)
 {
        if (!listmgr_show_list(priv->listmgr, LIST_WIRELESS,
                                PART_WIRELESS_LIST, list)) {
-               elm_object_signal_emit(priv->ly, SIG_NO_WIRELESS, SRC_ELM);
-               elm_object_part_text_set(priv->ly, PART_NO_NETWORK_TEXT,
-                               STR_NO_NETWORK);
+               _ERR("Listmgr show list failed.");
+               _draw_no_contents_message(priv);
                return;
        }
 
@@ -248,6 +263,7 @@ static void _wireless_data_found_done(struct _priv *priv, Eina_List *list)
 static void _data_event_cb(enum event_type type, void *data)
 {
        struct _priv *priv;
+       Eina_List *list;
 
        if (!data) {
                _ERR("Invalid argument.");
@@ -258,8 +274,13 @@ static void _data_event_cb(enum event_type type, void *data)
 
        switch (type) {
        case EVENT_DATA_UPDATE_DONE:
-               _wireless_data_found_done(priv,
-                               datamgr_get_data(priv->wirelessmgr));
+               list = datamgr_get_data(priv->wirelessmgr);
+               if (!list) {
+                       _draw_no_contents_message(priv);
+                       return;
+               }
+
+               _wireless_data_found_done(priv, list);
 
                break;
 
@@ -273,9 +294,114 @@ static void _data_event_cb(enum event_type type, void *data)
        }
 }
 
+static void _popup_clicked_cb(int id, void *data, Evas_Object *obj)
+{
+       struct _priv *priv;
+
+       if (!data || !obj) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       priv = data;
+
+       switch (id) {
+       case EO_BTN_CANCEL:
+               evas_object_del(priv->passcode_popup);
+               break;
+
+       case EO_BTN_OK:
+               /* It will be implemented later. */
+               break;
+
+       default:
+               _ERR("Unhandled object type.");
+               return;
+       }
+}
+
+static void _popup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev)
+{
+       struct _priv *priv;
+
+       if (!ev || !data) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       priv = data;
+
+       if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC))
+               evas_object_del(priv->passcode_popup);
+}
+
+static input_handler _popup_input_handler = {
+       .mouse_move = _mouse_move_cb,
+       .clicked = _popup_clicked_cb,
+       .key_down = _popup_key_down_cb
+};
+
+static bool _draw_wifi_passcode_popup(struct _priv *priv, char *wifi_name)
+{
+       Evas_Object *popup, *ly, *entry, *btn1, *btn2;
+
+       popup = utils_add_popup(priv->base, NULL, STR_ENTER_PASSCODE, NULL);
+       if (!popup) {
+               _ERR("Add popup failed");
+               return false;
+       }
+
+       ly = utils_add_layout(popup, GRP_POPUP_PASSCODE, EINA_FALSE);
+       if (!ly) {
+               _ERR("Add layout failed.");
+               evas_object_del(popup);
+               return false;
+       }
+
+       elm_object_part_text_set(ly, PART_WIFI_NAME, wifi_name);
+       evas_object_show(ly);
+
+       entry = utils_add_entry(ly, PART_WIFI_PASSCODE,
+                       STYLE_ENTRY_PASSCODE_TXT, EINA_TRUE);
+       if (!entry) {
+               _ERR("Add entry failed.");
+               evas_object_del(popup);
+               return false;
+       }
+
+       elm_object_content_set(popup, ly);
+
+       btn1 = utils_add_button(popup, PART_POPUP_BTN1, NULL, STR_CANCEL);
+       if (!btn1) {
+               _ERR("Add button failed.");
+               evas_object_del(popup);
+               return false;
+       }
+
+       btn2 = utils_add_button(popup, PART_POPUP_BTN2, NULL, STR_OK);
+       if (!btn2) {
+               _ERR("Add button failed.");
+               evas_object_del(popup);
+               return false;
+       }
+
+       priv->passcode_popup = popup;
+       priv->passcode_entry = entry;
+
+       inputmgr_add_callback(btn1, EO_BTN_CANCEL, &_popup_input_handler, priv);
+       inputmgr_add_callback(btn2, EO_BTN_OK, &_popup_input_handler, priv);
+
+       elm_object_focus_set(priv->passcode_entry, EINA_TRUE);
+
+       return true;
+}
+
 static void _wireless_selected_cb(Elm_Object_Item *it, void *data)
 {
        struct _priv *priv;
+       struct wifi_ap_info *ap_info;
+       char *wifi_name;
 
        if (!it || !data) {
                _ERR("Invalid argument.");
@@ -284,9 +410,26 @@ static void _wireless_selected_cb(Elm_Object_Item *it, void *data)
 
        priv = data;
 
-       datamgr_select(priv->wirelessmgr, it, NULL);
+       ap_info = elm_object_item_data_get(it);
+       if (!ap_info) {
+               _ERR("Get data failed.");
+               return;
+       }
 
-       /* It should be implemented more later. */
+       priv->selected_wireless_item = it;
+
+       if (ap_info->secure_type != WIFI_SECURITY_TYPE_NONE) {
+               wifi_name = ap_info->essid;
+               if (!wifi_name)
+                       return;
+
+               if (!_draw_wifi_passcode_popup(priv, wifi_name)) {
+                       _ERR("Draw passcode popup failed.");
+                       return;
+               }
+       } else {
+               datamgr_select(priv->wirelessmgr, it, NULL);
+       }
 }
 
 static bool _draw_network_buttons(struct _priv *priv)