Called beta from here rather than alpha. Every user-facing feature has now been seen doing
its actual job on a device, not just installing: Clock Studio and the reference checks
already were, and Notification rules, Hardware keys and Power inspector join them this
release. Per-app display and Text engine have not, and still say so on their own screens.
The badge is app-wide; the two exceptions are marked where they actually matter.
Issue #1, closed: hooks did not survive a reboot. The cause was Direct Boot. SystemUI starts
before the phone is unlocked, Android will not run an app that has not declared itself aware
of that, and this one had not, so the one lookup SystemUI makes at boot failed with "Unknown
authority" and the clock sat there plain until Restart System UI was tapped by hand. The
settings provider is Direct Boot aware now, and answers from a copy kept in device-protected
storage until the phone is unlocked, at which point it switches back to the live settings.
Measured on the test phone: SystemUI read its settings 95 seconds before the lock screen was
even dismissed, and the clock had its style the moment the screen turned on. The one thing
this does not yet cover is system_server itself, which still gets EACCES reading that
same copy directly and has to wait for the boot to finish before it can ask over the settings
provider instead; Power inspector, Notification rules and Hardware keys start with nothing
configured on a fresh boot until that catches up, usually within a minute.
Found while chasing that one: system_server was being handed the same package to hook
again every time something else in it loaded a class, nine times in thirteen minutes on the
test phone, and each pass installed every system_server feature's hooks on top of the last.
Nothing crashed. Every wakelock, alarm and notification just ran through one more copy of the
same hook than the time before, and the pile grew for as long as the phone stayed on. Each
process is only dispatched once now.
Settings changes to Notification rules and Hardware keys apply without a reboot. Saving hands
the change to system_server directly, and the screen says whether it was taken; if nothing
answers, it still applies at the next reboot exactly as before. A version of the module
already running in system_server still needs a reboot to pick up new code, same as always;
this only removes the reboot for its own settings.
Hold a volume key for half a second, screen off, something already playing, to skip a track.
A shorter press still changes the volume as it always did. This replaces the old behaviour,
where any press skipped the track and there was no way to just turn the volume down.
Hold power for half a second, screen off, to switch the torch on or off, with a short buzz to
say it worked since there is nothing to see. A shorter press still wakes or locks the phone
exactly as before; the two are told apart by how long the key is actually held, not guessed
at.
Power inspector has a screen now instead of only a log line. Open its card for the current
wakelock and alarm count, resolved to app names, fetched straight from system_server with a
Refresh button. A live pull during testing showed thousands of wakelocks against the system
itself and over a thousand alarms from Google Play Services, which is the ordinary shape of
that count on most phones.
A per-package rule that had actually saved correctly could look like it had reset the moment
you left the screen: "Applies to" always reopened on the * default, so a rule set for one
app was invisible until you retyped its exact package name. The screen now remembers the last
package you used per feature, and shows a row of chips for every package that already has
something set, so switching between them does not mean retyping anything.
The update checker was rebuilt. It used the platform's own dialog, which took its colours
from the system theme rather than anything in this app, and crammed three choices into one
row; it now uses the app's own card, the choices stacked, and every step of a check, not just
failures, is logged, which is what finally showed the old one usually was not broken, just
still inside its twelve hour cooldown.
The main screen and About were reorganised. Status and Required scope stay at the top,
Features underneath in a fixed order rather than reshuffling every time one gets verified,
and the built-in checks that exist to prove the engine itself works are now a single
collapsed row instead of always open. About leads with how to say something rather than
ending on it, and the four longer explanations are questions you open rather than paragraphs
you scroll past.
Still untested: per-app display and text engine have never been confirmed doing their job on
a phone.