}
}
}
+
+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;
+ }
+ }
+ }
+}
#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,
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;
};
.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;
}
static void _data_event_cb(enum event_type type, void *data)
{
struct _priv *priv;
+ Eina_List *list;
if (!data) {
_ERR("Invalid argument.");
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;
}
}
+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.");
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)