Skip to content

Commit b6d5690

Browse files
authored
[a11y] Support for "announce" of AccessibilityChannel (#75)
1 parent 3fa9201 commit b6d5690

File tree

4 files changed

+61
-4
lines changed

4 files changed

+61
-4
lines changed

flutter/shell/platform/tizen/BUILD.gn

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ config("flutter_tizen_config") {
3535
"${sysroot_path}/usr/include/efreet-1",
3636
"${sysroot_path}/usr/include/eina-1",
3737
"${sysroot_path}/usr/include/eina-1/eina",
38+
"${sysroot_path}/usr/include/eldbus-1",
3839
"${sysroot_path}/usr/include/elementary-1",
3940
"${sysroot_path}/usr/include/emile-1",
4041
"${sysroot_path}/usr/include/eo-1",
@@ -140,6 +141,7 @@ template("embedder") {
140141
"ecore_wl2",
141142
"efl-extension",
142143
"eina",
144+
"eldbus",
143145
"elementary",
144146
"eom",
145147
"evas",

flutter/shell/platform/tizen/channels/accessibility_channel.cc

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
#include "accessibility_channel.h"
66

7-
#include <Elementary.h>
8-
97
#include "flutter/shell/platform/common/client_wrapper/include/flutter/standard_message_codec.h"
108
#include "flutter/shell/platform/tizen/channels/encodable_value_holder.h"
119
#include "flutter/shell/platform/tizen/logger.h"
@@ -15,14 +13,52 @@ namespace flutter {
1513
namespace {
1614

1715
constexpr char kChannelName[] = "flutter/accessibility";
16+
constexpr char kAccessibilityDbus[] = "org.a11y.Bus";
17+
constexpr char kAccessibilityDbusPath[] = "/org/a11y/bus";
18+
constexpr char kAccessibilityDbusInterface[] = "org.a11y.Bus";
19+
constexpr char kAtspiDirectReadBus[] = "org.tizen.ScreenReader";
20+
constexpr char kAtspiDirectReadPath[] = "/org/tizen/DirectReading";
21+
constexpr char kAtspiDirectReadInterface[] = "org.tizen.DirectReading";
1822

1923
} // namespace
2024

25+
static void _accessibilityBusAddressGet(void* data,
26+
const Eldbus_Message* message,
27+
Eldbus_Pending* pending) {
28+
Eldbus_Connection** accessibility_bus =
29+
static_cast<Eldbus_Connection**>(data);
30+
const char* error_name = nullptr;
31+
const char* error_message = nullptr;
32+
const char* socket_address = nullptr;
33+
34+
if (eldbus_message_error_get(message, &error_name, &error_message)) {
35+
FT_LOG(Error) << "Eldbus message error. (" << error_name << " : "
36+
<< error_message << ")";
37+
return;
38+
}
39+
40+
if (!eldbus_message_arguments_get(message, "s", &socket_address) ||
41+
!socket_address) {
42+
FT_LOG(Error) << "Could not get A11Y Bus socket address.";
43+
return;
44+
}
45+
*accessibility_bus = eldbus_private_address_connection_get(socket_address);
46+
}
47+
2148
AccessibilityChannel::AccessibilityChannel(BinaryMessenger* messenger)
2249
: channel_(std::make_unique<BasicMessageChannel<EncodableValue>>(
2350
messenger,
2451
kChannelName,
2552
&StandardMessageCodec::GetInstance())) {
53+
session_bus_ = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
54+
bus_ = eldbus_object_get(session_bus_, kAccessibilityDbus,
55+
kAccessibilityDbusPath);
56+
57+
Eldbus_Message* method = eldbus_object_method_call_new(
58+
bus_, kAccessibilityDbusInterface, "GetAddress");
59+
eldbus_object_send(bus_, method, _accessibilityBusAddressGet,
60+
&accessibility_bus_, 100);
61+
2662
channel_->SetMessageHandler([&](const auto& message, auto reply) {
2763
if (std::holds_alternative<EncodableMap>(message)) {
2864
auto map = std::get<EncodableMap>(message);
@@ -33,8 +69,15 @@ AccessibilityChannel::AccessibilityChannel(BinaryMessenger* messenger)
3369
FT_LOG(Info) << "Received " << *type << " message.";
3470
if (*type == "announce" && data) {
3571
EncodableValueHolder<std::string> msg(data.value, "message");
36-
if (msg) {
37-
elm_atspi_bridge_utils_say(msg->c_str(), true, nullptr, nullptr);
72+
if (msg && accessibility_bus_) {
73+
Eldbus_Message* eldbus_message = eldbus_message_method_call_new(
74+
kAtspiDirectReadBus, kAtspiDirectReadPath,
75+
kAtspiDirectReadInterface, "ReadCommand");
76+
Eldbus_Message_Iter* iter = eldbus_message_iter_get(eldbus_message);
77+
eldbus_message_iter_arguments_append(iter, "sb", msg->c_str(),
78+
true);
79+
eldbus_connection_send(accessibility_bus_, eldbus_message, nullptr,
80+
nullptr, -1);
3881
}
3982
}
4083
}
@@ -45,6 +88,10 @@ AccessibilityChannel::AccessibilityChannel(BinaryMessenger* messenger)
4588

4689
AccessibilityChannel::~AccessibilityChannel() {
4790
channel_->SetMessageHandler(nullptr);
91+
92+
eldbus_connection_unref(accessibility_bus_);
93+
eldbus_connection_unref(session_bus_);
94+
eldbus_object_unref(bus_);
4895
}
4996

5097
} // namespace flutter

flutter/shell/platform/tizen/channels/accessibility_channel.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#ifndef EMBEDDER_ACCESSIBILITY_CHANNEL_H_
66
#define EMBEDDER_ACCESSIBILITY_CHANNEL_H_
77

8+
#include <Eldbus.h>
9+
810
#include <functional>
911
#include <memory>
1012

@@ -20,6 +22,10 @@ class AccessibilityChannel {
2022

2123
private:
2224
std::unique_ptr<BasicMessageChannel<EncodableValue>> channel_;
25+
26+
Eldbus_Connection* session_bus_ = nullptr;
27+
Eldbus_Connection* accessibility_bus_ = nullptr;
28+
Eldbus_Object* bus_ = nullptr;
2329
};
2430

2531
} // namespace flutter

tools/generate_sysroot.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
'eina',
7272
'eina-devel',
7373
'eina-tools',
74+
'eldbus',
75+
'eldbus-devel',
7476
'elementary',
7577
'elementary-devel',
7678
'emile-devel',

0 commit comments

Comments
 (0)