]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/actions/app_manager.py
interfaces: Fix ServiceManager race condition in clients
[waydroid.git] / tools / actions / app_manager.py
index 47b2787c636f23d92c78db8206d44a850d5157b3..53234ac94314d1aee444abd3632322371a13a4e8 100644 (file)
@@ -15,6 +15,11 @@ def install(args):
     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)
@@ -23,7 +28,12 @@ def install(args):
         platformService = IPlatform.get_service(args)
         if platformService:
             platformService.installApp("/data/waydroid_tmp/base.apk")
+        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")
 
@@ -31,11 +41,21 @@ def remove(args):
     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("Failed to access IPlatform service")
+
+        if session["state"] == "FROZEN":
+            cm.Freeze()
     except dbus.DBusException:
         logging.error("WayDroid session is stopped")
 
@@ -73,6 +93,11 @@ def list(args):
     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()
@@ -84,6 +109,9 @@ def list(args):
                     print("\t" + cat)
         else:
             logging.error("Failed to access IPlatform service")
+
+        if session["state"] == "FROZEN":
+            cm.Freeze()
     except dbus.DBusException:
         logging.error("WayDroid session is stopped")
 
@@ -99,6 +127,8 @@ def showFullUI(args):
                 statusBarService.expand()
                 time.sleep(0.5)
                 statusBarService.collapse()
+        else:
+            logging.error("Failed to access IPlatform service")
     maybeLaunchLater(args, justShow)
 
 def intent(args):