]> glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/actions/app_manager.py
debian: Add LXC as dependency
[waydroid.git] / tools / actions / app_manager.py
1 # Copyright 2021 Erfan Abdi
2 # SPDX-License-Identifier: GPL-3.0-or-later
3 import logging
4 import os
5 import shutil
6 import time
7 import tools.config
8 import tools.helpers.props
9 from tools.interfaces import IPlatform
10 from tools.interfaces import IStatusBarService
11
12 def install(args):
13 if os.path.exists(tools.config.session_defaults["config_path"]):
14 session_cfg = tools.config.load_session()
15 if session_cfg["session"]["state"] == "RUNNING":
16 tmp_dir = session_cfg["session"]["waydroid_data"] + "/waydroid_tmp"
17 if not os.path.exists(tmp_dir):
18 os.makedirs(tmp_dir)
19
20 shutil.copyfile(args.PACKAGE, tmp_dir + "/base.apk")
21 platformService = IPlatform.get_service(args)
22 if platformService:
23 platformService.installApp("/data/waydroid_tmp/base.apk")
24 shutil.rmtree(tmp_dir)
25 else:
26 logging.error("WayDroid container is {}".format(
27 session_cfg["session"]["state"]))
28 else:
29 logging.error("WayDroid session is stopped")
30
31 def remove(args):
32 if os.path.exists(tools.config.session_defaults["config_path"]):
33 session_cfg = tools.config.load_session()
34 if session_cfg["session"]["state"] == "RUNNING":
35 platformService = IPlatform.get_service(args)
36 if platformService:
37 ret = platformService.removeApp(args.PACKAGE)
38 if ret != 0:
39 logging.error("Failed to uninstall package: {}".format(args.PACKAGE))
40 else:
41 logging.error("Failed to access IPlatform service")
42 else:
43 logging.error("WayDroid container is {}".format(
44 session_cfg["session"]["state"]))
45 else:
46 logging.error("WayDroid session is stopped")
47
48 def launch(args):
49 def justLaunch():
50 platformService = IPlatform.get_service(args)
51 if platformService:
52 platformService.setprop("waydroid.active_apps", args.PACKAGE)
53 ret = platformService.launchApp(args.PACKAGE)
54 multiwin = platformService.getprop(
55 "persist.waydroid.multi_windows", "false")
56 if multiwin == "false":
57 platformService.settingsPutString(
58 2, "policy_control", "immersive.status=*")
59 else:
60 platformService.settingsPutString(
61 2, "policy_control", "immersive.full=*")
62 else:
63 logging.error("Failed to access IPlatform service")
64
65 if os.path.exists(tools.config.session_defaults["config_path"]):
66 session_cfg = tools.config.load_session()
67
68 if session_cfg["session"]["state"] == "RUNNING":
69 justLaunch()
70 elif session_cfg["session"]["state"] == "FROZEN" or session_cfg["session"]["state"] == "UNFREEZE":
71 session_cfg["session"]["state"] = "UNFREEZE"
72 tools.config.save_session(session_cfg)
73 while session_cfg["session"]["state"] != "RUNNING":
74 session_cfg = tools.config.load_session()
75 justLaunch()
76 else:
77 logging.error("WayDroid container is {}".format(
78 session_cfg["session"]["state"]))
79 else:
80 logging.error("Starting waydroid session")
81 tools.actions.session_manager.start(args, launch)
82
83 def list(args):
84 if os.path.exists(tools.config.session_defaults["config_path"]):
85 session_cfg = tools.config.load_session()
86 if session_cfg["session"]["state"] == "RUNNING":
87 platformService = IPlatform.get_service(args)
88 if platformService:
89 appsList = platformService.getAppsInfo()
90 for app in appsList:
91 print("Name: " + app["name"])
92 print("packageName: " + app["packageName"])
93 print("categories:")
94 for cat in app["categories"]:
95 print("\t" + cat)
96 else:
97 logging.error("Failed to access IPlatform service")
98 else:
99 logging.error("WayDroid container is {}".format(
100 session_cfg["session"]["state"]))
101 else:
102 logging.error("WayDroid session is stopped")
103
104 def showFullUI(args):
105 def justShow():
106 platformService = IPlatform.get_service(args)
107 if platformService:
108 platformService.setprop("waydroid.active_apps", "Waydroid")
109 platformService.settingsPutString(2, "policy_control", "null*")
110 # HACK: Refresh display contents
111 statusBarService = IStatusBarService.get_service(args)
112 if statusBarService:
113 statusBarService.expand()
114 time.sleep(0.5)
115 statusBarService.collapse()
116
117 if os.path.exists(tools.config.session_defaults["config_path"]):
118 session_cfg = tools.config.load_session()
119
120 if session_cfg["session"]["state"] == "RUNNING":
121 justShow()
122 elif session_cfg["session"]["state"] == "FROZEN" or session_cfg["session"]["state"] == "UNFREEZE":
123 session_cfg["session"]["state"] = "UNFREEZE"
124 tools.config.save_session(session_cfg)
125 while session_cfg["session"]["state"] != "RUNNING":
126 session_cfg = tools.config.load_session()
127 justShow()
128 else:
129 logging.error("WayDroid container is {}".format(
130 session_cfg["session"]["state"]))
131 else:
132 logging.error("Starting waydroid session")
133 tools.actions.session_manager.start(args, showFullUI)