X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/f11e373fdf34b810fc99c0f1abcb6bb093b119e6..HEAD:/tools/actions/app_manager.py?ds=sidebyside diff --git a/tools/actions/app_manager.py b/tools/actions/app_manager.py index cd66ab5..ae9cb25 100644 --- a/tools/actions/app_manager.py +++ b/tools/actions/app_manager.py @@ -6,63 +6,70 @@ import shutil import time import tools.config import tools.helpers.props +import tools.helpers.ipc from tools.interfaces import IPlatform from tools.interfaces import IStatusBarService +import dbus def install(args): - if os.path.exists(tools.config.session_defaults["config_path"]): - session_cfg = tools.config.load_session() - if session_cfg["session"]["state"] == "RUNNING": - tmp_dir = session_cfg["session"]["waydroid_data"] + "/waydroid_tmp" - if not os.path.exists(tmp_dir): - os.makedirs(tmp_dir) - - shutil.copyfile(args.PACKAGE, tmp_dir + "/base.apk") - platformService = IPlatform.get_service(args) - if platformService: - platformService.installApp("/data/waydroid_tmp/base.apk") - shutil.rmtree(tmp_dir) + try: + tools.helpers.ipc.DBusSessionService() + + cm = tools.helpers.ipc.DBusContainerService() + session = cm.GetSession() + if session["state"] == "FROZEN": + cm.Unfreeze() + + tmp_dir = tools.config.session_defaults["waydroid_data"] + "/waydroid_tmp" + if not os.path.exists(tmp_dir): + os.makedirs(tmp_dir) + + shutil.copyfile(args.PACKAGE, tmp_dir + "/base.apk") + platformService = IPlatform.get_service(args) + if platformService: + platformService.installApp("/data/waydroid_tmp/base.apk") else: - logging.error("WayDroid container is {}".format( - session_cfg["session"]["state"])) - else: + logging.error("Failed to access IPlatform service") + os.remove(tmp_dir + "/base.apk") + + if session["state"] == "FROZEN": + cm.Freeze() + except (dbus.DBusException, KeyError): logging.error("WayDroid session is stopped") def remove(args): - if os.path.exists(tools.config.session_defaults["config_path"]): - session_cfg = tools.config.load_session() - if session_cfg["session"]["state"] == "RUNNING": - platformService = IPlatform.get_service(args) - if platformService: - ret = platformService.removeApp(args.PACKAGE) - if ret != 0: - logging.error("Failed to uninstall package: {}".format(args.PACKAGE)) - else: - logging.error("Failed to access IPlatform service") + try: + tools.helpers.ipc.DBusSessionService() + + cm = tools.helpers.ipc.DBusContainerService() + session = cm.GetSession() + if session["state"] == "FROZEN": + cm.Unfreeze() + + platformService = IPlatform.get_service(args) + if platformService: + ret = platformService.removeApp(args.PACKAGE) + if ret != 0: + logging.error("Failed to uninstall package: {}".format(args.PACKAGE)) else: - logging.error("WayDroid container is {}".format( - session_cfg["session"]["state"])) - else: + logging.error("Failed to access IPlatform service") + + if session["state"] == "FROZEN": + cm.Freeze() + except dbus.DBusException: logging.error("WayDroid session is stopped") -def maybeLaunchLater(args, retry, launchNow): - if os.path.exists(tools.config.session_defaults["config_path"]): - session_cfg = tools.config.load_session() - - if session_cfg["session"]["state"] == "RUNNING": - launchNow() - elif session_cfg["session"]["state"] == "FROZEN" or session_cfg["session"]["state"] == "UNFREEZE": - session_cfg["session"]["state"] = "UNFREEZE" - tools.config.save_session(session_cfg) - while session_cfg["session"]["state"] != "RUNNING": - session_cfg = tools.config.load_session() - launchNow() - else: - logging.error("WayDroid container is {}".format( - session_cfg["session"]["state"])) - else: +def maybeLaunchLater(args, launchNow): + try: + tools.helpers.ipc.DBusSessionService() + try: + tools.helpers.ipc.DBusContainerService().Unfreeze() + except: + logging.error("Failed to unfreeze container. Trying to launch anyways...") + launchNow() + except dbus.DBusException: logging.error("Starting waydroid session") - tools.actions.session_manager.start(args, retry) + tools.actions.session_manager.start(args, launchNow, background=False) def launch(args): def justLaunch(): @@ -80,27 +87,32 @@ def launch(args): 2, "policy_control", "immersive.full=*") else: logging.error("Failed to access IPlatform service") - maybeLaunchLater(args, launch, justLaunch) + maybeLaunchLater(args, justLaunch) def list(args): - if os.path.exists(tools.config.session_defaults["config_path"]): - session_cfg = tools.config.load_session() - if session_cfg["session"]["state"] == "RUNNING": - platformService = IPlatform.get_service(args) - if platformService: - appsList = platformService.getAppsInfo() - for app in appsList: - print("Name: " + app["name"]) - print("packageName: " + app["packageName"]) - print("categories:") - for cat in app["categories"]: - print("\t" + cat) - else: - logging.error("Failed to access IPlatform service") + try: + tools.helpers.ipc.DBusSessionService() + + cm = tools.helpers.ipc.DBusContainerService() + session = cm.GetSession() + if session["state"] == "FROZEN": + cm.Unfreeze() + + platformService = IPlatform.get_service(args) + if platformService: + appsList = platformService.getAppsInfo() + for app in appsList: + print("Name: " + app["name"]) + print("packageName: " + app["packageName"]) + print("categories:") + for cat in app["categories"]: + print("\t" + cat) else: - logging.error("WayDroid container is {}".format( - session_cfg["session"]["state"])) - else: + logging.error("Failed to access IPlatform service") + + if session["state"] == "FROZEN": + cm.Freeze() + except dbus.DBusException: logging.error("WayDroid session is stopped") def showFullUI(args): @@ -115,4 +127,27 @@ def showFullUI(args): statusBarService.expand() time.sleep(0.5) statusBarService.collapse() - maybeLaunchLater(args, showFullUI, justShow) + else: + logging.error("Failed to access IPlatform service") + maybeLaunchLater(args, justShow) + +def intent(args): + def justLaunch(): + platformService = IPlatform.get_service(args) + if platformService: + ret = platformService.launchIntent(args.ACTION, args.URI) + if ret == "": + return + pkg = ret if ret != "android" else "Waydroid" + platformService.setprop("waydroid.active_apps", pkg) + multiwin = platformService.getprop( + "persist.waydroid.multi_windows", "false") + if multiwin == "false": + platformService.settingsPutString( + 2, "policy_control", "immersive.status=*") + else: + platformService.settingsPutString( + 2, "policy_control", "immersive.full=*") + else: + logging.error("Failed to access IPlatform service") + maybeLaunchLater(args, justLaunch)