]>
glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/actions/app_manager.py
1 # Copyright 2021 Erfan Abdi
2 # SPDX-License-Identifier: GPL-3.0-or-later
8 import tools
.helpers
.props
9 from tools
.interfaces
import IPlatform
10 from tools
.interfaces
import IStatusBarService
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
):
20 shutil
.copyfile(args
.PACKAGE
, tmp_dir
+ "/base.apk")
21 platformService
= IPlatform
.get_service(args
)
23 platformService
.installApp("/data/waydroid_tmp/base.apk")
24 os
.remove(tmp_dir
+ "/base.apk")
26 logging
.error("WayDroid container is {}".format(
27 session_cfg
["session"]["state"]))
29 logging
.error("WayDroid session is stopped")
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
)
37 ret
= platformService
.removeApp(args
.PACKAGE
)
39 logging
.error("Failed to uninstall package: {}".format(args
.PACKAGE
))
41 logging
.error("Failed to access IPlatform service")
43 logging
.error("WayDroid container is {}".format(
44 session_cfg
["session"]["state"]))
46 logging
.error("WayDroid session is stopped")
48 def maybeLaunchLater(args
, retry
, launchNow
):
49 if os
.path
.exists(tools
.config
.session_defaults
["config_path"]):
50 session_cfg
= tools
.config
.load_session()
52 if session_cfg
["session"]["state"] == "RUNNING":
54 elif session_cfg
["session"]["state"] == "FROZEN" or session_cfg
["session"]["state"] == "UNFREEZE":
55 session_cfg
["session"]["state"] = "UNFREEZE"
56 tools
.config
.save_session(session_cfg
)
57 while session_cfg
["session"]["state"] != "RUNNING":
58 session_cfg
= tools
.config
.load_session()
61 logging
.error("WayDroid container is {}".format(
62 session_cfg
["session"]["state"]))
64 logging
.error("Starting waydroid session")
65 tools
.actions
.session_manager
.start(args
, retry
)
69 platformService
= IPlatform
.get_service(args
)
71 platformService
.setprop("waydroid.active_apps", args
.PACKAGE
)
72 ret
= platformService
.launchApp(args
.PACKAGE
)
73 multiwin
= platformService
.getprop(
74 "persist.waydroid.multi_windows", "false")
75 if multiwin
== "false":
76 platformService
.settingsPutString(
77 2, "policy_control", "immersive.status=*")
79 platformService
.settingsPutString(
80 2, "policy_control", "immersive.full=*")
82 logging
.error("Failed to access IPlatform service")
83 maybeLaunchLater(args
, launch
, justLaunch
)
86 if os
.path
.exists(tools
.config
.session_defaults
["config_path"]):
87 session_cfg
= tools
.config
.load_session()
88 if session_cfg
["session"]["state"] == "RUNNING":
89 platformService
= IPlatform
.get_service(args
)
91 appsList
= platformService
.getAppsInfo()
93 print("Name: " + app
["name"])
94 print("packageName: " + app
["packageName"])
96 for cat
in app
["categories"]:
99 logging
.error("Failed to access IPlatform service")
101 logging
.error("WayDroid container is {}".format(
102 session_cfg
["session"]["state"]))
104 logging
.error("WayDroid session is stopped")
106 def showFullUI(args
):
108 platformService
= IPlatform
.get_service(args
)
110 platformService
.setprop("waydroid.active_apps", "Waydroid")
111 platformService
.settingsPutString(2, "policy_control", "null*")
112 # HACK: Refresh display contents
113 statusBarService
= IStatusBarService
.get_service(args
)
115 statusBarService
.expand()
117 statusBarService
.collapse()
118 maybeLaunchLater(args
, showFullUI
, justShow
)
122 platformService
= IPlatform
.get_service(args
)
124 ret
= platformService
.launchIntent(args
.ACTION
, args
.URI
)
127 pkg
= ret
if ret
!= "android" else "Waydroid"
128 platformService
.setprop("waydroid.active_apps", pkg
)
129 multiwin
= platformService
.getprop(
130 "persist.waydroid.multi_windows", "false")
131 if multiwin
== "false":
132 platformService
.settingsPutString(
133 2, "policy_control", "immersive.status=*")
135 platformService
.settingsPutString(
136 2, "policy_control", "immersive.full=*")
138 logging
.error("Failed to access IPlatform service")
139 maybeLaunchLater(args
, intent
, justLaunch
)