]>
glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/services/user_manager.py
1 # Copyright 2021 Erfan Abdi
2 # SPDX-License-Identifier: GPL-3.0-or-later
7 import tools
.helpers
.net
8 from tools
.interfaces
import IUserMonitor
9 from tools
.interfaces
import IPlatform
13 def start(args
, session
, unlocked_cb
=None):
14 waydroid_data
= session
["waydroid_data"]
15 apps_dir
= session
["xdg_data_home"] + "/applications/"
17 def makeDesktopFile(appInfo
):
22 for cat
in appInfo
["categories"]:
23 if cat
.strip() == "android.intent.category.LAUNCHER":
28 packageName
= appInfo
["packageName"]
30 desktop_file_path
= apps_dir
+ "/waydroid." + packageName
+ ".desktop"
31 if not os
.path
.exists(desktop_file_path
):
32 lines
= ["[Desktop Entry]", "Type=Application"]
33 lines
.append("Name=" + appInfo
["name"])
34 lines
.append("Exec=waydroid app launch " + packageName
)
35 lines
.append("Icon=" + waydroid_data
+ "/icons/" + packageName
+ ".png")
36 lines
.append("Categories=X-WayDroid-App;")
37 lines
.append("X-Purism-FormFactor=Workstation;Mobile;")
38 lines
.append("Actions=app_settings;")
39 lines
.append("[Desktop Action app_settings]")
40 lines
.append("Name=App Settings")
41 lines
.append("Exec=waydroid app intent android.settings.APPLICATION_DETAILS_SETTINGS package:" + packageName
)
42 desktop_file
= open(desktop_file_path
, "w")
44 desktop_file
.write(line
+ "\n")
46 os
.chmod(desktop_file_path
, 0o644)
49 def makeWaydroidDesktopFile(hide
):
50 desktop_file_path
= apps_dir
+ "/Waydroid.desktop"
51 if os
.path
.isfile(desktop_file_path
):
52 os
.remove(desktop_file_path
)
53 lines
= ["[Desktop Entry]", "Type=Application"]
54 lines
.append("Name=Waydroid")
55 lines
.append("Exec=waydroid show-full-ui")
56 lines
.append("Categories=X-WayDroid-App;")
57 lines
.append("X-Purism-FormFactor=Workstation;Mobile;")
59 lines
.append("NoDisplay=true")
60 lines
.append("Icon=waydroid")
61 desktop_file
= open(desktop_file_path
, "w")
63 desktop_file
.write(line
+ "\n")
65 os
.chmod(desktop_file_path
, 0o644)
67 def userUnlocked(uid
):
68 logging
.info("Android with user {} is ready".format(uid
))
70 tools
.helpers
.net
.adb_connect(args
)
72 platformService
= IPlatform
.get_service(args
)
74 if not os
.path
.exists(apps_dir
):
76 os
.chmod(apps_dir
, 0o700)
77 appsList
= platformService
.getAppsInfo()
80 multiwin
= platformService
.getprop("persist.waydroid.multi_windows", "false")
81 if multiwin
== "false":
82 makeWaydroidDesktopFile(False)
84 makeWaydroidDesktopFile(True)
88 def packageStateChanged(mode
, packageName
, uid
):
89 platformService
= IPlatform
.get_service(args
)
91 appInfo
= platformService
.getAppInfo(packageName
)
92 desktop_file_path
= apps_dir
+ "/waydroid." + packageName
+ ".desktop"
95 makeDesktopFile(appInfo
)
97 if os
.path
.isfile(desktop_file_path
):
98 os
.remove(desktop_file_path
)
100 if os
.path
.isfile(desktop_file_path
):
101 if makeDesktopFile(appInfo
) == -1:
102 os
.remove(desktop_file_path
)
104 def service_thread():
106 IUserMonitor
.add_service(args
, userUnlocked
, packageStateChanged
)
110 args
.user_manager
= threading
.Thread(target
=service_thread
)
111 args
.user_manager
.start()
117 if args
.userMonitorLoop
:
118 args
.userMonitorLoop
.quit()
119 except AttributeError:
120 logging
.debug("UserMonitor service is not even started")