#include <dali/internal/accessibility/bridge/bridge-object.h>
#include <dali/internal/accessibility/bridge/bridge-text.h>
#include <dali/internal/accessibility/bridge/bridge-value.h>
+#include <dali/internal/accessibility/bridge/dummy-atspi.h>
+#include <dali/internal/system/common/environment-variables.h>
+#include <dali/devel-api/adaptor-framework/environment-variable.h>
using namespace Dali::Accessibility;
false);
}
+ void StopReading(bool alsoNonDiscardable) override
+ {
+ if(!IsUp())
+ {
+ return;
+ }
+
+ directReadingClient.method<DBus::ValueOrError<void>(bool)>("StopReading").asyncCall([](DBus::ValueOrError<void> msg) {
+ if(!msg)
+ {
+ LOG() << "Direct reading command failed (" << msg.getError().message << ")";
+ }
+ },
+ alsoNonDiscardable);
+ }
+
void Say(const std::string& text, bool discardable, std::function<void(std::string)> callback) override
{
if(!IsUp())
}
};
+static bool bridgeInitialized;
+
+static Bridge* CreateBridge()
+{
+ bridgeInitialized = true;
+
+ try
+ {
+ /* check environment variable first */
+ const char *envAtspiDisabled = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_DISABLE_ATSPI);
+ if (envAtspiDisabled && std::atoi(envAtspiDisabled) != 0)
+ {
+ return Dali::Accessibility::DummyBridge::GetInstance();
+ }
+
+ return new BridgeImpl;
+ }
+ catch (const std::exception&)
+ {
+ DALI_LOG_ERROR("Failed to initialize AT-SPI bridge");
+ return Dali::Accessibility::DummyBridge::GetInstance();
+ }
+}
+
Bridge* Bridge::GetCurrentBridge()
{
- static BridgeImpl* bridge = new BridgeImpl;
- return bridge;
+ static Bridge* bridge;
+
+ if (bridge)
+ {
+ return bridge;
+ }
+ else if (autoInitState == AutoInitState::ENABLED)
+ {
+ bridge = CreateBridge();
+
+ /* check environment variable for suppressing screen-reader */
+ const char *envSuppressScreenReader = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_SUPPRESS_SCREEN_READER);
+ if (envSuppressScreenReader && std::atoi(envSuppressScreenReader) != 0)
+ {
+ bridge->SuppressScreenReader(true);
+ }
+
+ return bridge;
+ }
+
+ return Dali::Accessibility::DummyBridge::GetInstance();
+}
+
+void Bridge::DisableAutoInit()
+{
+ if (bridgeInitialized)
+ {
+ DALI_LOG_ERROR("Bridge::DisableAutoInit() called after bridge auto-initialization");
+ }
+
+ autoInitState = AutoInitState::DISABLED;
+}
+
+void Bridge::EnableAutoInit(Accessible* topLevelWindow, const std::string& applicationName)
+{
+ autoInitState = AutoInitState::ENABLED;
+
+ if (bridgeInitialized)
+ {
+ return;
+ }
+
+ auto* bridge = Bridge::GetCurrentBridge();
+ bridge->AddTopLevelWindow(topLevelWindow);
+ bridge->SetApplicationName(applicationName);
+ bridge->Initialize();
}