]>
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 with open(desktop_file_path
, "w") as desktop_file
:
33 desktop_file
.write(f
"""\
36 Name={appInfo["name"]}
37 Exec=waydroid app launch {packageName}
38 Icon={waydroid_data}/icons/{packageName}.png
39 Categories=X-WayDroid-App;
40 X-Purism-FormFactor=Workstation;Mobile;
43 [Desktop Action app_settings]
45 Exec=waydroid app intent android.settings.APPLICATION_DETAILS_SETTINGS package:{packageName}
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 with open(desktop_file_path
, "w") as desktop_file
:
54 desktop_file
.write(f
"""\
58 Exec=waydroid show-full-ui
59 Categories=X-WayDroid-App;
60 X-Purism-FormFactor=Workstation;Mobile;
62 NoDisplay={str(hide).lower()}
65 def userUnlocked(uid
):
66 logging
.info("Android with user {} is ready".format(uid
))
68 tools
.helpers
.net
.adb_connect(args
)
70 platformService
= IPlatform
.get_service(args
)
72 if not os
.path
.exists(apps_dir
):
73 os
.mkdir(apps_dir
, 0o700)
74 appsList
= platformService
.getAppsInfo()
77 multiwin
= platformService
.getprop("persist.waydroid.multi_windows", "false")
78 makeWaydroidDesktopFile(multiwin
== "true")
82 def packageStateChanged(mode
, packageName
, uid
):
83 platformService
= IPlatform
.get_service(args
)
85 appInfo
= platformService
.getAppInfo(packageName
)
86 desktop_file_path
= apps_dir
+ "/waydroid." + packageName
+ ".desktop"
89 makeDesktopFile(appInfo
)
91 if os
.path
.isfile(desktop_file_path
):
92 os
.remove(desktop_file_path
)
94 if os
.path
.isfile(desktop_file_path
):
95 if makeDesktopFile(appInfo
) == -1:
96 os
.remove(desktop_file_path
)
100 IUserMonitor
.add_service(args
, userUnlocked
, packageStateChanged
)
104 args
.user_manager
= threading
.Thread(target
=service_thread
)
105 args
.user_manager
.start()
111 if args
.userMonitorLoop
:
112 args
.userMonitorLoop
.quit()
113 except AttributeError:
114 logging
.debug("UserMonitor service is not even started")