@@ -22,44 +22,83 @@ constexpr char kAtspiDirectReadInterface[] = "org.tizen.DirectReading";
2222
2323} // namespace
2424
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 << " )" ;
25+ static void _readCommandCallback (GObject* source_object,
26+ GAsyncResult* res,
27+ gpointer user_data) {
28+ g_autoptr (GError) error = nullptr ;
29+
30+ g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), res, &error);
31+
32+ if (error) {
33+ FT_LOG (Error) << " ReadCommand failed: " << error->message ;
34+ } else {
35+ FT_LOG (Info) << " ReadCommand succeeded" ;
36+ }
37+ }
38+
39+ void AccessibilityChannel::OnAccessibilityBusAddressGet (GObject* source_object,
40+ GAsyncResult* res,
41+ gpointer user_data) {
42+ g_autoptr (GError) error = nullptr ;
43+ g_autoptr (GVariant) result = nullptr ;
44+
45+ result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), res,
46+ &error);
47+ if (error) {
48+ FT_LOG (Error) << " Failed to connect session bus: " << error->message ;
3749 return ;
3850 }
3951
40- if (!eldbus_message_arguments_get (message, " s" , &socket_address) ||
41- !socket_address) {
42- FT_LOG (Error) << " Could not get A11Y Bus socket address." ;
52+ const gchar* socket_address = nullptr ;
53+ g_variant_get (result, " (&s)" , &socket_address);
54+
55+ auto * self = static_cast <AccessibilityChannel*>(user_data);
56+ self->accessibility_bus_ = g_dbus_connection_new_for_address_sync (
57+ socket_address,
58+ static_cast <GDBusConnectionFlags>(
59+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
60+ G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION),
61+ nullptr , nullptr , &error);
62+ if (error) {
63+ FT_LOG (Error) << " Failed to connect to A11Y Bus: " << error->message ;
4364 return ;
4465 }
45- *accessibility_bus = eldbus_private_address_connection_get (socket_address);
66+
67+ g_dbus_connection_set_exit_on_close (self->accessibility_bus_ , FALSE );
68+
69+ FT_LOG (Info) << " Successfully connected to A11Y Bus at: " << socket_address;
70+ }
71+
72+ void AccessibilityChannel::OnSessionBusConnection (GObject* source_object,
73+ GAsyncResult* res,
74+ gpointer user_data) {
75+ g_autoptr (GError) error = nullptr ;
76+ GDBusConnection* session_bus = g_bus_get_finish (res, &error);
77+ if (error) {
78+ FT_LOG (Error) << " Failed to get session bus: " << error->message ;
79+ return ;
80+ }
81+
82+ auto * self = static_cast <AccessibilityChannel*>(user_data);
83+ if (self->session_bus_ ) {
84+ g_object_unref (self->session_bus_ );
85+ }
86+ self->session_bus_ = session_bus;
87+
88+ g_dbus_connection_call (
89+ session_bus, kAccessibilityDbus , kAccessibilityDbusPath ,
90+ kAccessibilityDbusInterface , " GetAddress" , nullptr , G_VARIANT_TYPE (" (s)" ),
91+ G_DBUS_CALL_FLAGS_NONE, -1 , nullptr ,
92+ (GAsyncReadyCallback)OnAccessibilityBusAddressGet, self);
4693}
4794
4895AccessibilityChannel::AccessibilityChannel (BinaryMessenger* messenger)
4996 : channel_(std::make_unique<BasicMessageChannel<EncodableValue>>(
5097 messenger,
5198 kChannelName ,
5299 &StandardMessageCodec::GetInstance ())) {
53- eldbus_init ();
54-
55- session_bus_ = eldbus_connection_get (ELDBUS_CONNECTION_TYPE_SESSION);
56- bus_ = eldbus_object_get (session_bus_, kAccessibilityDbus ,
57- kAccessibilityDbusPath );
58-
59- Eldbus_Message* method = eldbus_object_method_call_new (
60- bus_, kAccessibilityDbusInterface , " GetAddress" );
61- eldbus_object_send (bus_, method, _accessibilityBusAddressGet,
62- &accessibility_bus_, 100 );
100+ g_bus_get (G_BUS_TYPE_SESSION, nullptr ,
101+ (GAsyncReadyCallback)OnSessionBusConnection, this );
63102
64103 channel_->SetMessageHandler ([&](const auto & message, auto reply) {
65104 if (std::holds_alternative<EncodableMap>(message)) {
@@ -72,14 +111,23 @@ AccessibilityChannel::AccessibilityChannel(BinaryMessenger* messenger)
72111 if (*type == " announce" && data) {
73112 EncodableValueHolder<std::string> msg (data.value , " message" );
74113 if (msg && accessibility_bus_) {
75- Eldbus_Message* eldbus_message = eldbus_message_method_call_new (
76- kAtspiDirectReadBus , kAtspiDirectReadPath ,
77- kAtspiDirectReadInterface , " ReadCommand" );
78- Eldbus_Message_Iter* iter = eldbus_message_iter_get (eldbus_message);
79- eldbus_message_iter_arguments_append (iter, " sb" , msg->c_str (),
80- true );
81- eldbus_connection_send (accessibility_bus_, eldbus_message, nullptr ,
82- nullptr , -1 );
114+ FT_LOG (Info)
115+ << " A11Y Bus pointer exists, calling ReadCommand with message: "
116+ << msg->c_str ();
117+ GVariant* params = g_variant_new (" (sb)" , msg->c_str (), TRUE );
118+ if (!params) {
119+ FT_LOG (Error) << " Failed to create GVariant parameters" ;
120+ return ;
121+ }
122+ g_dbus_connection_call (
123+ accessibility_bus_, kAtspiDirectReadBus , kAtspiDirectReadPath ,
124+ kAtspiDirectReadInterface , " ReadCommand" , params, nullptr ,
125+ G_DBUS_CALL_FLAGS_NONE, -1 , nullptr ,
126+ (GAsyncReadyCallback)_readCommandCallback, nullptr );
127+ } else if (msg) {
128+ FT_LOG (Error) << " A11Y Bus is not initialized. Cannot call "
129+ " ReadCommand for message: "
130+ << msg->c_str ();
83131 }
84132 }
85133 }
@@ -91,11 +139,15 @@ AccessibilityChannel::AccessibilityChannel(BinaryMessenger* messenger)
91139AccessibilityChannel::~AccessibilityChannel () {
92140 channel_->SetMessageHandler (nullptr );
93141
94- eldbus_connection_unref (accessibility_bus_);
95- eldbus_connection_unref (session_bus_);
96- eldbus_object_unref (bus_);
142+ if (accessibility_bus_) {
143+ g_object_unref (accessibility_bus_);
144+ accessibility_bus_ = nullptr ;
145+ }
97146
98- eldbus_shutdown ();
147+ if (session_bus_) {
148+ g_object_unref (session_bus_);
149+ session_bus_ = nullptr ;
150+ }
99151}
100152
101153} // namespace flutter
0 commit comments