add wifi changed callback functions
authorYoungjae Shin <yj99.shin@samsung.com>
Wed, 6 Nov 2019 02:59:24 +0000 (11:59 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Thu, 19 Mar 2020 04:30:37 +0000 (13:30 +0900)
unittests/mode/tizen_Quick-Panel_mode.xml
wifi/WifiAction.cpp
wifi/WifiActionPower.cpp
wifi/WifiActionPower.h
wifi/WifiFactory.cpp
wifi/WifiFactory.h
wifi/WifiPlugin.cpp

index 836d74e..0773ef0 100644 (file)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <tizenModes xmlns="http://www.tizen.org" version="6.0">
   <mode name="Quick-Panel" type="normal">
+    <action rule="wifi.power">on</action>
     <action rule="vconf.db.setting.sound.sound_on">1</action>
     <action rule="vconf.db.setting.sound.vibration_on">1</action>
     <action rule="vconf.db.location.setting.Usemylocation">1</action>
index b81dc0c..f70c00b 100644 (file)
@@ -24,10 +24,14 @@ MODES_NAMESPACE_USE;
 WifiAction::WifiAction(const std::string &name)
        : PluginAction(name), handle(NULL)
 {
+       int ret = wifi_manager_initialize(&handle);
+       if (ret != WIFI_MANAGER_ERROR_NONE)
+               ERR("wifi_manager_initialize() Fail(%d)", ret);
 }
 
 WifiAction::~WifiAction()
 {
+       wifi_manager_deinitialize(handle);
 }
 
 const std::string& WifiAction::strErr(int err)
index 4b4b2e8..b4731d3 100644 (file)
@@ -23,28 +23,9 @@ MODES_NAMESPACE_USE;
 
 const std::string WifiActionPower::NAME = "power";
 
-WifiActionPower::WifiActionPower(wifi_manager_h wifiHandle)
-       : WifiAction(NAME), oldVal(false)
+WifiActionPower::WifiActionPower()
+       : WifiAction(NAME), cb(NULL), cbData(NULL), oldVal(false)
 {
-       handle = wifiHandle;
-}
-
-void WifiActionPower::activateCB(wifi_manager_error_e result, void *user_data)
-{
-       INFO("wifi Activated");
-       if (WIFI_MANAGER_ERROR_NONE != result) {
-               const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result);
-               ERR("activateCB() Fail(%d, %s)", result, errStr.c_str());
-       }
-}
-
-void WifiActionPower::deactivateCB(wifi_manager_error_e result, void *user_data)
-{
-       INFO("wifi Deactivated");
-       if (WIFI_MANAGER_ERROR_NONE != result) {
-               const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result);
-               ERR("deactivateCB() Fail(%d, %s)", result, errStr.c_str());
-       }
 }
 
 int WifiActionPower::set(bool val)
@@ -93,3 +74,79 @@ int WifiActionPower::parse(const std::string &archive)
 
        return MODES_ERROR_NONE;
 }
