Universal Switch will stay in passive mode when screen is turned off 92/160692/7
authorPawel Kurowski <p.kurowski2@samsung.com>
Fri, 17 Nov 2017 14:00:14 +0000 (15:00 +0100)
committerPawel Kurowski <p.kurowski2@samsung.com>
Fri, 17 Nov 2017 17:16:20 +0000 (18:16 +0100)
Change-Id: I4415574ac73a98267d851d0c054dd0d5613b1727

CMakeLists.txt
packaging/org.tizen.universal-switch.spec
src/UniversalSwitch.cpp
src/UniversalSwitch.hpp

index 9e69d8c..9fc7bab 100644 (file)
@@ -19,6 +19,7 @@ pkg_check_modules(pkgs REQUIRED
     capi-media-sound-manager
     capi-telephony
     capi-ui-efl-util
+    capi-system-device
     ecore
     eldbus
     elementary
index 4eefe2a..6c599d3 100644 (file)
@@ -19,6 +19,7 @@ BuildRequires:  pkgconfig(capi-appfw-application)
 BuildRequires:  pkgconfig(capi-media-player)
 BuildRequires:  pkgconfig(capi-media-sound-manager)
 BuildRequires:  pkgconfig(capi-telephony)
+BuildRequires:  pkgconfig(capi-system-device)
 BuildRequires:  pkgconfig(ecore)
 BuildRequires:  pkgconfig(elementary)
 BuildRequires:  pkgconfig(sqlite3)
index 7030276..22c6a68 100644 (file)
@@ -31,6 +31,9 @@
 #include "VConfKeys.hpp"
 #include "Window.hpp"
 #include "dbusLocators.hpp"
+#include "utils.hpp"
+
+#include <device/display.h>
 
 void UniversalSwitch::initialize()
 {
@@ -48,15 +51,20 @@ void UniversalSwitch::initialize()
        setCompositeSwitchProvider(compositeSwitchProvider);
        setConfiguration(configuration);
 
-       callbackHandle = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONF_KEY_SCANNING,
-                                        false,
+       device_add_callback(DEVICE_CALLBACK_DISPLAY_STATE, displayStateChangedCallback, nullptr);
+
+       auto displayState = DISPLAY_STATE_NORMAL;
+       PRINT_ERROR_IF(!device_display_get_state(&displayState));
+       isDisplayOn = (displayState == DISPLAY_STATE_NORMAL);
+
+       callbackHandle = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONF_KEY_SCANNING, false,
        [this](auto enabled) {
-               if (enabled) this->startScanning();
-               else this->stopScanning();
+               this->isScanningOn = enabled;
+               this->updateMode();
        });
 }
 
-void UniversalSwitch::startScanning()
+void UniversalSwitch::switchToActiveMode()
 {
        DEBUG("Universal-switch active mode");
 
@@ -72,7 +80,7 @@ void UniversalSwitch::startScanning()
        screenScannerManager->startAutoscanning();
 }
 
-void UniversalSwitch::stopScanning()
+void UniversalSwitch::switchToPasiveMode()
 {
        DEBUG("Universal-switch passive mode");
        screenScannerManager.reset();
@@ -94,6 +102,20 @@ void UniversalSwitch::resetA11yDbusProperties()
        dbusClient->method<void(bool)>(dbusLocators::accessibilityEMod::ACCESSORIES_SP_ENABLED).call(false);
 }
 
+void UniversalSwitch::updateMode()
+{
+       if (isScanningOn && isDisplayOn)
+               switchToActiveMode();
+       else
+               switchToPasiveMode();
+}
+
+void UniversalSwitch::displayStateChangedCallback(device_callback_e type, void *value, void *user_data)
+{
+       Singleton<UniversalSwitch>::instance().isDisplayOn = ((int) value == DISPLAY_STATE_NORMAL);
+       Singleton<UniversalSwitch>::instance().updateMode();
+}
+
 std::shared_ptr<ScrollActivitiesData> UniversalSwitch::getScrollActivitiesData() const
 {
        return scrollActivitiesData.lock();
@@ -179,8 +201,9 @@ void UniversalSwitch::setConfiguration(const std::shared_ptr<Configuration> &con
 
 void UniversalSwitch::terminate()
 {
+       device_remove_callback(DEVICE_CALLBACK_DISPLAY_STATE, displayStateChangedCallback);
        callbackHandle.reset();
-       stopScanning();
+       switchToPasiveMode();
        switchManager.reset();
        compositeSwitchProvider.reset();
        configuration.reset();
index e4ff76b..838559b 100644 (file)
@@ -20,6 +20,8 @@
 #include "Singleton.hpp"
 #include "VConf.hpp"
 
+#include <device/callback.h>
+
 #include <memory>
 
 
@@ -55,13 +57,15 @@ public:
        void terminate();
 
 private:
-       void startScanning();
-       void stopScanning();
+       void switchToActiveMode();
+       void switchToPasiveMode();
+       void updateMode();
        void setSwitchManager(const std::shared_ptr<SwitchManager> &sm);
        void setCompositeSwitchProvider(const std::shared_ptr<CompositeSwitchProvider> &csp);
        void setConfiguration(const std::shared_ptr<Configuration> &config);
        void setDBusInterface(const std::shared_ptr<DBusInterface> &dbus);
        void resetA11yDbusProperties();
+       static void displayStateChangedCallback(device_callback_e type, void *value, void *user_data);
 
        std::shared_ptr<SwitchManager> switchManager;
        std::shared_ptr<CompositeSwitchProvider> compositeSwitchProvider;
@@ -75,6 +79,8 @@ private:
        std::weak_ptr<Window> mainWindow;
        std::weak_ptr<ScrollActivitiesData> scrollActivitiesData;
        VConfInterface::CallbackHandle callbackHandle;
+       bool isScanningOn = false;
+       bool isDisplayOn = false;
 };
 
 #endif