]> glassweightruler.freedombox.rocks Git - waydroid.git/commitdiff
user_manager: Do not crash when install applications during boot
authorAlessandro Astone <ales.astone@gmail.com>
Wed, 29 Mar 2023 07:39:49 +0000 (09:39 +0200)
committerAlessandro Astone <ales.astone@gmail.com>
Wed, 29 Mar 2023 07:42:07 +0000 (09:42 +0200)
Even if we fail at getting appInfo, we will simply repeat the
operation in the user_unlocked callback

tools/interfaces/IPlatform.py
tools/services/user_manager.py

index 67f8a3ed67b2bddbd1170741c082af1f920ca66d..307508cf33fbc1e33b476a6ddf34d9c5e0a0abea 100644 (file)
@@ -71,11 +71,11 @@ class IPlatform:
         reply, status = self.client.transact_sync_reply(
             TRANSACTION_getAppsInfo, request)
 
         reply, status = self.client.transact_sync_reply(
             TRANSACTION_getAppsInfo, request)
 
+        apps_list = []
         if status:
             logging.error("Sending reply failed")
         else:
             reader = reply.init_reader()
         if status:
             logging.error("Sending reply failed")
         else:
             reader = reply.init_reader()
-            apps_list = []
             status, exception = reader.read_int32()
             if exception == 0:
                 status, apps = reader.read_int32()
             status, exception = reader.read_int32()
             if exception == 0:
                 status, apps = reader.read_int32()
index 3a3f17ee18fc7c95d20b4b2b6c8c2289677f2abf..56160353a2b8d62b8da2e6dc4089e3879cab8b60 100644 (file)
@@ -10,8 +10,13 @@ from tools.interfaces import IPlatform
 stopping = False
 
 def start(args, session, unlocked_cb=None):
 stopping = False
 
 def start(args, session, unlocked_cb=None):
+    waydroid_data = session["waydroid_data"]
+    apps_dir = session["xdg_data_home"] + "/applications/"
 
     def makeDesktopFile(appInfo):
 
     def makeDesktopFile(appInfo):
+        if appInfo is None:
+            return -1
+
         showApp = False
         for cat in appInfo["categories"]:
             if cat.strip() == "android.intent.category.LAUNCHER":
         showApp = False
         for cat in appInfo["categories"]:
             if cat.strip() == "android.intent.category.LAUNCHER":
@@ -21,12 +26,12 @@ def start(args, session, unlocked_cb=None):
 
         packageName = appInfo["packageName"]
 
 
         packageName = appInfo["packageName"]
 
-        desktop_file_path = args.apps_dir + "/waydroid." + packageName + ".desktop"
+        desktop_file_path = apps_dir + "/waydroid." + packageName + ".desktop"
         if not os.path.exists(desktop_file_path):
             lines = ["[Desktop Entry]", "Type=Application"]
             lines.append("Name=" + appInfo["name"])
             lines.append("Exec=waydroid app launch " + packageName)
         if not os.path.exists(desktop_file_path):
             lines = ["[Desktop Entry]", "Type=Application"]
             lines.append("Name=" + appInfo["name"])
             lines.append("Exec=waydroid app launch " + packageName)
-            lines.append("Icon=" + args.waydroid_data + "/icons/" + packageName + ".png")
+            lines.append("Icon=" + waydroid_data + "/icons/" + packageName + ".png")
             lines.append("Categories=X-WayDroid-App;")
             lines.append("X-Purism-FormFactor=Workstation;Mobile;")
             lines.append("Actions=app_settings;")
             lines.append("Categories=X-WayDroid-App;")
             lines.append("X-Purism-FormFactor=Workstation;Mobile;")
             lines.append("Actions=app_settings;")
@@ -41,7 +46,7 @@ def start(args, session, unlocked_cb=None):
             return 0
 
     def makeWaydroidDesktopFile(hide):
             return 0
 
     def makeWaydroidDesktopFile(hide):
-        desktop_file_path = args.apps_dir + "/Waydroid.desktop"
+        desktop_file_path = apps_dir + "/Waydroid.desktop"
         if os.path.isfile(desktop_file_path):
             os.remove(desktop_file_path)
         lines = ["[Desktop Entry]", "Type=Application"]
         if os.path.isfile(desktop_file_path):
             os.remove(desktop_file_path)
         lines = ["[Desktop Entry]", "Type=Application"]
@@ -60,15 +65,12 @@ def start(args, session, unlocked_cb=None):
 
     def userUnlocked(uid):
         logging.info("Android with user {} is ready".format(uid))
 
     def userUnlocked(uid):
         logging.info("Android with user {} is ready".format(uid))
-        args.waydroid_data = session["waydroid_data"]
-        args.apps_dir = session["xdg_data_home"] + \
-            "/applications/"
 
         platformService = IPlatform.get_service(args)
         if platformService:
 
         platformService = IPlatform.get_service(args)
         if platformService:
-            if not os.path.exists(args.apps_dir):
-                os.mkdir(args.apps_dir)
-                os.chmod(args.apps_dir, 0o700)
+            if not os.path.exists(apps_dir):
+                os.mkdir(apps_dir)
+                os.chmod(apps_dir, 0o700)
             appsList = platformService.getAppsInfo()
             for app in appsList:
                 makeDesktopFile(app)
             appsList = platformService.getAppsInfo()
             for app in appsList:
                 makeDesktopFile(app)
@@ -84,7 +86,7 @@ def start(args, session, unlocked_cb=None):
         platformService = IPlatform.get_service(args)
         if platformService:
             appInfo = platformService.getAppInfo(packageName)
         platformService = IPlatform.get_service(args)
         if platformService:
             appInfo = platformService.getAppInfo(packageName)
-            desktop_file_path = args.apps_dir + "/waydroid." + packageName + ".desktop"
+            desktop_file_path = apps_dir + "/waydroid." + packageName + ".desktop"
             if mode == 0:
                 # Package added
                 makeDesktopFile(appInfo)
             if mode == 0:
                 # Package added
                 makeDesktopFile(appInfo)