]>
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
11 def start(args
, unlocked_cb
=None):
13 def makeDesktopFile(appInfo
):
15 for cat
in appInfo
["categories"]:
16 if cat
.strip() == "android.intent.category.LAUNCHER":
21 packageName
= appInfo
["packageName"]
23 desktop_file_path
= args
.apps_dir
+ "/waydroid." + packageName
+ ".desktop"
25 if os
.path
.exists(desktop_file_path
):
26 with open(desktop_file_path
) as file:
27 filedata
= file.read()
28 filedata
= filedata
.replace(
29 "Icon=" + args
.old_waydroid_data
, "Icon=" + args
.waydroid_data
)
30 with open(desktop_file_path
, 'w') as file:
32 os
.chmod(desktop_file_path
, 0o755)
34 if not os
.path
.exists(desktop_file_path
):
35 lines
= ["[Desktop Entry]", "Type=Application"]
36 lines
.append("Name=" + appInfo
["name"])
37 lines
.append("Exec=waydroid app launch " + packageName
)
38 lines
.append("Icon=" + args
.waydroid_data
+ "/icons/" + packageName
+ ".png")
39 desktop_file
= open(desktop_file_path
, "w")
41 desktop_file
.write(line
+ "\n")
43 os
.chmod(desktop_file_path
, 0o755)
46 def makeWaydroidDesktopFile(hide
):
47 desktop_file_path
= args
.apps_dir
+ "/Waydroid.desktop"
48 if os
.path
.isfile(desktop_file_path
):
49 os
.remove(desktop_file_path
)
50 lines
= ["[Desktop Entry]", "Type=Application"]
51 lines
.append("Name=Waydroid")
52 lines
.append("Exec=waydroid show-full-ui")
54 lines
.append("NoDisplay=true")
55 lines
.append("Icon=" + tools
.config
.tools_src
+ "/data/AppIcon.png")
56 desktop_file
= open(desktop_file_path
, "w")
58 desktop_file
.write(line
+ "\n")
60 os
.chmod(desktop_file_path
, 0o755)
62 def userUnlocked(uid
):
63 logging
.info("Android with user {} is ready".format(uid
))
64 session_cfg
= tools
.config
.load_session()
65 args
.waydroid_data
= session_cfg
["session"]["waydroid_data"]
67 args
.old_waydroid_data
= session_cfg
["session"]["host_user"] + \
69 args
.apps_dir
= session_cfg
["session"]["xdg_data_home"] + \
72 platformService
= IPlatform
.get_service(args
)
74 if not os
.path
.exists(args
.apps_dir
):
75 os
.mkdir(args
.apps_dir
)
76 os
.chmod(args
.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
= args
.apps_dir
+ "/" + 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():
105 IUserMonitor
.add_service(args
, userUnlocked
, packageStateChanged
)
107 args
.user_manager
= threading
.Thread(target
=service_thread
)
108 args
.user_manager
.start()
112 if args
.userMonitorLoop
:
113 args
.userMonitorLoop
.quit()
114 except AttributeError:
115 logging
.debug("UserMonitor service is not even started")