From: Radoslaw Czerski Date: Wed, 7 Dec 2016 14:41:17 +0000 (+0100) Subject: Replace wifi api with wifi-manager api. X-Git-Tag: submit/tizen_3.0/20161214.092508~4^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1c9454ba8081a1faa4a1d6a08adb44773cef366c;p=profile%2Fmobile%2Fapps%2Fnative%2Findicator.git Replace wifi api with wifi-manager api. Wifi api is deprecated since Tizen 3.0. Change-Id: I302042e5fdcf8571a9e5c512263066c086875962 Signed-off-by: Radoslaw Czerski --- diff --git a/CMake/CMakeLists.txt b/CMake/CMakeLists.txt index 6cf5bd0..473fdb0 100644 --- a/CMake/CMakeLists.txt +++ b/CMake/CMakeLists.txt @@ -26,6 +26,7 @@ pkg_check_modules(pkgs REQUIRED capi-media-sound-manager capi-media-metadata-extractor capi-network-wifi + capi-network-wifi-manager capi-ui-efl-util appcore-common dlog diff --git a/inc/util.h b/inc/util.h index 5b5d39b..f961280 100644 --- a/inc/util.h +++ b/inc/util.h @@ -18,6 +18,7 @@ #define __INDICATOR_UTIL_H__ #include #include +#include #include #include #include @@ -250,13 +251,14 @@ const char *util_get_file_path(enum app_subdir dir, const char *relative); * @return 0 on success, other value on failure */ int util_wifi_initialize(void); - +int util_wifi_manager_initialize(wifi_manager_h *handle); /** * @brief Deinitializes WiFi using wifi_deinitialize API * @remarks Only last call of that function is effective to avoid unwanted deinitialization. * @return 0 on success, other value on failure */ int util_wifi_deinitialize(void); +int util_wifi_manager_deinitialize(wifi_manager_h handle); /** * @brief Allows to set multiple callbacks using wifi_set_connection_state_changed_cb API @@ -266,6 +268,7 @@ int util_wifi_deinitialize(void); * @return 0 on success, other value on failure */ int util_wifi_set_connection_state_changed_cb(wifi_connection_state_changed_cb cb, void *data); +int util_wifi_manager_set_connection_state_changed_cb(wifi_manager_h wifi, wifi_manager_connection_state_changed_cb cb, void *data); /** * @brief Unregisters callback set with util_wifi_set_connection_state_changed_cb. @@ -273,6 +276,7 @@ int util_wifi_set_connection_state_changed_cb(wifi_connection_state_changed_cb c * @param cb callback */ void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_cb cb); +void util_wifi_manager_unset_connection_state_changed_cb(wifi_manager_h wifi, wifi_manager_connection_state_changed_cb cb); /** * @brief Allows to set multiple callbacks using wifi_set_device_state_changed_cb API @@ -282,6 +286,8 @@ void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_c * @return 0 on success, other value on failure */ int util_wifi_set_device_state_changed_cb(wifi_device_state_changed_cb cb, void *data); +int util_wifi_manager_set_device_state_changed_cb(wifi_manager_h wifi, wifi_manager_device_state_changed_cb cb, void *data); + /** * @brief Unregisters callback set with util_wifi_set_device_state_changed_cb. @@ -289,6 +295,7 @@ int util_wifi_set_device_state_changed_cb(wifi_device_state_changed_cb cb, void * @param cb callback */ void util_wifi_unset_device_state_changed_cb(wifi_device_state_changed_cb cb); +void util_wifi_manager_unset_device_state_changed_cb(wifi_manager_h wifi, wifi_manager_device_state_changed_cb cb); /** diff --git a/packaging/org.tizen.indicator.spec b/packaging/org.tizen.indicator.spec index a556bde..cf19a47 100644 --- a/packaging/org.tizen.indicator.spec +++ b/packaging/org.tizen.indicator.spec @@ -16,6 +16,7 @@ BuildRequires: pkgconfig(capi-media-player) BuildRequires: pkgconfig(capi-media-sound-manager) BuildRequires: pkgconfig(capi-media-metadata-extractor) BuildRequires: pkgconfig(capi-network-wifi) +BuildRequires: pkgconfig(capi-network-wifi-manager) BuildRequires: pkgconfig(capi-ui-efl-util) BuildRequires: pkgconfig(appcore-common) BuildRequires: pkgconfig(dlog) diff --git a/src/modules/connection/wifi.c b/src/modules/connection/wifi.c index 3babc65..9be221b 100644 --- a/src/modules/connection/wifi.c +++ b/src/modules/connection/wifi.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include "common.h" #include "indicator.h" @@ -67,7 +67,8 @@ static const char *icon_path[LEVEL_WIFI_MAX] = { static int transfer_state = -1; static int updated_while_lcd_off = 0; static int prevIndex = -1; -static wifi_rssi_level_e rssi_level; +static wifi_manager_rssi_level_e rssi_level; +static wifi_manager_h wifi_manager; static void set_app_state(void *data) { @@ -80,6 +81,7 @@ static void show_image_icon(void *data, int index) return; } + _D("WiFi icon show"); wifi.img_obj.data = icon_path[index]; icon_show(&wifi); @@ -89,8 +91,12 @@ static void show_image_icon(void *data, int index) static void hide_image_icon(void) { + if (prevIndex == -1) { + return; + } transfer_state = -1; + _D("WiFi icon hide"); icon_hide(&wifi); prevIndex = -1; @@ -149,13 +155,13 @@ static void show_wifi_transfer_icon(void *data) } } -static int _rssi_level_to_strength(wifi_rssi_level_e level) +static int _rssi_level_to_strength(wifi_manager_rssi_level_e level) { switch (level) { case WIFI_RSSI_LEVEL_0: + case WIFI_RSSI_LEVEL_1: return LEVEL_WIFI_01; case WIFI_RSSI_LEVEL_2: - case WIFI_RSSI_LEVEL_1: return LEVEL_WIFI_02; case WIFI_RSSI_LEVEL_3: return LEVEL_WIFI_03; @@ -166,10 +172,10 @@ static int _rssi_level_to_strength(wifi_rssi_level_e level) } } -static void _wifi_view_update(void *data) +void _wifi_view_update(void *data) { bool activated; - wifi_connection_state_e state; + wifi_manager_connection_state_e state; int ret; ret_if(!data); @@ -180,18 +186,19 @@ static void _wifi_view_update(void *data) } updated_while_lcd_off = 0; - ret = wifi_is_activated(&activated); - retm_if(ret != WIFI_ERROR_NONE, "wifi_is_activated failed: %s", get_error_message(ret)); - _D("wifi_state : %d", activated); + ret = wifi_manager_is_activated(wifi_manager, &activated); + retm_if(ret != WIFI_MANAGER_ERROR_NONE, "wifi_manager_is_activated failed: %s", + get_error_message(ret)); if (!activated) { hide_image_icon(); return; } - ret = wifi_get_connection_state(&state); - retm_if(ret != WIFI_ERROR_NONE, "wifi_get_connection_state failed: %s", get_error_message(ret)); - if (state != WIFI_CONNECTION_STATE_CONNECTED) { + ret = wifi_manager_get_connection_state(wifi_manager, &state); + retm_if(ret != WIFI_MANAGER_ERROR_NONE, "wifi_manager_get_connection_state failed: %s", + get_error_message(ret)); + if (state != WIFI_MANAGER_CONNECTION_STATE_CONNECTED) { hide_image_icon(); return; } @@ -202,20 +209,21 @@ static void _wifi_view_update(void *data) return; } -static void _wifi_rssi_level_changed(wifi_rssi_level_e level, void *data) +static void _wifi_manager_rssi_level_changed(wifi_manager_rssi_level_e level, void *data) { rssi_level = level; _wifi_view_update(data); return; } -static void _wifi_connection_state_changed(wifi_connection_state_e state, wifi_ap_h ap, void *data) +static void _wifi_manager_connection_state_changed(wifi_manager_connection_state_e state, + wifi_manager_ap_h ap, void *data) { _wifi_view_update(data); return; } -static void _wifi_device_state_changed(wifi_device_state_e state, void *data) +static void _wifi_manager_device_state_changed(wifi_manager_device_state_e state, void *data) { _wifi_view_update(data); return; @@ -242,32 +250,32 @@ static int register_wifi_module(void *data) set_app_state(data); - int ret = util_wifi_initialize(); - retvm_if(ret != WIFI_ERROR_NONE, FAIL, "util_wifi_initialize failed : %s", get_error_message(ret)); + int ret = util_wifi_manager_initialize(&wifi_manager); + retvm_if(ret != WIFI_MANAGER_ERROR_NONE, FAIL, "util_wifi_manager_initialize failed : %s", get_error_message(ret)); - ret = util_wifi_set_device_state_changed_cb(_wifi_device_state_changed, data); - if (ret != WIFI_ERROR_NONE) { - _E("util_wifi_set_device_state_changed_cb failed: %s", get_error_message(ret)); + ret = util_wifi_manager_set_device_state_changed_cb(wifi_manager, _wifi_manager_device_state_changed, data); + if (ret != WIFI_MANAGER_ERROR_NONE) { + _E("util_wifi_manager_set_device_state_changed_cb failed: %s", get_error_message(ret)); unregister_wifi_module(); return FAIL; } - ret = util_wifi_set_connection_state_changed_cb(_wifi_connection_state_changed, data); + ret = util_wifi_manager_set_connection_state_changed_cb(wifi_manager, _wifi_manager_connection_state_changed, data); if (ret != 0) { - _E("util_wifi_set_connection_state_changed_cb failed"); + _E("util_wifi_manager_set_connection_state_changed_cb failed: %s", get_error_message(ret)); unregister_wifi_module(); return FAIL; } - ret = wifi_set_rssi_level_changed_cb(_wifi_rssi_level_changed, data); - if (ret != WIFI_ERROR_NONE) { - _E("wifi_set_rssi_level_changed_cb failed: %s", get_error_message(ret)); + ret = wifi_manager_set_rssi_level_changed_cb(wifi_manager, _wifi_manager_rssi_level_changed, data); + if (ret != WIFI_MANAGER_ERROR_NONE) { + _E("wifi_manager_set_rssi_level_changed_cb failed: %s", get_error_message(ret)); unregister_wifi_module(); return FAIL; } ret = vconf_notify_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, _wifi_changed_cb, data); - if (ret != WIFI_ERROR_NONE) { + if (ret != WIFI_MANAGER_ERROR_NONE) { _E("vconf_notify_key_changed failed: %s", get_error_message(ret)); unregister_wifi_module(); return FAIL; @@ -280,14 +288,14 @@ static int register_wifi_module(void *data) static int unregister_wifi_module(void) { - util_wifi_unset_device_state_changed_cb(_wifi_device_state_changed); - util_wifi_unset_connection_state_changed_cb(_wifi_connection_state_changed); - wifi_unset_rssi_level_changed_cb(); + util_wifi_manager_unset_device_state_changed_cb(wifi_manager, _wifi_manager_device_state_changed); + util_wifi_manager_unset_connection_state_changed_cb(wifi_manager, _wifi_manager_connection_state_changed); + wifi_manager_unset_rssi_level_changed_cb(wifi_manager); vconf_ignore_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, _wifi_changed_cb); - int ret = util_wifi_deinitialize(); - if (ret != WIFI_ERROR_NONE) { - _E("util_wifi_deinitialize failed : %s", get_error_message(ret)); + int ret = util_wifi_manager_deinitialize(wifi_manager); + if (ret != WIFI_MANAGER_ERROR_NONE) { + _E("util_wifi_manager_deinitialize failed : %s", get_error_message(ret)); } return OK; diff --git a/src/util.c b/src/util.c index e5efdf6..6a30433 100644 --- a/src/util.c +++ b/src/util.c @@ -50,11 +50,23 @@ typedef struct { void *data; } wifi_handler_t; +typedef struct { + wifi_manager_connection_state_changed_cb cb; + void *data; +} wifi_manager_handler_t; + + typedef struct { wifi_device_state_changed_cb cb; void *data; } wifi_device_handler_t; +typedef struct { + wifi_manager_device_state_changed_cb cb; + void *data; +} wifi_manager_device_handler_t; + + typedef struct { system_settings_key_e key; system_settings_changed_cb cb; @@ -73,10 +85,13 @@ typedef struct { } reserved_t; static Eina_List *wifi_callbacks; +static Eina_List *wifi_manager_callbacks; static Eina_List *wifi_device_callbacks; +static Eina_List *wifi_manager_device_callbacks; static Eina_List *ss_callbacks; static Eina_List *ri_callbacks; -static int wifi_init_cnt = 0; +static int wifi_init_cnt; +static int wifi_manager_init_cnt; const reserved_t reserved_paths[] = { {MSG_NORMAL_STATUS_ICON, "Notify/b03_notify_message.png"}, @@ -456,7 +471,7 @@ int util_wifi_initialize(void) { _D("util_wifi_initialize"); - wifi_init_cnt++; + ++wifi_init_cnt; int ret = wifi_initialize(); if (ret == WIFI_ERROR_INVALID_OPERATION) { @@ -472,7 +487,7 @@ int util_wifi_deinitialize(void) { _D("util_wifi_deinitialize"); - wifi_init_cnt--; + --wifi_init_cnt; if (wifi_init_cnt == 0) { int ret = wifi_deinitialize(); @@ -481,6 +496,39 @@ int util_wifi_deinitialize(void) return OK; } +int util_wifi_manager_initialize(wifi_manager_h *handle) +{ + _D("util_wifi_manager_initialize"); + + static wifi_manager_h wifi = NULL; + ++wifi_manager_init_cnt; + + int ret = wifi_manager_initialize(&wifi); + if (ret == WIFI_MANAGER_ERROR_ALREADY_INITIALIZED) { + _W("WiFi manager already initialized"); + *handle = wifi; + return OK; + } + retv_if(ret != WIFI_MANAGER_ERROR_NONE, ret); + + *handle = wifi; + + return OK; +} + +int util_wifi_manager_deinitialize(wifi_manager_h handle) +{ + _D("util_wifi_deinitialize"); + + --wifi_manager_init_cnt; + + if (wifi_manager_init_cnt == 0) { + int ret = wifi_manager_deinitialize(handle); + retv_if(ret != WIFI_ERROR_NONE, ret); + } + return OK; +} + static void _wifi_state_cb(wifi_connection_state_e state, wifi_ap_h ap, void *user_data) { Eina_List *l; @@ -528,6 +576,55 @@ void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_c wifi_unset_connection_state_changed_cb(); } + + +static void _wifi_manager_state_cb(wifi_manager_connection_state_e state, wifi_manager_ap_h ap, void *user_data) +{ + Eina_List *l; + wifi_manager_handler_t *hdl; + + EINA_LIST_FOREACH(wifi_manager_callbacks, l, hdl) { + if (hdl->cb) + hdl->cb(state, ap, hdl->data); + } +} + +int util_wifi_manager_set_connection_state_changed_cb(wifi_manager_h wifi, wifi_manager_connection_state_changed_cb cb, void *data) +{ + wifi_manager_handler_t *hdl = malloc(sizeof(wifi_manager_handler_t)); + if (!hdl) + return -1; + + if (!wifi_manager_callbacks) { + int err = wifi_manager_set_connection_state_changed_cb(wifi, _wifi_manager_state_cb, NULL); + if (err != WIFI_ERROR_NONE) { + free(hdl); + return -1; + } + } + + hdl->cb = cb; + hdl->data = data; + wifi_manager_callbacks = eina_list_append(wifi_manager_callbacks, hdl); + + return 0; +} + +void util_wifi_manager_unset_connection_state_changed_cb(wifi_manager_h wifi, wifi_manager_connection_state_changed_cb cb) +{ + Eina_List *l, *l2; + wifi_manager_handler_t *hdl; + + EINA_LIST_FOREACH_SAFE(wifi_manager_callbacks, l, l2, hdl) { + if (hdl->cb == cb) { + wifi_manager_callbacks = eina_list_remove_list(wifi_manager_callbacks, l); + free(hdl); + break; + } + } + if (!wifi_manager_callbacks) + wifi_manager_unset_connection_state_changed_cb(wifi); +} /** WIFI DEVICE STATE CB **/ static void _wifi_device_state_cb(wifi_device_state_e state, void *user_data) @@ -581,6 +678,58 @@ void util_wifi_unset_device_state_changed_cb(wifi_device_state_changed_cb cb) wifi_unset_device_state_changed_cb(); } + + +static void _wifi_manager_device_state_cb(wifi_manager_device_state_e state, void *user_data) +{ + Eina_List *l; + wifi_manager_device_handler_t *hdl; + + EINA_LIST_FOREACH(wifi_manager_device_callbacks, l, hdl) { + if (hdl->cb) + hdl->cb(state, hdl->data); + } +} + +int util_wifi_manager_set_device_state_changed_cb(wifi_manager_h wifi, wifi_manager_device_state_changed_cb cb, void *data) +{ + wifi_manager_device_handler_t *hdl = malloc(sizeof(wifi_manager_device_handler_t)); + if (!hdl) { + _D("malloc failed"); + return WIFI_MANAGER_ERROR_OUT_OF_MEMORY; + } + + if (!wifi_manager_device_callbacks) { + int err = wifi_manager_set_device_state_changed_cb(wifi, _wifi_manager_device_state_cb, NULL); + if (err != WIFI_MANAGER_ERROR_NONE) { + _D("wifi_manager_set_device_state_changed_cb failed[%d]:%s", err, get_error_message(err)); + free(hdl); + return err; + } + } + hdl->cb = cb; + hdl->data = data; + wifi_manager_device_callbacks = eina_list_append(wifi_manager_device_callbacks, hdl); + + return 0; +} + +void util_wifi_manager_unset_device_state_changed_cb(wifi_manager_h wifi, wifi_manager_device_state_changed_cb cb) +{ + Eina_List *l, *l2; + wifi_manager_device_handler_t *hdl; + + EINA_LIST_FOREACH_SAFE(wifi_manager_device_callbacks, l, l2, hdl) { + if (hdl->cb == cb) { + wifi_manager_device_callbacks = eina_list_remove_list(wifi_manager_device_callbacks, l); + free(hdl); + break; + } + } + if (!wifi_manager_device_callbacks) + wifi_manager_unset_device_state_changed_cb(wifi); +} + /** SYSTEM SETTINGS CB **/ static void _system_settings_cb(system_settings_key_e key, void *data)