/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <dali/internal/accessibility/bridge/bridge-object.h>
#include <dali/internal/accessibility/bridge/bridge-selection.h>
#include <dali/internal/accessibility/bridge/bridge-socket.h>
+#include <dali/internal/accessibility/bridge/bridge-table.h>
+#include <dali/internal/accessibility/bridge/bridge-table-cell.h>
#include <dali/internal/accessibility/bridge/bridge-text.h>
#include <dali/internal/accessibility/bridge/bridge-value.h>
#include <dali/internal/accessibility/bridge/bridge-application.h>
-#include <dali/internal/accessibility/bridge/dummy-atspi.h>
+#include <dali/internal/accessibility/bridge/dummy/dummy-atspi.h>
#include <dali/internal/adaptor/common/adaptor-impl.h>
#include <dali/internal/system/common/environment-variables.h>
+#include <unistd.h>
using namespace Dali::Accessibility;
public BridgeApplication,
public BridgeHypertext,
public BridgeHyperlink,
- public BridgeSocket
+ public BridgeSocket,
+ public BridgeTable,
+ public BridgeTableCell
{
DBus::DBusClient mAccessibilityStatusClient;
DBus::DBusClient mRegistryClient;
DBus::DBusClient mDirectReadingClient;
bool mIsScreenReaderEnabled = false;
bool mIsEnabled = false;
+ bool mIsApplicationRunning = false;
std::unordered_map<int32_t, std::function<void(std::string)>> mDirectReadingCallbacks;
Dali::Actor mHighlightedActor;
std::function<void(Dali::Actor)> mHighlightClearAction;
}
}
- auto methodObject = mRegistryClient.method<bool(std::tuple<uint32_t, int32_t, int32_t, int32_t, int32_t, std::string, bool>)>("NotifyListenersSync");
- auto result = methodObject.call(std::tuple<uint32_t, int32_t, int32_t, int32_t, int32_t, std::string, bool>{keyType, 0, static_cast<int32_t>(keyCode), 0, static_cast<int32_t>(timeStamp), keyName, isText ? 1 : 0});
- if(!result)
- {
- LOG() << result.getError().message;
- return Consumed::NO;
- }
- return std::get<0>(result) ? Consumed::YES : Consumed::NO;
+ return Consumed::NO;
}
/**
BridgeHypertext::RegisterInterfaces();
BridgeHyperlink::RegisterInterfaces();
BridgeSocket::RegisterInterfaces();
+ BridgeTable::RegisterInterfaces();
+ BridgeTableCell::RegisterInterfaces();
RegisterOnBridge(&mApplication);
}
/**
+ * @brief Sends a signal to dbus that the window is created.
+ *
+ * @param[in] window The window to be created
+ * @see BridgeObject::Emit()
+ */
+ void EmitCreated(Dali::Window window)
+ {
+ auto windowAccessible = mApplication.GetWindowAccessible(window);
+ if(windowAccessible)
+ {
+ windowAccessible->Emit(WindowEvent::CREATE, 0);
+ }
+ }
+
+ /**
* @brief Sends a signal to dbus that the window is shown.
*
* @param[in] window The window to be shown
}
/**
+ * @copydoc Dali::Accessibility::Bridge::WindowCreated()
+ */
+ void WindowCreated(Dali::Window window) override
+ {
+ if(IsUp())
+ {
+ EmitCreated(window);
+ }
+ }
+
+ /**
* @copydoc Dali::Accessibility::Bridge::WindowShown()
*/
void WindowShown(Dali::Window window) override
}
/**
+ * @copydoc Dali::Accessibility::Bridge::ApplicationPaused()
+ */
+ void ApplicationPaused() override
+ {
+ mIsApplicationRunning = false;
+ SwitchBridge();
+ }
+
+ /**
+ * @copydoc Dali::Accessibility::Bridge::ApplicationResumed()
+ */
+ void ApplicationResumed() override
+ {
+ mIsApplicationRunning = true;
+ SwitchBridge();
+ }
+
+ /**
* @copydoc Dali::Accessibility::Bridge::SuppressScreenReader()
*/
void SuppressScreenReader(bool suppress) override
void SwitchBridge()
{
- if((!mIsScreenReaderSuppressed && mIsScreenReaderEnabled) || mIsEnabled)
+ bool isScreenReaderEnabled = mIsScreenReaderEnabled && !mIsScreenReaderSuppressed;
+
+ if((isScreenReaderEnabled || mIsEnabled) && mIsApplicationRunning)
{
ForceUp();
}
{
auto client = CreateSocketClient(socket);
- client.method<void(std::string)>("Embedded").call(ATSPI_PREFIX_PATH + plug.GetPath());
+ client.method<void(std::string)>("Embedded").asyncCall([](DBus::ValueOrError<void>) {}, ATSPI_PREFIX_PATH + plug.GetPath());
}
void UnembedSocket(const Address& plug, const Address& socket) override
{
auto client = CreateSocketClient(socket);
- client.method<void(Address)>("Unembed").call(plug);
+ client.method<void(Address)>("Unembed").asyncCall([](DBus::ValueOrError<void>) {}, plug);
}
void SetSocketOffset(ProxyAccessible* socket, std::int32_t x, std::int32_t y) override
{
- AddFilteredEvent(FilteredEvents::SET_OFFSET, socket, 1.0f, [=]() {
+ AddCoalescableMessage(CoalescableMessages::SET_OFFSET, socket, 1.0f, [=]() {
auto client = CreateSocketClient(socket->GetAddress());
client.method<void(std::int32_t, std::int32_t)>("SetOffset").asyncCall([](DBus::ValueOrError<void>) {}, x, y);
try
{
- /* check environment variable first */
+ /* 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();
}
+ // Check if the image is either release or perf mode
+ if((access("/etc/release", F_OK) == 0) || (access("/etc/perf", F_OK) == 0))
+ {
+ return Dali::Accessibility::DummyBridge::GetInstance();
+ }
+
return std::make_shared<BridgeImpl>();
}
catch(const std::exception&)