- 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;")
- 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)
- 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("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." + packageName + ".desktop"
+ desktop_file = GLib.KeyFile()
+ try:
+ flags = GLib.KeyFileFlags.KEEP_COMMENTS | GLib.KeyFileFlags.KEEP_TRANSLATIONS
+ desktop_file.load_from_file(desktop_file_path, flags)
+ except:
+ pass
+
+ desktop_file.set_string("Desktop Entry", "Type", "Application")
+ desktop_file.set_string("Desktop Entry", "Name", appInfo["name"])
+ desktop_file.set_string("Desktop Entry", "Exec", f"waydroid app launch {packageName}")
+ desktop_file.set_string("Desktop Entry", "Icon", f"{waydroid_data}/icons/{packageName}.png")
+ glib_key_file_prepend_string_list(desktop_file, "Desktop Entry", "Categories", ["X-WayDroid-App"])
+ desktop_file.set_string_list("Desktop Entry", "X-Purism-FormFactor", ["Workstation", "Mobile"])
+ glib_key_file_prepend_string_list(desktop_file, "Desktop Entry", "Actions", ["app_settings"])
+ if packageName in system_apps and not glib_key_file_has_value(desktop_file, "Desktop Entry", "NoDisplay"):
+ desktop_file.set_boolean("Desktop Entry", "NoDisplay", True)
+
+ desktop_file.set_string("Desktop Action app_settings", "Name", "App Settings")
+ desktop_file.set_string("Desktop Action app_settings", "Exec", f"waydroid app intent android.settings.APPLICATION_DETAILS_SETTINGS package:{packageName}")
+ desktop_file.set_string("Desktop Action app_settings", "Icon", f"{waydroid_data}/icons/com.android.settings.png")
+
+ desktop_file.save_to_file(desktop_file_path)
+
+
+ def updateWaydroidDesktopFile(hide):
+ 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")
+ return
+
+ desktop_file = GLib.KeyFile()
+ try:
+ flags = GLib.KeyFileFlags.KEEP_COMMENTS | GLib.KeyFileFlags.KEEP_TRANSLATIONS
+ desktop_file.load_from_file(desktop_file_path, flags)
+ except:
+ pass
+
+ desktop_file.set_string("Desktop Entry", "Type", "Application")
+ desktop_file.set_string("Desktop Entry", "Name", "Waydroid")
+ desktop_file.set_string("Desktop Entry", "Exec", "waydroid show-full-ui")
+ glib_key_file_prepend_string_list(desktop_file, "Desktop Entry", "Categories", ["X-WayDroid-App", "Utility"])
+ desktop_file.set_string_list("Desktop Entry", "X-Purism-FormFactor", ["Workstation", "Mobile"])
+ desktop_file.set_string("Desktop Entry", "Icon", "waydroid")
+ desktop_file.set_boolean("Desktop Entry", "NoDisplay", hide)
+
+ desktop_file.save_to_file(desktop_file_path)