Skip to content

WaEnhancer Community 0.0.16

Choose a tag to compare

@github-actions github-actions released this 14 Oct 17:21
4fea4e5

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 --check pass.
  • Debug APK v2 signature and ZIP CRC verified; package com.waenhancer.community, version 1.8.0-alpha1 / code 18001, SHA-256 ab841647c25940b50f7bd0e016567f078065bd40a0adb39dbebbce37d67058c4.

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 BloomStroke rim.
  • 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.
    • LiveBudget charges 3 passes plus the margin.
  • If the program is refused, surfaces fall back to the classic renderers.
  • New public key liquid_glass_renderer. The default is onemate. Setting it to classic restores the previous renderer and every optical switch exactly. There is a settings switch under Liquid Glass → Material.

Bar bubble (BubbleMotion + LiquidBubble)

  • Replaces LiquidMorph on 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.
  • tools/agsl_check.py: all three shaders pass glslangValidator. 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