#include "VConfKeys.hpp"
#include "Window.hpp"
#include "dbusLocators.hpp"
+#include "utils.hpp"
+
+#include <device/display.h>
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");
screenScannerManager->startAutoscanning();
}
-void UniversalSwitch::stopScanning()
+void UniversalSwitch::switchToPasiveMode()
{
DEBUG("Universal-switch passive mode");
screenScannerManager.reset();
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();
void UniversalSwitch::terminate()
{
+ device_remove_callback(DEVICE_CALLBACK_DISPLAY_STATE, displayStateChangedCallback);
callbackHandle.reset();
- stopScanning();
+ switchToPasiveMode();
switchManager.reset();
compositeSwitchProvider.reset();
configuration.reset();
#include "Singleton.hpp"
#include "VConf.hpp"
+#include <device/callback.h>
+
#include <memory>
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;
std::weak_ptr<Window> mainWindow;
std::weak_ptr<ScrollActivitiesData> scrollActivitiesData;
VConfInterface::CallbackHandle callbackHandle;
+ bool isScanningOn = false;
+ bool isDisplayOn = false;
};
#endif