4 from tools
import helpers
7 INTERFACE
= "lineageos.waydroid.IPlatform"
8 SERVICE_NAME
= "waydroidplatform"
10 TRANSACTION_getprop
= 1
11 TRANSACTION_setprop
= 2
12 TRANSACTION_getAppsInfo
= 3
13 TRANSACTION_getAppInfo
= 4
14 TRANSACTION_installApp
= 5
15 TRANSACTION_removeApp
= 6
16 TRANSACTION_launchApp
= 7
17 TRANSACTION_getAppName
= 8
18 TRANSACTION_settingsPutString
= 9
19 TRANSACTION_settingsGetString
= 10
20 TRANSACTION_settingsPutInt
= 11
21 TRANSACTION_getAppName
= 12
24 def __init__(self
, remote
):
25 self
.client
= gbinder
.Client(remote
, INTERFACE
)
27 def getprop(self
, arg1
, arg2
):
28 request
= self
.client
.new_request()
29 request
.append_string16(arg1
)
30 request
.append_string16(arg2
)
31 reply
, status
= self
.client
.transact_sync_reply(
32 TRANSACTION_getprop
, request
)
35 logging
.error("Sending reply failed")
37 reader
= reply
.init_reader()
38 status
, exception
= reader
.read_int32()
40 rep1
= reader
.read_string16()
43 logging
.error("Failed with code: {}".format(exception
))
47 def setprop(self
, arg1
, arg2
):
48 request
= self
.client
.new_request()
49 request
.append_string16(arg1
)
50 request
.append_string16(arg2
)
51 reply
, status
= self
.client
.transact_sync_reply(
52 TRANSACTION_setprop
, request
)
55 logging
.error("Sending reply failed")
57 reader
= reply
.init_reader()
58 status
, exception
= reader
.read_int32()
62 logging
.error("Failed with code: {}".format(exception
))
66 def getAppsInfo(self
):
67 request
= self
.client
.new_request()
68 reply
, status
= self
.client
.transact_sync_reply(
69 TRANSACTION_getAppsInfo
, request
)
72 logging
.error("Sending reply failed")
74 reader
= reply
.init_reader()
76 status
, exception
= reader
.read_int32()
78 status
, apps
= reader
.read_int32()
80 status
, has_value
= reader
.read_int32()
83 "name": reader
.read_string16(),
84 "packageName": reader
.read_string16(),
85 "action": reader
.read_string16(),
86 "launchIntent": reader
.read_string16(),
87 "componentPackageName": reader
.read_string16(),
88 "componentClassName": reader
.read_string16(),
91 status
, categories
= reader
.read_int32()
92 for i
in range(categories
):
93 appinfo
["categories"].append(reader
.read_string16())
94 apps_list
.append(appinfo
)
96 logging
.error("Failed with code: {}".format(exception
))
100 def getAppInfo(self
, arg1
):
101 request
= self
.client
.new_request()
102 request
.append_string16(arg1
)
103 reply
, status
= self
.client
.transact_sync_reply(
104 TRANSACTION_getAppInfo
, request
)
107 logging
.error("Sending reply failed")
109 reader
= reply
.init_reader()
110 status
, exception
= reader
.read_int32()
112 status
, has_value
= reader
.read_int32()
115 "name": reader
.read_string16(),
116 "packageName": reader
.read_string16(),
117 "action": reader
.read_string16(),
118 "launchIntent": reader
.read_string16(),
119 "componentPackageName": reader
.read_string16(),
120 "componentClassName": reader
.read_string16(),
123 status
, categories
= reader
.read_int32()
124 for i
in range(categories
):
125 appinfo
["categories"].append(reader
.read_string16())
129 logging
.error("Failed with code: {}".format(exception
))
133 def installApp(self
, arg1
):
134 request
= self
.client
.new_request()
135 request
.append_string16(arg1
)
136 reply
, status
= self
.client
.transact_sync_reply(
137 TRANSACTION_installApp
, request
)
140 logging
.error("Sending reply failed")
142 reader
= reply
.init_reader()
143 status
, exception
= reader
.read_int32()
145 status
, ret
= reader
.read_int32()
148 logging
.error("Failed with code: {}".format(exception
))
152 def removeApp(self
, arg1
):
153 request
= self
.client
.new_request()
154 request
.append_string16(arg1
)
155 reply
, status
= self
.client
.transact_sync_reply(
156 TRANSACTION_removeApp
, request
)
159 logging
.error("Sending reply failed")
161 reader
= reply
.init_reader()
162 status
, exception
= reader
.read_int32()
164 status
, ret
= reader
.read_int32()
167 logging
.error("Failed with code: {}".format(exception
))
171 def launchApp(self
, arg1
):
172 request
= self
.client
.new_request()
173 request
.append_string16(arg1
)
174 reply
, status
= self
.client
.transact_sync_reply(
175 TRANSACTION_launchApp
, request
)
178 logging
.error("Sending reply failed")
180 reader
= reply
.init_reader()
181 status
, exception
= reader
.read_int32()
183 logging
.error("Failed with code: {}".format(exception
))
185 def getAppName(self
, arg1
):
186 request
= self
.client
.new_request()
187 request
.append_string16(arg1
)
188 reply
, status
= self
.client
.transact_sync_reply(
189 TRANSACTION_getAppName
, request
)
192 logging
.error("Sending reply failed")
194 reader
= reply
.init_reader()
195 status
, exception
= reader
.read_int32()
197 rep1
= reader
.read_string16()
200 logging
.error("Failed with code: {}".format(exception
))
204 def settingsPutString(self
, arg1
, arg2
, arg3
):
205 request
= self
.client
.new_request()
206 request
.append_int32(arg1
)
207 request
.append_string16(arg2
)
208 request
.append_string16(arg3
)
209 reply
, status
= self
.client
.transact_sync_reply(
210 TRANSACTION_settingsPutString
, request
)
213 logging
.error("Sending reply failed")
215 reader
= reply
.init_reader()
216 status
, exception
= reader
.read_int32()
218 logging
.error("Failed with code: {}".format(exception
))
220 def settingsGetString(self
, arg1
, arg2
):
221 request
= self
.client
.new_request()
222 request
.append_int32(arg1
)
223 request
.append_string16(arg2
)
224 reply
, status
= self
.client
.transact_sync_reply(
225 TRANSACTION_settingsGetString
, request
)
228 logging
.error("Sending reply failed")
230 reader
= reply
.init_reader()
231 status
, exception
= reader
.read_int32()
233 rep1
= reader
.read_string16()
236 logging
.error("Failed with code: {}".format(exception
))
240 def settingsPutInt(self
, arg1
, arg2
, arg3
):
241 request
= self
.client
.new_request()
242 request
.append_int32(arg1
)
243 request
.append_string16(arg2
)
244 request
.append_int32(arg3
)
245 reply
, status
= self
.client
.transact_sync_reply(
246 TRANSACTION_settingsPutInt
, request
)
249 logging
.error("Sending reply failed")
251 reader
= reply
.init_reader()
252 status
, exception
= reader
.read_int32()
254 logging
.error("Failed with code: {}".format(exception
))
256 def settingsGetInt(self
, arg1
, arg2
):
257 request
= self
.client
.new_request()
258 request
.append_int32(arg1
)
259 request
.append_string16(arg2
)
260 reply
, status
= self
.client
.transact_sync_reply(
261 TRANSACTION_settingsGetString
, request
)
264 logging
.error("Sending reply failed")
266 reader
= reply
.init_reader()
267 status
, exception
= reader
.read_int32()
269 status
, rep1
= reader
.read_int32()
272 logging
.error("Failed with code: {}".format(exception
))
276 def get_service(args
):
277 helpers
.drivers
.loadBinderNodes(args
)
279 serviceManager
= gbinder
.ServiceManager("/dev/" + args
.BINDER_DRIVER
, args
.SERVICE_MANAGER_PROTOCOL
, args
.BINDER_PROTOCOL
)
281 serviceManager
= gbinder
.ServiceManager("/dev/" + args
.BINDER_DRIVER
)
284 remote
, status
= serviceManager
.get_service_sync(SERVICE_NAME
)
288 "Failed to get service {}, trying again...".format(SERVICE_NAME
))
290 remote
, status
= serviceManager
.get_service_sync(SERVICE_NAME
)
295 return IPlatform(remote
)