Skip to content

BitChord v2.2.4

Pre-release
Pre-release

Choose a tag to compare

@OreoMuncher45 OreoMuncher45 released this 18 Oct 22:26
· 54 commits to main since this release

The Apple Music shell's glass is now Convx's own engine, ported as source rather than reimplemented.

What changed

The shell was drawing its glass through an Echo-Music-derived configuration that had drifted from Convx's engine — about 280 lines apart in DrawBackdropModifier.kt alone — so the refraction and rim maths was not the one the UI was designed against. This replaces it with Convx's implementation, ported verbatim except for the package name:

  • ui/components/backdrop/** — 42 files, 5,141 lines. This includes the twelve that were missing entirely: GlassPool, the freeze and static-region backdrops, and the catalog widgets.
  • ui/components/GlassEffect.kt — GlassEffectConfig, liquidGlass, LocalAppBackdrop, and the rim/text colour resolution.
  • ui/theme/GlassTintTokens.kt — glass base, content, hero and pluck colour maths.
  • ui/theme/ConvxOuterDarkRim.kt, ui/theme/ColorHueless.kt.

The engine stays byte-identical to upstream so it can be re-synced by re-copying and rewriting the package. The four pieces of app-level context Convx keeps outside the engine are supplied in ConvxBackdropCompat.kt rather than by editing it.

LiquidGlass.kt keeps its one-argument Modifier.liquidGlass(shape) as a delegate, so the Apple tab bar and mini player pick up the ported glass without touching their call sites.

Two behaviour bugs fixed

  • Tab mapping was positional. Radio opened Library and Library opened Search. Apple's Search is detached from the capsule in its own layout, and BitChord's radio is its mood/genre station browse, so neither has a one-to-one legacy tab. Library now maps to Library; Search is reachable only through onSearchSelected.
  • The account button had no menu. Settings, Listen Together, Account Scrobbling, Discord and Spotify were unreachable from the Apple large title. It now opens them.

NOTICE records the vendored code and the adaptations, as GPL-3.0 §5(d) requires.

Verified

  • :app:compileDevDebugKotlin clean, no new warnings
  • :shared:jvmTest passes
  • :app:testDevDebugUnitTest — 1073 tests, 16 known pre-existing failures (GeniusTest, LocaleStringsTest), no regressions
  • tools/verify_ui_parity.py --strict — no gaps

The native build could not run on the commit host: the NDK's x86_64 clang segfaults under qemu on that aarch64 machine, which reproduces on the unmodified tree. The APK build is left to CI.

Still to come

This is the glass foundation, not the full Convx UI. Convx has 515 UI files and much of the rest is bound to its own service and data layer; the remaining port is screens, not rendering. The Apple shell's page bodies are still BitChord's own behind Convx chrome.


CI status on this tag

Workflow Result
Flow Debug APK (:app:assembleDevRelease, all 4 ABIs, minified) ✅ success
Check (:app:testDevDebugUnitTest) ❌ 16 pre-existing test failures
Android Release APK (signed prod) ❌ keystore error

Both failures predate this change and reproduce on v2.2.3:

  • Tests — 1073 tests completed, 16 failed, the same 16 (GeniusTest and LocaleStringsTest) as the unmodified tree. Not introduced here.
  • Signing — KeytoolException: Failed to read key from store "bitchord-release.jks": Tag number over 30 is not supported. The keystore comes from a repository secret and was not touched by this change; the same error failed v2.2.3's run of this workflow in the same way.

The APKs attached here are the ones from Flow Debug APK, which is the workflow that built v2.2.3's release assets. They are minified assembleDevRelease builds for arm64-v8a, armeabi-v7a, x86_64, and universal, verified as com.dev.bitchord versionCode 63 / versionName 2.2.4 with the ported glass classes present in the dex.

The keystore failure is worth fixing separately — it currently blocks every signed prod build on this repo.

  • Removed Herobrine