Name
HyperOS accessibility fix (hyperos-accessibility-fix)
Description
A module to stop HyperOS from randomly disabling accessibility services.
What's happening
- On Android, when an accessibility app is force-stopped via
ActivityManager, the accessibility permission of the app is stripped.
- And HyperOS is hardcoded to trigger a force-stop (not a kill) on
certain events like when the user is entering Ultra Battery Saver (LockScreenClean),
and others:
<ultra battery saver was enabled>
I ActivityManager: Force stopping com.urbandroid.lux appid=10415 user=0: LockScreenClean
D ActivityManager: Force removing proc 8855:com.urbandroid.lux:background/u0a415 (com.urbandroid.lux:background/10415)
How it works
- This module installs a background script that monitors the
logcat event stream for force stop events (Force stopping.*($PKG_PATTERN), etc)
with minimal system overhead.
- On boot, it checks what accessibility services are enabled, and writes them to
a11y_watchlist.txt. It also listens for signs of manual
configuration changes (done by user in settings) and updates the watchlist automatically.
- When a forced stop of a watched service is detected, the script performs a verification of enabled accessibility services against the local
a11y_watchlist.txt. And when the list doesn't match up, the changes (done by system_server) are reverted instantly.
- This script also runs at
OOM score -800 to prevent LMKD from killing it in the background. And if it still gets killed under memory pressure,
another (monitor) script (that runs at -900) is running in background to restart it (provided it wasn't killed aswell lol)
Do they really have minimal system overhead?
- After 2 days of uptime, the scripts used only ~160 seconds of CPU time (
USER_HZ=100) in total since they started.
- These background scripts have negligible effect on performance and they won't slow the system down.
$ cat /proc/7562/stat
7562 (sh) S 1 7562 7562 0 -1 4194560 1303 11306 82 0 3 181 7 25 20 0 1 0 4514 11082203136 720 18446744073709551615 391135674368 391135918392 549159233360 0 0 0 0 6 1208083705 1 0 0 17 0 0 0 0 0 0 391135936512 391135937152 391696969728 549159237033 549159237184 549159237184 549159243753 0
$ cat /proc/7563/stat
7563 (sh) S 1 7563 7563 0 -1 4194304 73566 952234 7750 8335 63 893 1169 3535 20 0 1 0 4515 11065425920 825 18446744073709551615 401645289472 401645533496 549315373280 0 0 0 0 6 1208083705 1 0 0 17 3 0 0 0 0 0 401645551616 401645552256 402234515456 549315376568 549315376704 549315376704 549315383273 0
$ uptime
02:20:46 up 2 days, 6:37, 0 users, load average: 24.01, 11.73, 8.87
Module repository link
https://github.com/chickendrop89/hyperos-accessibility-fix
Name
HyperOS accessibility fix (hyperos-accessibility-fix)
Description
A module to stop HyperOS from randomly disabling accessibility services.
What's happening
ActivityManager, the accessibility permission of the app is stripped.certain events like when the user is entering Ultra Battery Saver (
LockScreenClean),and others:
How it works
logcateventstream for force stop events (Force stopping.*($PKG_PATTERN), etc)with minimal system overhead.
a11y_watchlist.txt. It also listens for signs of manualconfiguration changes (done by user in settings) and updates the watchlist automatically.
a11y_watchlist.txt. And when the list doesn't match up, the changes (done bysystem_server) are reverted instantly.OOMscore-800to preventLMKDfrom killing it in the background. And if it still gets killed under memory pressure,another (monitor) script (that runs at
-900) is running in background to restart it (provided it wasn't killed aswell lol)Do they really have minimal system overhead?
USER_HZ=100) in total since they started.Module repository link
https://github.com/chickendrop89/hyperos-accessibility-fix