]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/services/user_manager.py
tools: Remove umask 0
[waydroid.git] / tools / services / user_manager.py
index b8771e7b28bdaa1c611305e887c3778803911796..f64ebcb4adb2e0261a839da67c9d169601f0cbbe 100644 (file)
@@ -7,8 +7,10 @@ import tools.config
 from tools.interfaces import IUserMonitor
 from tools.interfaces import IPlatform
 
+stopping = False
+
+def start(args, session, unlocked_cb=None):
 
-def start(args, unlocked_cb=None):
     def makeDesktopFile(appInfo):
         showApp = False
         for cat in appInfo["categories"]:
@@ -19,13 +21,13 @@ def start(args, unlocked_cb=None):
         
         packageName = appInfo["packageName"]
 
-        desktop_file_path = args.host_user + \
-            "/.local/share/applications/waydroid." + packageName + ".desktop"
+        desktop_file_path = args.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)
             lines.append("Icon=" + args.waydroid_data + "/icons/" + packageName + ".png")
+            lines.append("X-Purism-FormFactor=Workstation;Mobile;")
             desktop_file = open(desktop_file_path, "w")
             for line in lines:
                 desktop_file.write(line + "\n")
@@ -34,13 +36,13 @@ def start(args, unlocked_cb=None):
             return 0
 
     def makeWaydroidDesktopFile(hide):
-        desktop_file_path = args.host_user + \
-            "/.local/share/applications/Waydroid.desktop"
+        desktop_file_path = args.apps_dir + "/Waydroid.desktop"
         if os.path.isfile(desktop_file_path):
             os.remove(desktop_file_path)
         lines = ["[Desktop Entry]", "Type=Application"]
         lines.append("Name=Waydroid")
         lines.append("Exec=waydroid show-full-ui")
+        lines.append("X-Purism-FormFactor=Workstation;Mobile;")
         if hide:
             lines.append("NoDisplay=true")
         lines.append("Icon=" + tools.config.tools_src + "/data/AppIcon.png")
@@ -52,12 +54,15 @@ def start(args, unlocked_cb=None):
 
     def userUnlocked(uid):
         logging.info("Android with user {} is ready".format(uid))
-        session_cfg = tools.config.load_session()
-        args.waydroid_data = session_cfg["session"]["waydroid_data"]
-        args.host_user = session_cfg["session"]["host_user"]
+        args.waydroid_data = session["waydroid_data"]
+        args.apps_dir = session["xdg_data_home"] + \
+            "/applications/"
 
         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)
             appsList = platformService.getAppsInfo()
             for app in appsList:
                 makeDesktopFile(app)
@@ -67,14 +72,13 @@ def start(args, unlocked_cb=None):
             else:
                 makeWaydroidDesktopFile(True)
         if unlocked_cb:
-            unlocked_cb(args)
+            unlocked_cb()
 
     def packageStateChanged(mode, packageName, uid):
         platformService = IPlatform.get_service(args)
         if platformService:
             appInfo = platformService.getAppInfo(packageName)
-            desktop_file_path = args.host_user + \
-                "/.local/share/applications/" + packageName + ".desktop"
+            desktop_file_path = args.apps_dir + "/" + packageName + ".desktop"
             if mode == 0:
                 # Package added
                 makeDesktopFile(appInfo)
@@ -87,12 +91,17 @@ def start(args, unlocked_cb=None):
                         os.remove(desktop_file_path)
 
     def service_thread():
-        IUserMonitor.add_service(args, userUnlocked, packageStateChanged)
+        while not stopping:
+            IUserMonitor.add_service(args, userUnlocked, packageStateChanged)
 
+    global stopping
+    stopping = False
     args.user_manager = threading.Thread(target=service_thread)
     args.user_manager.start()
 
 def stop(args):
+    global stopping
+    stopping = True
     try:
         if args.userMonitorLoop:
             args.userMonitorLoop.quit()