Drawing wifi signal strength feature 25/55025/2
authorJiwan Kim <ji-wan.kim@samsung.com>
Thu, 17 Dec 2015 07:24:21 +0000 (16:24 +0900)
committerJiwan Kim <ji-wan.kim@samsung.com>
Thu, 24 Dec 2015 05:24:03 +0000 (21:24 -0800)
Change-Id: Ic9da849d1f878cb1cfc25f80d04bd949c42d7e7f

27 files changed:
include/data/data_wireless.h
include/gridmgr.h
include/layout/network.h
include/listmgr.h
res/images/ic_lock_network_foc_01.png [new file with mode: 0644]
res/images/ic_lock_network_foc_02.png [new file with mode: 0644]
res/images/ic_lock_network_foc_03.png [new file with mode: 0644]
res/images/ic_lock_network_nor_01.png [new file with mode: 0644]
res/images/ic_lock_network_nor_02.png [new file with mode: 0644]
res/images/ic_lock_network_nor_03.png [new file with mode: 0644]
res/images/ic_lock_network_sel_01.png [new file with mode: 0644]
res/images/ic_lock_network_sel_02.png [new file with mode: 0644]
res/images/ic_lock_network_sel_03.png [new file with mode: 0644]
res/images/ic_network_foc_01.png [new file with mode: 0644]
res/images/ic_network_foc_02.png [new file with mode: 0644]
res/images/ic_network_foc_03.png [new file with mode: 0644]
res/images/ic_network_nor_01.png [new file with mode: 0644]
res/images/ic_network_nor_02.png [new file with mode: 0644]
res/images/ic_network_nor_03.png [new file with mode: 0644]
res/images/ic_network_sel_01.png [new file with mode: 0644]
res/images/ic_network_sel_02.png [new file with mode: 0644]
res/images/ic_network_sel_03.png [new file with mode: 0644]
res/widget/gengrid.edc
src/common/gridmgr.c
src/common/listmgr.c
src/data/data_wireless.c
src/layout/layout_network.c

index 7f8986f..e4eebc5 100644 (file)
 
 #include <wifi.h>
 
+typedef enum {
+       SIGNAL_LEVEL_1 = 1,
+       SIGNAL_LEVEL_2 = 2,
+       SIGNAL_LEVEL_3 = 3,
+       SIGNAL_LEVEL_4 = 4
+} WIFI_SIGNAL_LEVEL;
+
 struct wifi_ap_info {
        wifi_ap_h ap;
        char *essid;
        wifi_security_type_e secure_type;
        wifi_connection_state_e connection_state;
+       WIFI_SIGNAL_LEVEL signal_level;
 };
 
 struct data_class *get_wireless_data_class(void);
index 43bb974..f79fc93 100644 (file)
@@ -119,4 +119,6 @@ bool gridmgr_prepend_item(struct gridmgr *gmgr, const char *grid_id, void *item)
 Elm_Gengrid_Item_Class *gridmgr_get_item_class(struct gridmgr *gmgr,
                const char *grid_id);
 
+Eina_List* gridmgr_get_list(struct gridmgr *gmgr);
+
 #endif /* __AIR_SETTINGS_GRIDMGR_H__ */
index 523f198..7af7cc1 100644 (file)
 #define SIZE_NETWORK_CTXPOPUP_H 114
 
 /* Image */
+#define IC_NETWORK_NOR_01_PNG "ic_network_nor_01.png"
+#define IC_NETWORK_NOR_02_PNG "ic_network_nor_02.png"
+#define IC_NETWORK_NOR_03_PNG "ic_network_nor_03.png"
 #define IC_NETWORK_NOR_04_PNG "ic_network_nor_04.png"
+#define IC_NETWORK_FOC_01_PNG "ic_network_foc_01.png"
+#define IC_NETWORK_FOC_02_PNG "ic_network_foc_02.png"
+#define IC_NETWORK_FOC_03_PNG "ic_network_foc_03.png"
 #define IC_NETWORK_FOC_04_PNG "ic_network_foc_04.png"
+#define IC_LOCK_NETWORK_NOR_01_PNG "ic_lock_network_nor_01.png"
+#define IC_LOCK_NETWORK_NOR_02_PNG "ic_lock_network_nor_02.png"
+#define IC_LOCK_NETWORK_NOR_03_PNG "ic_lock_network_nor_03.png"
 #define IC_LOCK_NETWORK_NOR_04_PNG "ic_lock_network_nor_04.png"
