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 {
1513namespace {
1614
1715constexpr 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+
2148AccessibilityChannel::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
4689AccessibilityChannel::~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
0 commit comments