3 seconds after the last keystroke was too slow for mobile UX.
800ms is the standard for search bars and still avoids firing on
every keystroke. The 'partial query' behavior is normal for search
(same as Spotify/Google) and not a regression.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The unified search (q=) was missing 'artists.profileArt' in the
JSON:API include parameter. Artist items in the included array had
no profileArt relationship data and no artworks, so
resolveArtworkId() always returned null → getCoverUrl(null) →
random Picsum images for all artist cards.
Fix: add artists.profileArt to HiFi.ts includeQ. Verified on device:
12/12 artist cards now show resources.tidal.com images, 0 Picsum.
Also fixes fm-logger.js path (public/js/ instead of js/) so Vite
copies it to dist/js/ as a static asset.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- android-service.js: bootstrap localStorage with 3 live HiFi streaming
instances (eu-central.monochrome.tf, us-west.monochrome.tf,
hifi-api.kennyy.com.br) so getStreamUrl() Tidal fallback works on
tracks missing from Qobuz catalog
- build-android.sh patch #53: replace defunct frankfurt-2 (504) with
the same 3 live instances in storage.js hardcoded fallback
- bump versionCode 7→8, versionName 2.4.0→2.4.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- build-android.sh: replace git pull with git archive|tar -x to extract upstream
web app files without requiring a common git ancestor. Histories are unrelated
(Android wrapper repo vs upstream web app repo), so git pull/merge would fail.
Stores last synced upstream SHA in .upstream-sync-sha to skip re-downloads.
- build-android.sh: update cleanup to remove all extracted upstream files instead
of reverting tracked files (they are not tracked in this repo).
- android/android-service.js: remove window.__tidalOriginExtension flag.
The upstream proxy-utils.js no longer uses this flag to bypass audio-proxy;
Capacitor WebView uses monochrome.tf origin (capacitor.config.ts) which already
satisfies Tidal proxy auth without the extension flag.
- android/fm-logger.js: same — remove __tidalOriginExtension.
- android/app/build.gradle: bump to versionCode 7 / versionName 2.4.0.
- android/app/src/main/res/xml/file_paths.xml: add missing FileProvider paths
file required by AndroidManifest.xml (was in upstream, missing from our repo).
- .gitignore: add build artifacts (android/.gradle, android/app/build, etc.)
and .upstream-sync-sha to gitignore.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.