+#define IC_LOCK_NETWORK_FOC_01_PNG "ic_lock_network_foc_01.png"
+#define IC_LOCK_NETWORK_FOC_02_PNG "ic_lock_network_foc_02.png"
+#define IC_LOCK_NETWORK_FOC_03_PNG "ic_lock_network_foc_03.png"
 #define IC_LOCK_NETWORK_FOC_04_PNG "ic_lock_network_foc_04.png"
 #define IC_CHECK_NOR_PNG "ic_thumb_check_sel.png"
 #define IC_CHECK_FOC_PNG "ic_thumb_check_foc.png"
index 115f2c8..433002d 100644 (file)
@@ -34,4 +34,10 @@ bool listmgr_hide_list(struct listmgr *listmgr, const char *list_id,
                const char *part);
 bool listmgr_update_list(struct listmgr *listmgr, const char *list_id);
 
+void listmgr_add_realized_cb(struct listmgr *listmgr, const char *list_id,
+               input_handler *handler, void *data);
+
+void listmgr_remove_realized_cb(struct listmgr *listmgr, const char *list_id,
+               input_handler *handler);
+
 #endif /* __AIR_SETTINGS_LISTMGR_H__ */
diff --git a/res/images/ic_lock_network_foc_01.png b/res/images/ic_lock_network_foc_01.png
new file mode 100644 (file)
index 0000000..f772860
Binary files /dev/null and b/res/images/ic_lock_network_foc_01.png differ
diff --git a/res/images/ic_lock_network_foc_02.png b/res/images/ic_lock_network_foc_02.png
new file mode 100644 (file)
index 0000000..085e5df
Binary files /dev/null and b/res/images/ic_lock_network_foc_02.png differ
diff --git a/res/images/ic_lock_network_foc_03.png b/res/images/ic_lock_network_foc_03.png
new file mode 100644 (file)
index 0000000..c70b7b9
Binary files /dev/null and b/res/images/ic_lock_network_foc_03.png differ
diff --git a/res/images/ic_lock_network_nor_01.png b/res/images/ic_lock_network_nor_01.png
new file mode 100644 (file)
index 0000000..2d4d8cd
Binary files /dev/null and b/res/images/ic_lock_network_nor_01.png differ
diff --git a/res/images/ic_lock_network_nor_02.png b/res/images/ic_lock_network_nor_02.png
new file mode 100644 (file)
index 0000000..22cd769
Binary files /dev/null and b/res/images/ic_lock_network_nor_02.png differ
diff --git a/res/images/ic_lock_network_nor_03.png b/res/images/ic_lock_network_nor_03.png
new file mode 100644 (file)
index 0000000..2ecbed7
Binary files /dev/null and b/res/images/ic_lock_network_nor_03.png differ
diff --git a/res/images/ic_lock_network_sel_01.png b/res/images/ic_lock_network_sel_01.png
new file mode 100644 (file)
index 0000000..6d0a207
Binary files /dev/null and b/res/images/ic_lock_network_sel_01.png differ
diff --git a/res/images/ic_lock_network_sel_02.png b/res/images/ic_lock_network_sel_02.png
new file mode 100644 (file)
index 0000000..b6ca5c9
Binary files /dev/null and b/res/images/ic_lock_network_sel_02.png differ
diff --git a/res/images/ic_lock_network_sel_03.png b/res/images/ic_lock_network_sel_03.png
new file mode 100644 (file)
index 0000000..d190b9f
Binary files /dev/null and b/res/images/ic_lock_network_sel_03.png differ
diff --git a/res/images/ic_network_foc_01.png b/res/images/ic_network_foc_01.png
new file mode 100644 (file)
index 0000000..01b75e6
Binary files /dev/null and b/res/images/ic_network_foc_01.png differ
diff --git a/res/images/ic_network_foc_02.png b/res/images/ic_network_foc_02.png
new file mode 100644 (file)
index 0000000..0bb4333
Binary files /dev/null and b/res/images/ic_network_foc_02.png differ
diff --git a/res/images/ic_network_foc_03.png b/res/images/ic_network_foc_03.png
new file mode 100644 (file)
index 0000000..e239763
Binary files /dev/null and b/res/images/ic_network_foc_03.png differ
diff --git a/res/images/ic_network_nor_01.png b/res/images/ic_network_nor_01.png
new file mode 100644 (file)
index 0000000..acc75c1
Binary files /dev/null and b/res/images/ic_network_nor_01.png differ
diff --git a/res/images/ic_network_nor_02.png b/res/images/ic_network_nor_02.png
new file mode 100644 (file)
index 0000000..1592556
Binary files /dev/null and b/res/images/ic_network_nor_02.png differ
diff --git a/res/images/ic_network_nor_03.png b/res/images/ic_network_nor_03.png
new file mode 100644 (file)
index 0000000..018b08a
Binary files /dev/null and b/res/images/ic_network_nor_03.png differ
diff --git a/res/images/ic_network_sel_01.png b/res/images/ic_network_sel_01.png
new file mode 100644 (file)
index 0000000..e3547e4
Binary files /dev/null and b/res/images/ic_network_sel_01.png differ
diff --git a/res/images/ic_network_sel_02.png b/res/images/ic_network_sel_02.png
new file mode 100644 (file)
index 0000000..59a9f8a
Binary files /dev/null and b/res/images/ic_network_sel_02.png differ
diff --git a/res/images/ic_network_sel_03.png b/res/images/ic_network_sel_03.png
new file mode 100644 (file)
index 0000000..303726c
Binary files /dev/null and b/res/images/ic_network_sel_03.png differ
index bd98a04..40a011d 100644 (file)
@@ -17,7 +17,7 @@
 #define STATE_NORMAL 0
 #define STATE_LOCKED 1
 #define STATE_CHECKED 2
-
+#define STATE_FOCUSED 3
 
 group {
        name, "elm/gengrid/item/style.grid.wireless/default";
@@ -25,9 +25,21 @@ group {
        data.item, "texts" "part.wifi.name";
        data.item, "states" "part_state_check part_state_lock";
        images {
+               image, IC_NETWORK_NOR_01_PNG COMP;
+               image, IC_NETWORK_NOR_02_PNG COMP;
+               image, IC_NETWORK_NOR_03_PNG COMP;
                image, IC_NETWORK_NOR_04_PNG COMP;
+               image, IC_NETWORK_FOC_01_PNG COMP;
+               image, IC_NETWORK_FOC_02_PNG COMP;
+               image, IC_NETWORK_FOC_03_PNG COMP;
                image, IC_NETWORK_FOC_04_PNG COMP;
+               image, IC_LOCK_NETWORK_NOR_01_PNG COMP;
+               image, IC_LOCK_NETWORK_NOR_02_PNG COMP;
+               image, IC_LOCK_NETWORK_NOR_03_PNG COMP;
                image, IC_LOCK_NETWORK_NOR_04_PNG COMP;
+               image, IC_LOCK_NETWORK_FOC_01_PNG COMP;
+               image, IC_LOCK_NETWORK_FOC_02_PNG COMP;
+               image, IC_LOCK_NETWORK_FOC_03_PNG COMP;
                image, IC_LOCK_NETWORK_FOC_04_PNG COMP;
                image, IC_CHECK_NOR_PNG COMP;
                image, IC_CHECK_FOC_PNG COMP;
@@ -48,6 +60,8 @@ group {
        script {
                public lock_state;
                public check_state;
+               public signal_level;
+               public is_focused;
        }
 
        parts {
@@ -193,6 +207,94 @@ group {
                                map.on, 1;
                                image.normal, IC_NETWORK_NOR_04_PNG;
                        }
+
+
+
+                       description {
+                               state, "focused.locked" 0.1;
+                               inherit, "focused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_FOC_01_PNG;
+                       }
+                       description {
+                               state, "focused.locked" 0.2;
+                               inherit, "focused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_FOC_02_PNG;
+                       }
+                       description {
+                               state, "focused.locked" 0.3;
+                               inherit, "focused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_FOC_03_PNG;
+                       }
+                       description {
+                               state, "focused.locked" 0.4;
+                               inherit, "focused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_FOC_04_PNG;
+                       }
+
+                       description {
+                               state, "focused.unlocked" 0.1;
+                               inherit, "focused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_FOC_01_PNG;
+                       }
+                       description {
+                               state, "focused.unlocked" 0.2;
+                               inherit, "focused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_FOC_02_PNG;
+                       }
+                       description {
+                               state, "focused.unlocked" 0.3;
+                               inherit, "focused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_FOC_03_PNG;
+                       }
+                       description {
+                               state, "focused.unlocked" 0.4;
+                               inherit, "focused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_FOC_04_PNG;
+                       }
+
+
+
+                       description {
+                               state, "unfocused.locked" 0.1;
+                               inherit, "unfocused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_NOR_01_PNG;
+                       }
+                       description {
+                               state, "unfocused.locked" 0.2;
+                               inherit, "unfocused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_NOR_02_PNG;
+                       }
+                       description {
+                               state, "unfocused.locked" 0.3;
+                               inherit, "unfocused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_NOR_03_PNG;
+                       }
+                       description {
+                               state, "unfocused.locked" 0.4;
+                               inherit, "unfocused.locked" 0.0;
+                               image.normal, IC_LOCK_NETWORK_NOR_04_PNG;
+                       }
+
+                       description {
+                               state, "unfocused.unlocked" 0.1;
+                               inherit, "unfocused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_NOR_01_PNG;
+                       }
+                       description {
+                               state, "unfocused.unlocked" 0.2;
+                               inherit, "unfocused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_NOR_02_PNG;
+                       }
+                       description {
+                               state, "unfocused.unlocked" 0.3;
+                               inherit, "unfocused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_NOR_03_PNG;
+                       }
+                       description {
+                               state, "unfocused.unlocked" 0.4;
+                               inherit, "unfocused.unlocked" 0.0;
+                               image.normal, IC_NETWORK_NOR_04_PNG;
+                       }
                }
 
                part {
@@ -461,6 +563,8 @@ group {
                        script {
                                set_int(lock_state, STATE_NORMAL);
                                set_int(check_state, STATE_NORMAL);
+                               set_float(signal_level, 0.0);
+                               set_int(is_focused, STATE_NORMAL);
                        }
                }
 
@@ -470,11 +574,15 @@ group {
                        source, SRC_ELM;
                        script {
                                new state;
+                               new Float:signal_icon;
+
                                state = get_int(lock_state);
+                               signal_icon = get_float(signal_level);
+
                                if (state == STATE_LOCKED)
-                                       set_state(PART:"part.wifi.icon", "focused.locked", 0.0);
+                                       set_state(PART:"part.wifi.icon", "focused.locked", signal_icon);
                                else
-                                       set_state(PART:"part.wifi.icon", "focused.unlocked", 0.0);
+                                       set_state(PART:"part.wifi.icon", "focused.unlocked", signal_icon);
 
                                state = get_int(check_state);
                                if (state == STATE_CHECKED)
@@ -484,6 +592,7 @@ group {
 
                                set_state(PART:PART_WIFI_NAME, "focused", 0.0);
                                set_state(PART:"part.bg", "focused", 0.0);
+                               set_int(is_focused, STATE_FOCUSED);
                        }
                }
 
@@ -493,11 +602,15 @@ group {
                        source, SRC_ELM;
                        script {
                                new state;
+                               new Float:signal_icon;
+
                                state = get_int(lock_state);
+                               signal_icon = get_float(signal_level);
+
                                if (state == STATE_LOCKED)
-                                       set_state(PART:"part.wifi.icon", "unfocused.locked", 0.0);
+                                       set_state(PART:"part.wifi.icon", "unfocused.locked", signal_icon);
                                else
-                                       set_state(PART:"part.wifi.icon", "unfocused.unlocked", 0.0);
+                                       set_state(PART:"part.wifi.icon", "unfocused.unlocked", signal_icon);
 
                                state = get_int(check_state);
                                if (state == STATE_CHECKED)
@@ -507,6 +620,76 @@ group {
 
                                set_state(PART:PART_WIFI_NAME, "unfocused", 0.0);
                                set_state(PART:"part.bg", "default", 0.0);
+                               set_int(is_focused, STATE_NORMAL);
+                       }
+               }
+
+               program {
+                       name, "update_wifi_signal_icon";
+                       script {
+                               new state;
+                               new focused;
+                               new Float:signal_icon;
+
+                               focused = get_int(is_focused);
+                               state = get_int(lock_state);
+                               signal_icon = get_float(signal_level);
+
+                               if (focused == STATE_FOCUSED) {
+                                       if (state == STATE_LOCKED)
+                                               set_state(PART:"part.wifi.icon", "focused.locked", signal_icon);
+                                       else
+                                               set_state(PART:"part.wifi.icon", "focused.unlocked", signal_icon);
+                               } else {
+                                       if (state == STATE_LOCKED)
+                                               set_state(PART:"part.wifi.icon", "unfocused.locked", signal_icon);
+                                       else
+                                               set_state(PART:"part.wifi.icon", "unfocused.unlocked", signal_icon);
+                               }
+                       }
+               }
+
+               program {
+                       name: "wifi_signal_level,1";
+                       signal: "wifi_signal_level,1";
+                       source, SRC_ELM;
+                       script {
+                               set_float(signal_level, 0.1);
+                               set_state(PART:"part.wifi.icon", "focused.locked", 0.1);
+                               run_program(PROGRAM:"update_wifi_signal_icon");
+                       }
+               }
+
+               program {
+                       name: "wifi_signal_level,2";
+                       signal: "wifi_signal_level,2";
+                       source, SRC_ELM;
+                       script {
+                               set_float(signal_level, 0.2);
+                               set_state(PART:"part.wifi.icon", "focused.locked", 0.2);
+                               run_program(PROGRAM:"update_wifi_signal_icon");
+                       }
+               }
+
+               program {
+                       name, "wifi_signal_level,3";
+                       signal, "wifi_signal_level,3";
+                       source, SRC_ELM;
+                       script {
+                               set_float(signal_level, 0.3);
+                               set_state(PART:"part.wifi.icon", "focused.locked", 0.3);
+                               run_program(PROGRAM:"update_wifi_signal_icon");
+                       }
+               }
+
+               program {
+                       name, "wifi_signal_level,4";
+                       signal, "wifi_signal_level,4";
+                       source, SRC_ELM;
+                       script {
+                               set_float(signal_level, 0.4);
+                               set_state(PART:"part.wifi.icon", "focused.locked", 0.4);
+                               run_program(PROGRAM:"update_wifi_signal_icon");
                        }
                }
 
index e212e11..a63f96a 100644 (file)
@@ -29,6 +29,16 @@ struct grid_item {
        Elm_Gengrid_Item_Class *ic;
 };
 
+Eina_List* gridmgr_get_list(struct gridmgr *gmgr)
+{
+       if (!gmgr) {
+               _ERR("Invalid argument.");
+               return NULL;
+       }
+
+       return gmgr->list;
+}
+
 struct gridmgr *gridmgr_create(void)
 {
        struct gridmgr *gmgr;
index 063fbc7..8836939 100644 (file)
@@ -22,6 +22,8 @@
 #include "utils.h"
 #include "define.h"
 
+#include "data/data_wireless.h"
+
 struct listmgr {
        Evas_Object *parent;
        Eina_List *list;
@@ -196,6 +198,48 @@ static bool _add_grid(struct list_info *linfo, Evas_Object *parent,
        return true;
 }
 
+void listmgr_add_realized_cb(struct listmgr *listmgr, const char *list_id,
+               input_handler *handler, void *data)
+{
+       struct list_info *linfo;
+
+       if (!listmgr || !list_id || !handler) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       linfo = _get_list_info(listmgr, list_id);
+       if (!linfo) {
+               _ERR("List %s does not exist.", list_id);
+               return;
+       }
+
+       inputmgr_add_callback(linfo->grid, 0, handler, data);
+
+       _DBG("realized callback added");
+}
+
+void listmgr_remove_realized_cb(struct listmgr *listmgr, const char *list_id,
+               input_handler *handler)
+{
+       struct list_info *linfo;
+
+       if (!listmgr || !list_id || !handler) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       linfo = _get_list_info(listmgr, list_id);
+       if (!linfo) {
+               _ERR("List %s does not exist.", list_id);
+               return;
+       }
+
+       inputmgr_remove_callback(linfo->grid, handler);
+
+       _DBG("realized callback removed");
+}
+
 bool listmgr_add_list(struct listmgr *listmgr, const char *list_id,
                struct grid_class *gclass,
                void (*selected_cb)(Elm_Object_Item *it, void *data),
index b68a320..1224e55 100644 (file)
@@ -28,6 +28,23 @@ struct _priv {
        Elm_Object_Item *new_ap;
 };
 
+static WIFI_SIGNAL_LEVEL __convert_rssi_value(int rssi_dBm)
+{
+       WIFI_SIGNAL_LEVEL level;
+       int table[3] = {-82, -74, -63}; /* (1~4 level)*/
+
+       if (rssi_dBm > table[2])
+               level = SIGNAL_LEVEL_4; /* wifi signal level : 4 */
+       else if (rssi_dBm > table[1])
+               level = SIGNAL_LEVEL_3;
+       else if (rssi_dBm > table[0])
+               level = SIGNAL_LEVEL_2;
+       else
+               level = SIGNAL_LEVEL_1;
+
+       return level;
+}
+
 static void *_create(void (*event_cb)(enum event_type type, void *data),
                void *cb_data)
 {
@@ -152,6 +169,7 @@ static bool _wifi_found_ap_cb(wifi_ap_h ap, void *data)
        wifi_security_type_e secure_type;
        char *essid;
        int r;
+       int rssi;
 
        if (!data) {
                _ERR("Invalid argument.");
@@ -178,6 +196,12 @@ static bool _wifi_found_ap_cb(wifi_ap_h ap, void *data)
                return EINA_TRUE;
        }
 
+       r = wifi_ap_get_rssi(ap, &rssi);
+       if (r != WIFI_ERROR_NONE) {
+               _ERR("wifi_ap_get_rssi failed.");
+               return EINA_TRUE;
+       }
+
        ap_info = calloc(1, sizeof(*ap_info));
        if (!ap_info) {
                _ERR("Calloc failed.");
@@ -197,6 +221,7 @@ static bool _wifi_found_ap_cb(wifi_ap_h ap, void *data)
        ap_info->essid = essid;
        ap_info->connection_state = connection_state;
        ap_info->secure_type = secure_type;
+       ap_info->signal_level = __convert_rssi_value(rssi);
 
        priv->list = eina_list_append(priv->list, ap_info);
 
index cba0b11..a675fc2 100644 (file)
@@ -242,6 +242,35 @@ static void _action_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
        }
 }
 
+static void _grid_realized_cb(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
+{
+       struct wifi_ap_info *ap_info = NULL;
+
+       if (!item) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       ap_info = (struct wifi_ap_info*)elm_object_item_data_get(item);
+       if (ap_info) {
+               switch(ap_info->signal_level) {
+               case SIGNAL_LEVEL_1:
+                       elm_object_item_signal_emit(item, "wifi_signal_level,1", "elm");
+                       break;
+               case SIGNAL_LEVEL_2:
+                       elm_object_item_signal_emit(item, "wifi_signal_level,2", "elm");
+                       break;
+               case SIGNAL_LEVEL_3:
+                       elm_object_item_signal_emit(item, "wifi_signal_level,3", "elm");
+                       break;
+               case SIGNAL_LEVEL_4:
+                       elm_object_item_signal_emit(item, "wifi_signal_level,4", "elm");
+                       break;
+               }
+       }
+}
+
 static input_handler _network_type_input_handler = {
        .mouse_move = _mouse_move_cb,
        .key_down = _network_type_key_down_cb,
@@ -252,6 +281,10 @@ static input_handler _action_input_handler = {
        .key_down = _action_key_down_cb,
 };
 
+static input_handler _grid_input_handler = {
+       .realized = _grid_realized_cb,
+};
+
 static void _draw_no_contents_message(struct _priv *priv)
 {
        elm_object_signal_emit(priv->ly, SIG_NO_WIRELESS, SRC_ELM);
@@ -606,6 +639,9 @@ static bool _create(layoutmgr *lmgr, void *data)
 
        layoutmgr_set_layout_data(lmgr, LAYOUT_ID_NETWORK, priv);
 
+       listmgr_add_realized_cb(priv->listmgr, LIST_WIRELESS,
+                       &_grid_input_handler, NULL);
+
        return true;
 
 err:
@@ -670,8 +706,11 @@ static void _destroy(void *layout_data)
        if (priv->wirelessmgr)
                datamgr_destroy(priv->wirelessmgr);
 
-       if (priv->listmgr)
+       if (priv->listmgr) {
+               listmgr_remove_realized_cb(priv->listmgr, LIST_WIRELESS,
+                               &_grid_input_handler);
                listmgr_destroy(priv->listmgr);
+       }
 
        evas_object_del(priv->ly);