From: Jiwan Kim Date: Thu, 17 Dec 2015 07:24:21 +0000 (+0900) Subject: Drawing wifi signal strength feature X-Git-Tag: accepted/tizen/tv/20151224.102753~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6b1c9266c9e5d5be390be9f6aa25d80eec5614ac;p=profile%2Ftv%2Fapps%2Fnative%2Fair_settings.git Drawing wifi signal strength feature Change-Id: Ic9da849d1f878cb1cfc25f80d04bd949c42d7e7f --- diff --git a/include/data/data_wireless.h b/include/data/data_wireless.h index 7f8986f..e4eebc5 100644 --- a/include/data/data_wireless.h +++ b/include/data/data_wireless.h @@ -19,11 +19,19 @@ #include +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); diff --git a/include/gridmgr.h b/include/gridmgr.h index 43bb974..f79fc93 100644 --- a/include/gridmgr.h +++ b/include/gridmgr.h @@ -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__ */ diff --git a/include/layout/network.h b/include/layout/network.h index 523f198..7af7cc1 100644 --- a/include/layout/network.h +++ b/include/layout/network.h @@ -62,9 +62,21 @@ #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" diff --git a/include/listmgr.h b/include/listmgr.h index 115f2c8..433002d 100644 --- a/include/listmgr.h +++ b/include/listmgr.h @@ -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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 index 0000000..303726c Binary files /dev/null and b/res/images/ic_network_sel_03.png differ diff --git a/res/widget/gengrid.edc b/res/widget/gengrid.edc index bd98a04..40a011d 100644 --- a/res/widget/gengrid.edc +++ b/res/widget/gengrid.edc @@ -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"); } } diff --git a/src/common/gridmgr.c b/src/common/gridmgr.c index e212e11..a63f96a 100644 --- a/src/common/gridmgr.c +++ b/src/common/gridmgr.c @@ -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; diff --git a/src/common/listmgr.c b/src/common/listmgr.c index 063fbc7..8836939 100644 --- a/src/common/listmgr.c +++ b/src/common/listmgr.c @@ -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), diff --git a/src/data/data_wireless.c b/src/data/data_wireless.c index b68a320..1224e55 100644 --- a/src/data/data_wireless.c +++ b/src/data/data_wireless.c @@ -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); diff --git a/src/layout/layout_network.c b/src/layout/layout_network.c index cba0b11..a675fc2 100644 --- a/src/layout/layout_network.c +++ b/src/layout/layout_network.c @@ -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);