X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/1f0393876d891d0e32a995d0bf7259cc6505afdc..574405d:/tools/services/user_manager.py?ds=sidebyside diff --git a/tools/services/user_manager.py b/tools/services/user_manager.py index 41fea83..5e03d25 100644 --- a/tools/services/user_manager.py +++ b/tools/services/user_manager.py @@ -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): def makeDesktopFile(appInfo): showApp = False for cat in appInfo["categories"]: @@ -19,13 +21,13 @@ def start(args): packageName = appInfo["packageName"] - desktop_file_path = args.host_user + \ - "/.local/share/applications/" + 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") @@ -33,46 +35,50 @@ def start(args): os.chmod(desktop_file_path, 0o755) return 0 - def makeWaydroidDesktopFile(): - desktop_file_path = args.host_user + \ - "/.local/share/applications/Waydroid.desktop" - if not os.path.exists(desktop_file_path): - lines = ["[Desktop Entry]", "Type=Application"] - lines.append("Name=Waydroid") - lines.append("Exec=waydroid show-full-ui") - lines.append("Icon=" + tools.config.tools_src + "/data/AppIcon.png") - 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) + 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("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) 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) multiwin = platformService.getprop("persist.waydroid.multi_windows", "false") if multiwin == "false": - makeWaydroidDesktopFile() + makeWaydroidDesktopFile(False) else: - desktop_file_path = args.host_user + \ - "/.local/share/applications/Waydroid.desktop" - if os.path.isfile(desktop_file_path): - os.remove(desktop_file_path) + makeWaydroidDesktopFile(True) + if unlocked_cb: + 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 + "/waydroid." + packageName + ".desktop" if mode == 0: # Package added makeDesktopFile(appInfo) @@ -85,12 +91,17 @@ def start(args): 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()