X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/2c9844213907267973e827d988dc03c2bef18efe..d8c700bbb8b7bd992b9fe9b43de8a2f3d8e8587f:/tools/services/user_manager.py diff --git a/tools/services/user_manager.py b/tools/services/user_manager.py index 8ffb952..98cda79 100644 --- a/tools/services/user_manager.py +++ b/tools/services/user_manager.py @@ -4,79 +4,85 @@ import logging import os import threading import tools.config +import tools.helpers.net from tools.interfaces import IUserMonitor from tools.interfaces import IPlatform stopping = False def start(args, session, unlocked_cb=None): + waydroid_data = session["waydroid_data"] + apps_dir = session["xdg_data_home"] + "/applications/" def makeDesktopFile(appInfo): + if appInfo is None: + return -1 + showApp = False for cat in appInfo["categories"]: if cat.strip() == "android.intent.category.LAUNCHER": showApp = True if not showApp: return -1 - + 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) - lines.append("Icon=" + args.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("[Desktop Action app_settings]") - lines.append("Name=App Settings") - lines.append("Exec=waydroid app intent android.settings.APPLICATION_DETAILS_SETTINGS package:" + packageName) - desktop_file = open(desktop_file_path, "w") - for line in lines: - desktop_file.write(line + "\n") - desktop_file.close() - os.chmod(desktop_file_path, 0o755) + with open(desktop_file_path, "w") as desktop_file: + desktop_file.write(f"""\ +[Desktop Entry] +Type=Application +Name={appInfo["name"]} +Exec=waydroid app launch {packageName} +Icon={waydroid_data}/icons/{packageName}.png +Categories=X-WayDroid-App; +X-Purism-FormFactor=Workstation;Mobile; +Actions=app_settings; + +[Desktop Action app_settings] +Name=App Settings +Exec=waydroid app intent android.settings.APPLICATION_DETAILS_SETTINGS package:{packageName} +Icon={waydroid_data}/icons/com.android.settings.png +""") return 0 def makeWaydroidDesktopFile(hide): - 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("Categories=X-WayDroid-App;") - lines.append("X-Purism-FormFactor=Workstation;Mobile;") - if hide: - lines.append("NoDisplay=true") - lines.append("Icon=waydroid") - desktop_file = open(desktop_file_path, "w") - for line in lines: - desktop_file.write(line + "\n") - desktop_file.close() - os.chmod(desktop_file_path, 0o755) + desktop_file_path = apps_dir + "/Waydroid.desktop" + # If the user has set the desktop file as read-only, we won't replace it + if os.path.isfile(desktop_file_path) and not os.access(desktop_file_path, os.W_OK): + logging.info(f"Desktop file '{desktop_file_path}' is not writeable, not updating it") + else: + if os.path.isfile(desktop_file_path): + os.remove(desktop_file_path) + with open(desktop_file_path, "w") as desktop_file: + desktop_file.write(f"""\ +[Desktop Entry] +Type=Application +Name=Waydroid +Exec=waydroid show-full-ui +Categories=X-WayDroid-App;Utility; +X-Purism-FormFactor=Workstation;Mobile; +Icon=waydroid +NoDisplay={str(hide).lower()} +""") def userUnlocked(uid): + cfg = tools.config.load(args) logging.info("Android with user {} is ready".format(uid)) - args.waydroid_data = session["waydroid_data"] - args.apps_dir = session["xdg_data_home"] + \ - "/applications/" + + if cfg["waydroid"]["auto_adb"] == "True": + tools.helpers.net.adb_connect(args) 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, 0o700) appsList = platformService.getAppsInfo() for app in appsList: makeDesktopFile(app) multiwin = platformService.getprop("persist.waydroid.multi_windows", "false") - if multiwin == "false": - makeWaydroidDesktopFile(False) - else: - makeWaydroidDesktopFile(True) + makeWaydroidDesktopFile(multiwin == "true") if unlocked_cb: unlocked_cb() @@ -84,7 +90,7 @@ def start(args, session, unlocked_cb=None): 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)