Skip to content

2.2.0: liquid glass UI, modem patch on Home, fixes for #6 #7 #13 #14 #15 - #17

Merged
barrylk merged 3 commits into
mainfrom
feat/v22-glass-and-issue-fixes
Oct 8, 2026
Merged

barrylk merged 3 commits into
mainfrom
feat/v22-glass-and-issue-fixes

Conversation

@barrylk

@barrylk barrylk commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Summary

Version 2.2.0: a liquid-glass UI, the 5G regional modem patch moved to the top of Setup for root users, fixes for the open issues, and a set of bugs found in review.

Overlaps #16. Both PRs change the panel design and put the modem patch on Home. They take different approaches: #16 adds the haze library for real backdrop blur, while this PR uses no new dependency. Merge one and close the other. This branch was compiled locally, with unit tests run and the debug and release APKs assembled.

Issues fixed

  • Closes App crashes when applying any setting #7, closes settings are unchangeable #14 — Android 17 QPR2 crash and "did not accept this change".
    • The Shizuku broker called stopDelegateShellPermissionIdentity(), which throws NoSuchMethodError on QPR2. The override had already applied, then the app process died.
    • The cleanup now catches LinkageError, falls back to reflection, and relies on instrumentation teardown as a last resort. The broker no longer throws on the app's main thread.
    • startInstrumentation is async, so the immediate read-back raced the write. Callers off the main thread now wait on an IInstrumentationWatcher and see the broker's real error, and applyAndConfirm polls the read-back for about 2 s before declaring a rejection. A new test covers this.
  • Closes Regional modem patch fails on Pixel 9 Pro XL (Android 15): SecurityException "Unable to find app for caller" in installRegionalModemPatch #15 — modem patch failed with "Unable to find app for caller". SQLiteDatabase.openDatabase in the root service triggers a Settings.Global lookup through an app identity it doesn't have. The service now calls SQLiteCompatibilityWalFlags.init(null) first, with a HiddenApiBypass fallback. Install results and errors are now shown on the patch card instead of failing silently.
  • Closes Modem patch using KernelSU mountify #13 — KernelSU and APatch. The installer detects Magisk, ksud or apd:
    • It writes the SELinux read rule for the service's actual domain, using ksud sepolicy patch on KernelSU.
    • It only applies the magisk_file label under Magisk.
    • The KernelSU success message mentions that a mounting metamodule (mountify or meta-overlayfs) is needed.
    • The card shows which manager it found.
  • Closes Apply on boot. #6 — apply on boot for Shizuku. An opt-in "Reapply after reboot" switch on SIM Config saves changes per SIM, the same way Root mode does. A boot worker waits for Shizuku with backoff and reapplies them.

UI

  • New Modifier.liquidGlass: translucent body, a specular highlight in the top corner, a gradient rim with a coloured lower edge, and a top sheen. It sits over a backdrop lit by three large soft colour pools. Separate light and dark tokens, and no elevation shadows, which show through translucent panes as a grey smudge.
  • A floating glass tab bar where the highlight slides between tabs. A System / Light / Dark switch in the top bar, saved between launches.
  • Modem patch on Home. RegionalPatchCard and RegionalPatchViewModel lead the Setup screen once root is granted. The card shows its prerequisites (Tensor, Magisk/KSU, Modem DB), has one install button, and shrinks to one line once active. The same card replaces the old section on Bands.

Other fixes

  • Root mode no longer passes the access check on a Shizuku grant (ReadinessRules.hasAccess).
  • NSA 5G counts as connected. Patch states "pending reboot" and "removal pending" are now warnings, not PASS. "Revalidate" is offered only before the overlay goes live, because after reboot the installer would read the patched DB as stock.
  • Busy and "running" flags in Bands and Field Test no longer survive rotation after their work is cancelled, which used to leave buttons disabled.
  • Setup, Network, Field Test and the diagnostics pages no longer get stuck on "no SIM" when the SIMs load late or one disappears.
  • The overview page's system calls moved off the main thread. Leaking Shizuku permission listeners fixed.
  • The root boot-reapply worker now adds the hidden-API exemptions it was missing.

Test plan

  • :app:testDebugUnitTest passes: 28 tests, including new ReadinessRulesTest and ControlStateTest.waitsForAValueThatLandsLate
  • :app:assembleDebug and :app:assembleRelease (R8) build locally
  • Android 17 QPR2 + Shizuku: toggle SIM Config switches; no crash, and switches settle on the new value
  • Root + Magisk: patch card appears on Setup → install → confirm → reboot → card shows "Patch active"
  • KernelSU + mountify: patch installs and loads after reboot
  • Pixel 9 Pro XL / Android 15 (Regional modem patch fails on Pixel 9 Pro XL (Android 15): SecurityException "Unable to find app for caller" in installRegionalModemPatch #15): install succeeds, or the card shows the error
  • Shizuku + "Reapply after reboot": change a setting, reboot, confirm it is reapplied once Shizuku starts
  • Visual check of light and dark on a device (not screenshot-tested; Paparazzi can't load the hidden-API android.jar)

🤖 Generated with Claude Code

barrylk and others added 2 commits October 8, 2026 15:48
UI
- Liquid-glass design system (Modifier.liquidGlass): translucent panes over
  a backdrop lit by soft colour pools, specular rim and bloom, light and dark.
- Floating glass tab bar with a sliding lens; in-app System/Light/Dark switch.
- The 5G regional modem patch is the first card on Setup once root is
  granted (shared RegionalPatchCard + RegionalPatchViewModel, also on Bands).
  Every install goes through the confirmation dialog; results are shown.

Issues
- #7, #14: Android 17 QPR2 broker crash on stopDelegateShellPermissionIdentity;
  the broker no longer throws on the app's main thread, reports errors back
  through an instrumentation watcher, and read-back waits for the value to
  settle instead of racing the async write.
- #15: pre-initialise SQLiteCompatibilityWalFlags in the root service so
  opening cfg.db no longer needs an app identity.
- #13: KernelSU and APatch support for the regional patch installer.
- #6: opt-in "Reapply after reboot" for Shizuku mode.

Fixes
- Root mode no longer passes the access check via a Shizuku grant.
- NSA 5G counts as connected; pending-reboot/removal patch states are WARN.
- Revalidate only offered before the overlay is live.
- Busy/running flags no longer survive rotation with their work cancelled.
- Pages no longer stick on "no SIM" when subscriptions load late.
- Overview binder calls moved off the main thread; Shizuku listener leaks fixed.
- Boot reapply workers add hidden-API exemptions they previously lacked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@barrylk
barrylk merged commit 965d96a into main Oct 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant