Repository navigation
BitChord v2.2.4
Pre-releaseThe 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:compileDevDebugKotlinclean, no new warnings:shared:jvmTestpasses:app:testDevDebugUnitTest— 1073 tests, 16 known pre-existing failures (GeniusTest,LocaleStringsTest), no regressionstools/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 (GeniusTestandLocaleStringsTest) 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