]> glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/interfaces/IStatusBarService.py
Add -w flag for waiting for init
[waydroid.git] / tools / interfaces / IStatusBarService.py
1 import gbinder
2 import logging
3 import time
4 from tools import helpers
5
6
7 INTERFACE = "com.android.internal.statusbar.IStatusBarService"
8 SERVICE_NAME = "statusbar"
9
10 TRANSACTION_expand = 1
11 TRANSACTION_collapse = 2
12
13 class IStatusBarService:
14 def __init__(self, remote):
15 self.client = gbinder.Client(remote, INTERFACE)
16
17 def expand(self):
18 request = self.client.new_request()
19 reply, status = self.client.transact_sync_reply(
20 TRANSACTION_expand, request)
21
22 if status:
23 logging.error("Sending reply failed")
24 else:
25 reader = reply.init_reader()
26 status, exception = reader.read_int32()
27 if exception != 0:
28 logging.error("Failed with code: {}".format(exception))
29
30 def collapse(self):
31 request = self.client.new_request()
32 reply, status = self.client.transact_sync_reply(
33 TRANSACTION_collapse, request)
34
35 if status:
36 logging.error("Sending reply failed")
37 else:
38 reader = reply.init_reader()
39 status, exception = reader.read_int32()
40 if exception != 0:
41 logging.error("Failed with code: {}".format(exception))
42
43 def get_service(args):
44 helpers.drivers.loadBinderNodes(args)
45 try:
46 serviceManager = gbinder.ServiceManager("/dev/" + args.BINDER_DRIVER, args.SERVICE_MANAGER_PROTOCOL, args.BINDER_PROTOCOL)
47 except TypeError:
48 serviceManager = gbinder.ServiceManager("/dev/" + args.BINDER_DRIVER)
49 tries = 1000
50
51 remote, status = serviceManager.get_service_sync(SERVICE_NAME)
52 while(not remote):
53 if tries > 0:
54 logging.warning(
55 "Failed to get service {}, trying again...".format(SERVICE_NAME))
56 time.sleep(1)
57 remote, status = serviceManager.get_service_sync(SERVICE_NAME)
58 tries = tries - 1
59 else:
60 return None
61
62 return IStatusBarService(remote)