Skip to content

Commit 8d36c27

Browse files
Replace eldbus with gdbus (#150)
Co-authored-by: xiaowei guan <60122246+xiaowei-guan@users.noreply.github.com>
1 parent ec764e3 commit 8d36c27

File tree

4 files changed

+105
-46
lines changed

4 files changed

+105
-46
lines changed

flutter/shell/platform/tizen/BUILD.gn

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ config("flutter_tizen_config") {
2525
"${sysroot_path}/usr/include/efl-1",
2626
"${sysroot_path}/usr/include/eina-1",
2727
"${sysroot_path}/usr/include/eina-1/eina",
28-
"${sysroot_path}/usr/include/eldbus-1",
2928
"${sysroot_path}/usr/include/eo-1",
3029
"${sysroot_path}/usr/include/feedback",
3130
"${sysroot_path}/usr/include/system",
3231
"${sysroot_path}/usr/include/tzsh",
3332
"${sysroot_path}/usr/include/vconf",
3433
"${sysroot_path}/usr/include/wayland-extension",
34+
"${sysroot_path}/usr/include/glib-2.0",
35+
"${sysroot_path}/usr/lib/glib-2.0/include",
3536
]
3637

3738
cflags_cc = [
@@ -117,7 +118,7 @@ template("embedder") {
117118
"ecore_input",
118119
"ecore_wl2",
119120
"eina",
120-
"eldbus",
121+
"gio-2.0",
121122
"feedback",
122123
"flutter_engine",
123124
"tbm",

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

Lines changed: 90 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4895
AccessibilityChannel::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)
91139
AccessibilityChannel::~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

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#ifndef EMBEDDER_ACCESSIBILITY_CHANNEL_H_
66
#define EMBEDDER_ACCESSIBILITY_CHANNEL_H_
77

8-
#include <Eldbus.h>
8+
#include <gio/gio.h>
99

1010
#include <functional>
1111
#include <memory>
@@ -20,12 +20,19 @@ class AccessibilityChannel {
2020
explicit AccessibilityChannel(BinaryMessenger* messenger);
2121
virtual ~AccessibilityChannel();
2222

23+
private:
24+
static void OnAccessibilityBusAddressGet(GObject* source_object,
25+
GAsyncResult* res,
26+
gpointer user_data);
27+
static void OnSessionBusConnection(GObject* source_object,
28+
GAsyncResult* res,
29+
gpointer user_data);
30+
2331
private:
2432
std::unique_ptr<BasicMessageChannel<EncodableValue>> channel_;
2533

26-
Eldbus_Connection* session_bus_ = nullptr;
27-
Eldbus_Connection* accessibility_bus_ = nullptr;
28-
Eldbus_Object* bus_ = nullptr;
34+
GDBusConnection* session_bus_ = nullptr;
35+
GDBusConnection* accessibility_bus_ = nullptr;
2936
};
3037

3138
} // namespace flutter

tools/generate_sysroot.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,9 @@
5959
'eina',
6060
'eina-devel',
6161
'eina-tools',
62-
'eldbus',
63-
'eldbus-devel',
6462
'eo-devel',
6563
'glib2-devel',
64+
'libgio',
6665
'jsoncpp',
6766
'jsoncpp-devel',
6867
'libatk',

0 commit comments

Comments
 (0)