]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/actions/app_manager.py
Remove unused python imports
[waydroid.git] / tools / actions / app_manager.py
index 7bb19a2f18962bc4dca8c69d3b6c5a87b0a89dfc..ae9cb2550fe2a7cb0f9653b2d966c099954b8e5f 100644 (file)
@@ -6,45 +6,71 @@ 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, 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, launchNow, background=False)
+
 def launch(args):
     def justLaunch():
         platformService = IPlatform.get_service(args)
@@ -61,53 +87,67 @@ def launch(args):
                     2, "policy_control", "immersive.full=*")
         else:
             logging.error("Failed to access IPlatform service")
-
-    if os.path.exists(tools.config.session_defaults["config_path"]):
-        session_cfg = tools.config.load_session()
-
-        if session_cfg["session"]["state"] == "RUNNING":
-            justLaunch()
-        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()
-            justLaunch()
-        else:
-            logging.error("WayDroid container is {}".format(
-                session_cfg["session"]["state"]))
-    else:
-        logging.error("WayDroid session is stopped")
+    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):
-    platformService = IPlatform.get_service(args)
-    if platformService:
-        platformService.setprop("waydroid.active_apps", "Waydroid")
-        platformService.settingsPutString(2, "policy_control", "null*")
-        #HACK: Refresh display contents
-        statusBarService = IStatusBarService.get_service(args)
-        if statusBarService:
-            statusBarService.expand()
-            time.sleep(0.5)
-            statusBarService.collapse()
+    def justShow():
+        platformService = IPlatform.get_service(args)
+        if platformService:
+            platformService.setprop("waydroid.active_apps", "Waydroid")
+            platformService.settingsPutString(2, "policy_control", "null*")
+            # HACK: Refresh display contents
+            statusBarService = IStatusBarService.get_service(args)
+            if statusBarService:
+                statusBarService.expand()
+                time.sleep(0.5)
+                statusBarService.collapse()
+        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)