+
+int WifiActionPower::setChangedCallback(valueChangedCB callback, void *userData)
+{
+       RETV_IF(NULL == callback, MODES_ERROR_INVALID_PARAMETER);
+
+       int ret = wifi_manager_set_device_state_changed_cb(handle, wifiStateChangedCB, this);
+       if (WIFI_MANAGER_ERROR_NONE != ret) {
+               ERR("wifi_manager_set_device_state_changed_cb() Fail(%s)", strErr(ret).c_str());
+               return MODES_ERROR_SYSTEM;
+       }
+
+       cb = callback;
+       cbData = userData;
+
+       DBG("WifiActionPower setChangedCallback() Success");
+       return MODES_ERROR_NONE;
+}
+int WifiActionPower::unSetChangedCallback(valueChangedCB callback, void *userData)
+{
+       RETV_IF(NULL == callback, MODES_ERROR_INVALID_PARAMETER);
+
+       int ret = wifi_manager_unset_device_state_changed_cb(handle);
+       if (WIFI_MANAGER_ERROR_NONE != ret) {
+               ERR("wifi_manager_unset_device_state_changed_cb() Fail(%s)", strErr(ret).c_str());
+               return MODES_ERROR_SYSTEM;
+       }
+
+       cb = NULL;
+       cbData = NULL;
+
+       DBG("WifiActionPower unSetChangedCallback() Success");
+       return MODES_ERROR_NONE;
+}
+
+void WifiActionPower::activateCB(wifi_manager_error_e result, void *user_data)
+{
+       INFO("wifi Activated");
+       if (WIFI_MANAGER_ERROR_NONE != result) {
+               const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result);
+               ERR("activateCB() Fail(%d, %s)", result, errStr.c_str());
+       }
+}
+
+void WifiActionPower::deactivateCB(wifi_manager_error_e result, void *user_data)
+{
+       INFO("wifi Deactivated");
+       if (WIFI_MANAGER_ERROR_NONE != result) {
+               const std::string &errStr = ((WifiActionPower*)user_data)->strErr(result);
+               ERR("deactivateCB() Fail(%d, %s)", result, errStr.c_str());
+       }
+}
+
+void WifiActionPower::wifiStateChangedCB(wifi_manager_device_state_e state, void *user_data)
+{
+       WifiActionPower *action = (WifiActionPower*)user_data;
+
+       RET_IF(NULL == user_data);
+
+       bool changedVal = action->oldVal;
+       if (state == WIFI_MANAGER_DEVICE_STATE_ACTIVATED)
+               changedVal = true;
+       else if (state == WIFI_MANAGER_DEVICE_STATE_DEACTIVATED)
+               changedVal = false;
+       else
+               ERR("Unknown state(%d)", state);
+
+       INFO("state:%d", state);
+
+       if (changedVal != action->oldVal) {
+               valueChangedCB cb = action->cb;
+               void *cbData = action->cbData;
+               //TODO: revise after revising the modes(because of piAction free)
+               action->unSetChangedCallback(action->cb, action->cbData);
+               cb(cbData);
+       }
+}
index 63fb3ff..9cc77ed 100644 (file)
@@ -23,15 +23,21 @@ MODES_NAMESPACE_BEGIN
 class WifiActionPower : public WifiAction {
 public:
        static const std::string NAME;
-       WifiActionPower(wifi_manager_h handle);
+       WifiActionPower();
 
        int set(bool val) override;
        int undo() override;
        std::string serialize() override;
        int parse(const std::string &archive) override;
+       int setChangedCallback(valueChangedCB callback, void *userData);
+       int unSetChangedCallback(valueChangedCB callback, void *userData);
+
+       valueChangedCB cb;
+       void *cbData;
 private:
        static void activateCB(wifi_manager_error_e result, void *user_data);
        static void deactivateCB(wifi_manager_error_e result, void *user_data);
+       static void wifiStateChangedCB(wifi_manager_device_state_e state, void * user_data);
        bool oldVal;
 };
 
index 53b0234..cf637e5 100644 (file)
 MODES_NAMESPACE_USE;
 
 WifiFactory::WifiFactory()
-       : handle(NULL)
 {
        actionMap[WifiActionPower::NAME] = POWER;
-
-       int ret = wifi_manager_initialize(&handle);
-       if (ret != WIFI_MANAGER_ERROR_NONE)
-               ERR("wifi_manager_initialize() Fail(%d)", ret);
 }
 
-WifiFactory::~WifiFactory()
-{
-       wifi_manager_deinitialize(handle);
-}
-
-
 WifiAction* WifiFactory::createAction(const std::string &key)
 {
        auto search = actionMap.find(key);
@@ -47,7 +36,7 @@ WifiAction* WifiFactory::createAction(const std::string &key)
 
        switch (search->second) {
        case POWER:
-               WifiActionPower *wifiActionPower = new WifiActionPower(handle);
+               WifiActionPower *wifiActionPower = new WifiActionPower();
                return wifiActionPower;
                break;
        }
index 11acb47..259305f 100644 (file)
@@ -24,7 +24,7 @@ MODES_NAMESPACE_BEGIN
 class WifiFactory {
 public:
        WifiFactory();
-       ~WifiFactory();
+       ~WifiFactory() = default;
 
        WifiAction *createAction(const std::string &key);
        void destroyAction(WifiAction *action);
@@ -34,7 +34,6 @@ private:
        };
 
        std::map<std::string, actionKey> actionMap;
-       wifi_manager_h handle;
 };
 
 MODES_NAMESPACE_END
index 26572c4..78ce07a 100644 (file)
@@ -92,4 +92,3 @@ PluginAction* WifiPlugin::getUndoAction(const std::string &key, const std::strin
 
        return action;
 }
-