Root cause: Capacitor WebView used Origin: https://localhost, which
Tidal API proxies and CDN reject with 403. Changed the WebView
hostname to monochrome.tf so the Origin matches what the upstream
infrastructure expects.
Changes:
- capacitor.config.ts: server.hostname = monochrome.tf (was localhost)
- TidalWebViewClient.java: intercepts Tidal CDN audio requests and
re-sends with Origin: https://listen.tidal.com (same as the Chrome
extension "Monochrome Tidal Bypass")
- android-service.js: sets window.__tidalOriginExtension = true so
upstream proxy-utils.js uses direct CDN URLs instead of the broken
audio-proxy.binimum.org
- fm-logger.js: blocks SW registration before any other script loads
- build-android.sh: forces shouldTryNative=true for streaming so
HiFiClient is tried before proxy instances, adds frankfurt-2 to
streaming fallback, enriches search albums from track data
Search:
- Reverted debounce to upstream 3000ms (our 700ms caused partial
results during typing)
- New patch: enrich albums missing artist name and cover art from
track data in the same search response (v2 API workaround)
UI:
- Removed pull-to-refresh (was triggering false reloads when
scrolling up on album/artist pages)
- Restored scroll-to-top on navigation (pushState/popstate resets
.main-content.scrollTop without touching window.scrollTo)
Upstream sync: b6b425a (latest)
- Auto-pause playback when Bluetooth disconnects (ACTION_AUDIO_BECOMING_NOISY)
- Show Android virtual navigation bar instead of hiding it in immersive mode
- Navigation bar color matches app theme (#1a1a1a)
- Capacitor edge-to-edge margin adjustment enabled
- Synced with 237 new upstream commits (visualizer, lyrics toggle, reviews, fixes)
Upstream now ships android/ with splash.png. Capacitor sync generates
splash.xml in the same drawable dir, causing Gradle to fail with
"Duplicate resources". Build script now removes splash.png when both exist.