]>
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 from tools
.interfaces
import IUserMonitor
8 from tools
.interfaces
import IPlatform
12 def start(args
, session
, unlocked_cb
=None):
14 def makeDesktopFile(appInfo
):
16 for cat
in appInfo
["categories"]:
17 if cat
.strip() == "android.intent.category.LAUNCHER":
22 packageName
= appInfo
["packageName"]
24 desktop_file_path
= args
.apps_dir
+ "/waydroid." + packageName
+ ".desktop"
25 if not os
.path
.exists(desktop_file_path
):
26 lines
= ["[Desktop Entry]", "Type=Application"]
27 lines
.append("Name=" + appInfo
["name"])
28 lines
.append("Exec=waydroid app launch " + packageName
)
29 lines
.append("Icon=" + args
.waydroid_data
+ "/icons/" + packageName
+ ".png")
30 lines
.append("X-Purism-FormFactor=Workstation;Mobile;")
31 desktop_file
= open(desktop_file_path
, "w")
33 desktop_file
.write(line
+ "\n")
35 os
.chmod(desktop_file_path
, 0o755)
38 def makeWaydroidDesktopFile(hide
):
39 desktop_file_path
= args
.apps_dir
+ "/Waydroid.desktop"
40 if os
.path
.isfile(desktop_file_path
):
41 os
.remove(desktop_file_path
)
42 lines
= ["[Desktop Entry]", "Type=Application"]
43 lines
.append("Name=Waydroid")
44 lines
.append("Exec=waydroid show-full-ui")
45 lines
.append("X-Purism-FormFactor=Workstation;Mobile;")
47 lines
.append("NoDisplay=true")
48 lines
.append("Icon=waydroid")
49 desktop_file
= open(desktop_file_path
, "w")
51 desktop_file
.write(line
+ "\n")
53 os
.chmod(desktop_file_path
, 0o755)
55 def userUnlocked(uid
):
56 logging
.info("Android with user {} is ready".format(uid
))
57 args
.waydroid_data
= session
["waydroid_data"]
58 args
.apps_dir
= session
["xdg_data_home"] + \
61 platformService
= IPlatform
.get_service(args
)
63 if not os
.path
.exists(args
.apps_dir
):
64 os
.mkdir(args
.apps_dir
)
65 os
.chmod(args
.apps_dir
, 0o700)
66 appsList
= platformService
.getAppsInfo()
69 multiwin
= platformService
.getprop("persist.waydroid.multi_windows", "false")
70 if multiwin
== "false":
71 makeWaydroidDesktopFile(False)
73 makeWaydroidDesktopFile(True)
77 def packageStateChanged(mode
, packageName
, uid
):
78 platformService
= IPlatform
.get_service(args
)
80 appInfo
= platformService
.getAppInfo(packageName
)
81 desktop_file_path
= args
.apps_dir
+ "/waydroid." + packageName
+ ".desktop"
84 makeDesktopFile(appInfo
)
86 if os
.path
.isfile(desktop_file_path
):
87 os
.remove(desktop_file_path
)
89 if os
.path
.isfile(desktop_file_path
):
90 if makeDesktopFile(appInfo
) == -1:
91 os
.remove(desktop_file_path
)
95 IUserMonitor
.add_service(args
, userUnlocked
, packageStateChanged
)
99 args
.user_manager
= threading
.Thread(target
=service_thread
)
100 args
.user_manager
.start()
106 if args
.userMonitorLoop
:
107 args
.userMonitorLoop
.quit()
108 except AttributeError:
109 logging
.debug("UserMonitor service is not even started")