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_settingsGetInt
= 12
22 TRANSACTION_launchIntent
= 13
25 def __init__(self
, remote
):
26 self
.client
= gbinder
.Client(remote
, INTERFACE
)
28 def getprop(self
, arg1
, arg2
):
29 request
= self
.client
.new_request()
30 request
.append_string16(arg1
)
31 request
.append_string16(arg2
)
32 reply
, status
= self
.client
.transact_sync_reply(
33 TRANSACTION_getprop
, request
)
36 logging
.error("Sending reply failed")
38 reader
= reply
.init_reader()
39 status
, exception
= reader
.read_int32()
41 rep1
= reader
.read_string16()
44 logging
.error("Failed with code: {}".format(exception
))
48 def setprop(self
, arg1
, arg2
):
49 request
= self
.client
.new_request()
50 request
.append_string16(arg1
)
51 request
.append_string16(arg2
)
52 reply
, status
= self
.client
.transact_sync_reply(
53 TRANSACTION_setprop
, request
)
56 logging
.error("Sending reply failed")
58 reader
= reply
.init_reader()
59 status
, exception
= reader
.read_int32()
63 logging
.error("Failed with code: {}".format(exception
))
67 def getAppsInfo(self
):
68 request
= self
.client
.new_request()
69 reply
, status
= self
.client
.transact_sync_reply(
70 TRANSACTION_getAppsInfo
, request
)
73 logging
.error("Sending reply failed")
75 reader
= reply
.init_reader()
77 status
, exception
= reader
.read_int32()
79 status
, apps
= reader
.read_int32()
81 status
, has_value
= reader
.read_int32()
84 "name": reader
.read_string16(),
85 "packageName": reader
.read_string16(),
86 "action": reader
.read_string16(),
87 "launchIntent": reader
.read_string16(),
88 "componentPackageName": reader
.read_string16(),
89 "componentClassName": reader
.read_string16(),
92 status
, categories
= reader
.read_int32()
93 for i
in range(categories
):
94 appinfo
["categories"].append(reader
.read_string16())
95 apps_list
.append(appinfo
)
97 logging
.error("Failed with code: {}".format(exception
))
101 def getAppInfo(self
, arg1
):
102 request
= self
.client
.new_request()
103 request
.append_string16(arg1
)
104 reply
, status
= self
.client
.transact_sync_reply(
105 TRANSACTION_getAppInfo
, request
)
108 logging
.error("Sending reply failed")
110 reader
= reply
.init_reader()
111 status
, exception
= reader
.read_int32()
113 status
, has_value
= reader
.read_int32()
116 "name": reader
.read_string16(),
117 "packageName": reader
.read_string16(),
118 "action": reader
.read_string16(),
119 "launchIntent": reader
.read_string16(),
120 "componentPackageName": reader
.read_string16(),
121 "componentClassName": reader
.read_string16(),
124 status
, categories
= reader
.read_int32()
125 for i
in range(categories
):
126 appinfo
["categories"].append(reader
.read_string16())
130 logging
.error("Failed with code: {}".format(exception
))
134 def installApp(self
, arg1
):
135 request
= self
.client
.new_request()
136 request
.append_string16(arg1
)
137 reply
, status
= self
.client
.transact_sync_reply(
138 TRANSACTION_installApp
, request
)
141 logging
.error("Sending reply failed")
143 reader
= reply
.init_reader()
144 status
, exception
= reader
.read_int32()
146 status
, ret
= reader
.read_int32()
149 logging
.error("Failed with code: {}".format(exception
))
153 def removeApp(self
, arg1
):
154 request
= self
.client
.new_request()
155 request
.append_string16(arg1
)
156 reply
, status
= self
.client
.transact_sync_reply(
157 TRANSACTION_removeApp
, request
)
160 logging
.error("Sending reply failed")
162 reader
= reply
.init_reader()
163 status
, exception
= reader
.read_int32()
165 status
, ret
= reader
.read_int32()
168 logging
.error("Failed with code: {}".format(exception
))
172 def launchApp(self
, arg1
):
173 request
= self
.client
.new_request()
174 request
.append_string16(arg1
)
175 reply
, status
= self
.client
.transact_sync_reply(
176 TRANSACTION_launchApp
, request
)
179 logging
.error("Sending reply failed")
181 reader
= reply
.init_reader()
182 status
, exception
= reader
.read_int32()
184 logging
.error("Failed with code: {}".format(exception
))
186 def launchIntent(self
, arg1
, arg2
):
187 request
= self
.client
.new_request()
188 request
.append_string16(arg1
)
189 request
.append_string16(arg2
)
190 reply
, status
= self
.client
.transact_sync_reply(
191 TRANSACTION_launchIntent
, request
)
194 logging
.error("Sending reply failed")
196 reader
= reply
.init_reader()
197 status
, exception
= reader
.read_int32()
199 rep1
= reader
.read_string16()
202 logging
.error("Failed with code: {}".format(exception
))
205 def getAppName(self
, arg1
):
206 request
= self
.client
.new_request()
207 request
.append_string16(arg1
)
208 reply
, status
= self
.client
.transact_sync_reply(
209 TRANSACTION_getAppName
, request
)
212 logging
.error("Sending reply failed")
214 reader
= reply
.init_reader()
215 status
, exception
= reader
.read_int32()
217 rep1
= reader
.read_string16()
220 logging
.error("Failed with code: {}".format(exception
))
224 def settingsPutString(self
, arg1
, arg2
, arg3
):
225 request
= self
.client
.new_request()
226 request
.append_int32(arg1
)
227 request
.append_string16(arg2
)
228 request
.append_string16(arg3
)
229 reply
, status
= self
.client
.transact_sync_reply(
230 TRANSACTION_settingsPutString
, request
)
233 logging
.error("Sending reply failed")
235 reader
= reply
.init_reader()
236 status
, exception
= reader
.read_int32()
238 logging
.error("Failed with code: {}".format(exception
))
240 def settingsGetString(self
, arg1
, arg2
):
241 request
= self
.client
.new_request()
242 request
.append_int32(arg1
)
243 request
.append_string16(arg2
)
244 reply
, status
= self
.client
.transact_sync_reply(
245 TRANSACTION_settingsGetString
, request
)
248 logging
.error("Sending reply failed")
250 reader
= reply
.init_reader()
251 status
, exception
= reader
.read_int32()
253 rep1
= reader
.read_string16()
256 logging
.error("Failed with code: {}".format(exception
))
260 def settingsPutInt(self
, arg1
, arg2
, arg3
):
261 request
= self
.client
.new_request()
262 request
.append_int32(arg1
)
263 request
.append_string16(arg2
)
264 request
.append_int32(arg3
)
265 reply
, status
= self
.client
.transact_sync_reply(
266 TRANSACTION_settingsPutInt
, request
)
269 logging
.error("Sending reply failed")
271 reader
= reply
.init_reader()
272 status
, exception
= reader
.read_int32()
274 logging
.error("Failed with code: {}".format(exception
))
276 def settingsGetInt(self
, arg1
, arg2
):
277 request
= self
.client
.new_request()
278 request
.append_int32(arg1
)
279 request
.append_string16(arg2
)
280 reply
, status
= self
.client
.transact_sync_reply(
281 TRANSACTION_settingsGetString
, request
)
284 logging
.error("Sending reply failed")
286 reader
= reply
.init_reader()
287 status
, exception
= reader
.read_int32()
289 status
, rep1
= reader
.read_int32()
292 logging
.error("Failed with code: {}".format(exception
))
296 def get_service(args
):
297 helpers
.drivers
.loadBinderNodes(args
)
299 serviceManager
= gbinder
.ServiceManager("/dev/" + args
.BINDER_DRIVER
, args
.SERVICE_MANAGER_PROTOCOL
, args
.BINDER_PROTOCOL
)
301 serviceManager
= gbinder
.ServiceManager("/dev/" + args
.BINDER_DRIVER
)
304 remote
, status
= serviceManager
.get_service_sync(SERVICE_NAME
)
308 "Failed to get service {}, trying again...".format(SERVICE_NAME
))
310 remote
, status
= serviceManager
.get_service_sync(SERVICE_NAME
)
315 return IPlatform(remote
)