From: Hyojung Jo Date: Tue, 13 Oct 2015 05:45:28 +0000 (+0900) Subject: Network layout: Draw passcode popup when wifi ap is locked X-Git-Tag: accepted/tizen/tv/20151014.093645~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9814759f5b204d5340609118826342cbb7d6bb78;p=profile%2Ftv%2Fapps%2Fnative%2Fair_settings.git Network layout: Draw passcode popup when wifi ap is locked Change-Id: Idfeb74625c130759e21771fa33f6445135c9cd6e Signed-off-by: Hyojung Jo --- diff --git a/include/define.h b/include/define.h index 38cb7c9..a3708ce 100644 --- a/include/define.h +++ b/include/define.h @@ -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" diff --git a/include/layout/network.h b/include/layout/network.h index cfe7a70..801b4e8 100644 --- a/include/layout/network.h +++ b/include/layout/network.h @@ -22,9 +22,11 @@ /* 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.
Please check your network." +#define STR_ENTER_PASSCODE "Enter password" +#define STR_OK "OK" +#define STR_CANCEL "Cancel" /* Count */ #define COUNT_NETWORK_TYPE 2 diff --git a/res/layout/network.edc b/res/layout/network.edc index 49e7db3..99b6d0a 100644 --- a/res/layout/network.edc +++ b/res/layout/network.edc @@ -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; + } + } + } +} diff --git a/src/data/data_wireless.c b/src/data/data_wireless.c index a31b9ff..1fc974c 100644 --- a/src/data/data_wireless.c +++ b/src/data/data_wireless.c @@ -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; diff --git a/src/layout/layout_network.c b/src/layout/layout_network.c index 677d6fa..3880056 100644 --- a/src/layout/layout_network.c +++ b/src/layout/layout_network.c @@ -29,6 +29,12 @@ #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)