Repository navigation
WaEnhancer Community 0.0.16
WaEnhancer Community 0.0.16
SHA-256: b1b46d467f28c0dd1197371637eace27673491bd185741073e18ec3f45b966fb
Changes since v0.0.15.
What's changed
- #84 feat(glass): reconstruct rim detail and add runtime GPU calibration
- #85 feat(glass): OneMate material and rising bubble bottom-bar indicator
- #88 fix(glass): bubble rest look, Z order, lens content and swipe sync
Full changelog
This section compiles the descriptions of the pull requests included in this release.
#84 — feat(glass): reconstruct rim detail and add runtime GPU calibration
Merged by contribution from @igorcv88.
Headers and Input Bar currently expose up to 85% raw detail at the V2 rim while the center is filtered. This PR adds runtime optical candidates that soften the transmitted rim detail and reconstruct it under the existing bounded warp, while retaining stable capture sources, recovery, native controls and the floating bar's established finish.
The explicit Apply reconstruction candidate (Clear off) action enables a detail prefilter, five-sample Jacobian footprint, linear numeric weighted PLUS composition, and a single directional lighting/contrast/encoding stage. Baseline remains the existing default; balanced and strong isolate transfer changes. No capture sharing, source-graph change or displacement-cap increase is introduced. The reconstruction budget conservatively counts 6 padded pixel-passes versus baseline 3; actual GPU/energy cost remains unmeasured.
The same APK includes raw/sharp/soft, beta, Jacobian/footprint, coverage, no-light and capture-generation diagnostics, plus a synthetic native-pixel GPU lab with PixelCopy PNG export. Private cached export state survives rotation. PNG metrics and CPU pixel goldens distinguish model arithmetic from real driver output. Activation and the S25 Ultra A0–A6 acceptance matrix are in the calibration guide; handoff and architecture are updated.
Validation:
- Full JDK21/Android SDK36
:app:testWhatsappDebugUnitTest :app:assembleWhatsappDebug: 436 tests in 60 suites, zero failures/errors/skips, APK built. - Legacy and corrected shaders pass glslangValidator after AGSL-to-GLSL adaptation; this does not prove Android AGSL compiler acceptance.
- Native PNG ESF/DC/invalid-ROI smoke checks and
git diff --checkpass. - Debug APK v2 signature and ZIP CRC verified; package
com.waenhancer.community, version1.8.0-alpha1/ code18001, SHA-256ab841647c25940b50f7bd0e016567f078065bd40a0adb39dbebbce37d67058c4.
No device visual A/B, driver readback, frame/GPU benchmark or energy test was performed here. The new candidate is review-ready implementation and calibration tooling; its final appearance, alpha/colour contract, HWUI PSF, native hint/icon contrast and performance still require the documented S25 Ultra acceptance. No workflow was dispatched and no merge was performed.
#85 — feat(glass): OneMate material and rising bubble bottom-bar indicator
Merged by contribution from @igorcv88.
Summary
Ports the glass from kalicyh/OneMate into the Community View runtime: one material for every surface, plus the bottom-bar bubble that rises when pressed.
OneMate has no licence file, so nothing was copied from it. Its liquid files are adapted from Kyant0/AndroidLiquidGlass (65ab177e) and compose-miuix-ui/miuix (6ef604ae), both Apache-2.0. Those are the sources ported here, and they are attributed in NOTICE.
Material (KyantLens), on all surfaces
- Saturation 1.5, then a 4dp blur. The Skia radius is solved so the blur matches miuix's sigma of 4dp·0.45.
- Then one AGSL pass:
- an inward edge lens with a circle profile, 24dp deep;
- a surface tint at 40% when the opacity slider is at Liquid's recommended value, clamped to 0.12–0.85;
- miuix's dual-peak
BloomStrokerim.
- Wiring:
- App panes and drawables get the effect through
LiveBackdrop(1:1 recording with a 3σ margin). - The bar and scroll button get it on their BlurViews through
LiquidLens.apply. LiveBudgetcharges 3 passes plus the margin.
- App panes and drawables get the effect through
- If the program is refused, surfaces fall back to the classic renderers.
- New public key
liquid_glass_renderer. The default isonemate. Setting it toclassicrestores the previous renderer and every optical switch exactly. There is a settings switch under Liquid Glass → Material.
Bar bubble (BubbleMotion + LiquidBubble)
- Replaces
LiquidMorphon the bar's Liquid style when OneMate is on. - Ports
DampedDragAnimation's springs:- pressing the selected tab makes the pill rise to 78/56, with lens depth, chromatic aberration 0.5, the rim and an inner shadow;
- the bar widens by 16dp while pressed;
- dragging follows the finger with velocity squash and a 4dp rubber band;
- releasing selects the tab the bubble settles on, through that tab's own click.
- Tapping another tab animates rise → travel → land.
- The bubble records only siblings drawn before it inside the capture-excluded bar host (the BlurView output and the tab row through an accent filter). It can therefore never be inside its own source.
Exclusions
- No tilt sensor and no
InteractiveHighlight. - WhatsApp's native active-indicator pill is not hidden. That needs device evidence.
- Details are in
docs/ONEMATE_MATERIAL_2026-10-12.md.
Validation
:app:testWhatsappDebugUnitTest :app:assembleWhatsappDebug(JDK 21, SDK 36): 453 tests, 62 suites, 0 failures.- New:
KyantLensTest,BubbleMotionTest, and a test that OneMate is the default. - Two existing tests that assert classic defaults now pin
classic.
- New:
tools/agsl_check.py: all three shaders passglslangValidator. This is a static check, not proof that Android's AGSL compiler or the GPU driver accepts them.- Debug APK built, debug-signed.
- No device test. The look over real WhatsApp content, frame cost while the bubble is pressed, and the touch-listener reflection still need checking on a phone. The checklist is in the audit doc.
🤖 Generated with Claude Code
https://claude.ai/code/session_0157emnK4gGDtGGT282rGFw8
Generated by Claude Code
#88 — fix(glass): bubble rest look, Z order, lens content and swipe sync
Merged by contribution from @igorcv88.
Follow-up to #85. Each fix below matches a defect seen in the user's screen recording of the OneMate bar.
| Symptom | Cause | Fix |
|---|---|---|
| Grey "white bubble" when the bubble stops | WhatsApp's Material active-indicator pill was still drawn, and OneMate's 10% white rest wash sat around it as a second pill | Hide the native indicator: setItemActiveIndicatorEnabled(false) by reflection, with a per-item fallback that hides the background view beside the icon. Also remove the items' press ripples while the bubble is installed; both are restored on removal. The rest wash is now the accent at 22%. |
| Two icons inside the bubble (one white, one green, moving apart) | The tab row's elevation sorted it above the bubble, so the real icons were drawn over the bubble's magnified copy | Keep the bubble's translationZ above the tab row's Z, re-asserted on every layout. The bubble has no outline, so it casts no shadow. |
| Solid green background inside the lens | The accent SRC_IN tint of the recorded row also filled the native pill and the ripple |
Fixed by the first row |
| Bubble lags a page swipe | It moved only after dispatchOnPageSelected and the page settling |
Hook androidx ViewPager.setScrollState and dispatchOnPageScrolled. During a user swipe the bubble follows the fractional page flat, without rising. Tab taps keep the rise → travel → land animation. |
Validation
:app:testWhatsappDebugUnitTest :app:assembleWhatsappDebug: 454 tests, 62 suites, 0 failures. The bubble tint test was updated and a page-follow test was added.tools/agsl_check.py: OK.- Not tested on a device. Two unknowns: whether the reflection method exists in the user's WhatsApp build (if not, the fallback has to find the indicator view), and whether the tabs pager overrides the hooked methods.
🤖 Generated with Claude Code
https://claude.ai/code/session_0157emnK4gGDtGGT282rGFw8
Generated by Claude Code