]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/actions/app_manager.py
app_manager: Add launch intent
[waydroid.git] / tools / actions / app_manager.py
index 7bb19a2f18962bc4dca8c69d3b6c5a87b0a89dfc..e0c3dda2223972dbd426dc59ea387f093bd5a701 100644 (file)
@@ -45,6 +45,25 @@ def remove(args):
     else:
         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:
+        logging.error("Starting waydroid session")
+        tools.actions.session_manager.start(args, retry)
+
 def launch(args):
     def justLaunch():
         platformService = IPlatform.get_service(args)
@@ -61,23 +80,7 @@ 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, launch, justLaunch)
 
 def list(args):
     if os.path.exists(tools.config.session_defaults["config_path"]):
@@ -101,13 +104,36 @@ def list(args):
         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()
+    maybeLaunchLater(args, showFullUI, 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, intent, justLaunch)