Skip to content

[submission] hyperos-accessibility-fix #22

Description

@chickendrop89

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.
$ getconf CLK_TCK
100
$ 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions