This website requires JavaScript.
ee6305f525
refactor(android): extract shared CoverTile from Album/Artist/Playlist cards
bvandeusen and Claude Opus 4.7
2026-05-30 02:31:32 -04:00
37887107ee
fix(android): pin Slider inactiveTrackColor to surfaceVariant (parity)
bvandeusen and Claude Opus 4.7
2026-05-30 02:31:16 -04:00
5c7e659116
refactor(android): hoist resolveServerImageUrl to shared/ServerUrls.kt as resolveServerUrl
bvandeusen and Claude Opus 4.7
2026-05-30 01:09:07 -04:00
c720dff310
fix(android): resolve relative stream_url before handing to Media3
bvandeusen and Claude Opus 4.7
2026-05-30 00:59:07 -04:00
6967d62c09
fix(android): reconcile playlist cache to prune stale system-playlist UUIDs
bvandeusen and Claude Opus 4.7
2026-05-30 00:02:20 -04:00
7bed0c226b
refactor(android): migrate AlbumDetail TrackRow to shared TrackRow
bvandeusen
2026-05-29 22:48:06 -04:00
6582d7699e
refactor(android): migrate History/Liked/Search/Playlist rows to shared TrackRow
bvandeusen
2026-05-29 22:44:09 -04:00
bbd483603d
refactor(android): add shared slot-based TrackRow
bvandeusen
2026-05-29 21:40:38 -04:00
dfb7245db8
refactor(android): route remaining covers (TrackCoverThumb, mini, now-playing) through ServerImage
bvandeusen
2026-05-29 21:36:41 -04:00
3e35127284
refactor(android): use shared formatDuration + ms/sec conversions
bvandeusen
2026-05-29 15:46:56 -04:00
cf0ccd1f90
refactor(android): route all cover getters through albumCoverPath
bvandeusen
2026-05-29 15:33:32 -04:00
0741ba31b3
refactor(android): add shared albumCoverPath cover-URL builder
bvandeusen
2026-05-29 14:39:31 -04:00
4015fb145d
refactor(android): add shared formatDuration + ms/sec conversion helpers
bvandeusen
2026-05-29 14:38:52 -04:00
d7dda2fcef
fix(android): derive artist tile cover from first cached album
bvandeusen and Claude Opus 4.7
2026-05-29 12:35:09 -04:00
1b243347cb
fix(android): resolve relative server cover URLs via shared ServerImage
bvandeusen and Claude Opus 4.7
2026-05-29 12:30:21 -04:00
85af93c63f
fix(android): place shell banners below the status bar
bvandeusen and Claude Opus 4.7
2026-05-29 12:11:19 -04:00
01b05f37c3
feat(android): per-tile skeleton reveal on Home via reactive section flows
bvandeusen
2026-05-28 19:42:09 -04:00
4eb225914c
feat(android): add HomeArtistPrewarmer (top-8 artists, session-deduped)
bvandeusen
2026-05-28 18:58:29 -04:00
b2512fff4b
feat(android): bound MetadataProvider on-miss fetches to 4 concurrent
bvandeusen
2026-05-28 18:26:13 -04:00
5b5bff767a
feat(android): add HomeTile model for per-tile hydration
bvandeusen
2026-05-28 18:12:57 -04:00
68891f1df9
fix(android): hold previous NowPlaying gradient color across track change
bvandeusen and Claude Opus 4.7
2026-05-28 15:12:33 -04:00
61cf07a3cf
feat(android): soft "update available" shell banner (#25 )
bvandeusen and Claude Opus 4.7
2026-05-28 14:15:59 -04:00
1ef5cd5b7a
feat(android): swipe-up-to-expand gesture on MiniPlayer (#34 )
bvandeusen and Claude Opus 4.7
2026-05-28 13:33:43 -04:00
fbd6264037
feat(android): offline pools filter to cache-resident tracks (#38 slice 3)
bvandeusen and Claude Opus 4.7
2026-05-28 13:17:12 -04:00
5e18d506fe
fix(android): correct Lucide icon name CircleCheckBig (#38 slice 2)
bvandeusen and Claude Opus 4.7
2026-05-28 13:11:08 -04:00
4713793900
feat(android): cached-indicator dot on track rows (#38 slice 2)
bvandeusen and Claude Opus 4.7
2026-05-28 13:03:03 -04:00
7024549e35
feat(android): populate audio_cache_index from playback (#38 slice 1)
bvandeusen and Claude Opus 4.7
2026-05-28 12:47:10 -04:00
ffc2acc010
feat(android): Hidden tab cache-first via Room + Flow (SWR) — responsiveness
bvandeusen and Claude Opus 4.7
2026-05-28 11:14:28 -04:00
4dc80047b2
feat(android): History tab cache-first via Room + Flow (SWR) — responsiveness
bvandeusen and Claude Opus 4.7
2026-05-28 10:33:29 -04:00
14330e99da
fix(android): provide AudioCacheIndexDao to Hilt graph
bvandeusen and Claude Opus 4.7
2026-05-28 10:20:07 -04:00
942d7e88cc
docs: refine porting rule — exact on behavior+feel, idiomatic on implementation
bvandeusen and Claude Opus 4.7
2026-05-28 08:23:29 -04:00
a37fe4c167
feat(android): ArtistDetail avatar falls back to first album cover (parity map)
bvandeusen and Claude Opus 4.7
2026-05-28 08:21:58 -04:00
851d5f92bb
feat(android): HiddenTab live-refreshes on quarantine.* SSE (parity map)
bvandeusen and Claude Opus 4.7
2026-05-28 08:19:31 -04:00
903a7961e3
feat(android): "Change server URL" link on Login (parity map: Auth)
bvandeusen and Claude Opus 4.7
2026-05-28 08:15:44 -04:00
f62e72b2f2
docs: add CLAUDE.md with the Flutter→Android porting discipline
bvandeusen and Claude Opus 4.7
2026-05-28 08:12:23 -04:00
2a87a50b81
feat(android): offline-pool Home cards (audit v3 §4.3) — closes #28
bvandeusen and Claude Opus 4.7
2026-05-28 07:52:55 -04:00
edbc805333
feat(android): system-playlist placeholder cards on Home (audit v3 §4.4, part of #28 )
bvandeusen and Claude Opus 4.7
2026-05-28 07:42:13 -04:00
8f5635c489
feat(android): in-app APK update install (audit v3 #25 )
bvandeusen and Claude Opus 4.7
2026-05-28 01:18:49 -04:00
5ce9ca9e62
fix(android): NowPlaying go-to-album/artist navigates atomically (audit v3 Bug-5)
bvandeusen and Claude Opus 4.7
2026-05-28 01:09:33 -04:00
6a473661ba
fix(android) detekt: extract Home section helpers from HomeSuccessContent
bvandeusen and Claude Opus 4.7
2026-05-28 01:01:43 -04:00
7f6aa9482a
feat(android): typed-confirm on AdminUsers delete (audit v3 §4.20)
bvandeusen and Claude Opus 4.7
2026-05-28 00:57:30 -04:00
ca0fb70370
feat(android): TrackActions hidden-state reacts to SSE (audit v3 Bug-9/§4.12)
bvandeusen and Claude Opus 4.7
2026-05-28 00:56:26 -04:00
1d1a27540a
feat(android): chunk Home Recently-Added into 25-album carousels (audit v3 §4.6)
bvandeusen and Claude Opus 4.7
2026-05-28 00:51:50 -04:00
38102df929
feat(android): seed headers on detail-screen Loading state (audit v3 Bug-8)
bvandeusen and Claude Opus 4.7
2026-05-28 00:51:02 -04:00
42a231e179
feat(android): variant pill + mini-cover crossfade + clipboard API (audit v3 §4.10/§4.16 tail)
bvandeusen and Claude Opus 4.7
2026-05-28 00:47:49 -04:00
ef85f5fd0b
feat(android): EventsStream reconnect-with-backoff (audit v3 §4.13)
bvandeusen and Claude Opus 4.7
2026-05-27 23:52:24 -04:00
8455922e8c
feat(android): QueueScreen rows show artist · album + duration (audit v3 §4.17)
bvandeusen and Claude Opus 4.7
2026-05-27 23:51:03 -04:00
a7127e127f
test(android): LibraryViewModelTest expects ErrorCopy generic fallback
bvandeusen and Claude Opus 4.7
2026-05-27 23:32:14 -04:00
3af8fa7207
feat(android): ErrorCopy — friendly error messages across the app (audit v3 §4.2)
bvandeusen and Claude Opus 4.7
2026-05-27 23:25:19 -04:00
04ece65a07
feat(android): Home Most-Played plays the section + NowPlaying LikeButton (audit v3 §4.7 + §4.15)
bvandeusen and Claude Opus 4.7
2026-05-27 22:26:15 -04:00
57d01d70ad
feat(android): PlaybackErrorReporter — surface ExoPlayer skip-on-error (audit v3 §4.1)
bvandeusen and Claude Opus 4.7
2026-05-27 22:03:32 -04:00
bda69d33c9
fix(android): LikesRepository.toggleLike param is desiredState not liked
bvandeusen and Claude Opus 4.7
2026-05-27 21:33:15 -04:00
1c05b561ba
fix(android) detekt: extract SettingsList helper
bvandeusen and Claude Opus 4.7
2026-05-27 21:22:19 -04:00
dd7c5544bf
fix(android) detekt: extract SignOutConfirmDialog helper
bvandeusen and Claude Opus 4.7
2026-05-27 21:15:45 -04:00
80b59aecf0
refactor(android): HomeRepository hydrates via MetadataProvider (audit v3 #24 , slice 3/3)
bvandeusen and Claude Opus 4.7
2026-05-27 21:11:25 -04:00
4dec61ba55
feat(android): FreshnessSweeper — keep cache warm without user pulls (audit v3 #24 , slice 2/3)
bvandeusen and Claude Opus 4.7
2026-05-27 21:10:14 -04:00
18b082def0
feat(android): MetadataProvider — cache-first reads + on-miss live fetch (audit v3 #24 , slice 1/3)
bvandeusen and Claude Opus 4.7
2026-05-27 21:08:59 -04:00
05c7d922c4
feat(android): LikedTab inline heart + Settings sign-out confirmation
bvandeusen and Claude Opus 4.7
2026-05-27 21:02:41 -04:00
d8459a2674
fix(android): ArtistDetail Play button surfaces failures (audit v3 Bug-7)
bvandeusen and Claude Opus 4.7
2026-05-27 20:59:52 -04:00
70ef15336e
fix(android): Search kebab + hide dead Liked-cap selector (audit v3 §4.8 + Bug-3)
bvandeusen and Claude Opus 4.7
2026-05-27 20:58:54 -04:00
b0d0936c56
feat(android): Home per-section empty messages (audit v3 §4.5)
bvandeusen and Claude Opus 4.7
2026-05-27 20:57:41 -04:00
cc6a8e2476
fix(android): cosmetic cleanup — admin badge, AdminLanding subtitle, NowPlaying clip
bvandeusen and Claude Opus 4.7
2026-05-27 20:56:43 -04:00
3239cb976d
fix(android): shared LoadingCentered + LibraryScreen Retry actually retries
bvandeusen and Claude Opus 4.7
2026-05-27 20:55:52 -04:00
040217cab6
fix(android): hydrate missing Home entities so sections actually render
bvandeusen and Claude Opus 4.7
2026-05-27 20:37:39 -04:00
e8a7e48bd5
fix(android): Settings column wasn't scrolling
bvandeusen and Claude Opus 4.7
2026-05-27 19:52:42 -04:00
7e1d4cde81
fix(android) detekt: extract VersionTooOldViewModel to its own file
bvandeusen and Claude Opus 4.7
2026-05-27 19:09:36 -04:00
ae26d66987
feat(android): VersionGate banner (audit v2 #23 )
bvandeusen and Claude Opus 4.7
2026-05-27 18:47:00 -04:00
d20fab5459
fix(android) detekt: compareComponentWise via zip+firstOrNull (single return)
bvandeusen and Claude Opus 4.7
2026-05-27 18:14:56 -04:00
5f31fdc300
feat(android): About card check-for-updates button (audit v2 #20 , slice 2)
bvandeusen and Claude Opus 4.7
2026-05-27 18:11:49 -04:00
2cb9f062c5
fix(android) detekt: rename ListenBrainz wire file + shrink ListenBrainzForm
bvandeusen and Claude Opus 4.7
2026-05-27 17:36:58 -04:00
e3e9c48a0a
feat(android): ListenBrainz Settings card (audit v2 #20 , slice 1)
bvandeusen and Claude Opus 4.7
2026-05-27 17:32:29 -04:00
e6bf99f580
feat(android): CoverPrefetcher — warm Coil cache with next track's cover (audit v2 #17 , slice 3)
bvandeusen and Claude Opus 4.7
2026-05-27 17:06:45 -04:00
7082ebf9a5
fix(android) detekt: collapse hasUsableInternet to single return
bvandeusen and Claude Opus 4.7
2026-05-27 16:57:03 -04:00
59a111914c
feat(android): connectivity observer + shell ConnectionErrorBanner (audit v2 #21 )
bvandeusen and Claude Opus 4.7
2026-05-27 16:29:49 -04:00
6a932405f8
feat(android): MiniPlayer → NowPlaying cover Hero transition (audit v2 #17 , slice 2)
bvandeusen and Claude Opus 4.7
2026-05-27 15:39:11 -04:00
01fdd2f380
feat(android): NowPlaying dominant-color gradient backdrop (audit v2 #17 , slice 1)
bvandeusen and Claude Opus 4.7
2026-05-27 15:08:00 -04:00
f9b0c267e3
fix(android): drop stray @Composable on SKELETON_PLAYLIST_ROWS const
bvandeusen and Claude Opus 4.7
2026-05-27 14:58:30 -04:00
69179e0af3
fix(android) detekt: extract AlbumDetailStateContent helper
bvandeusen and Claude Opus 4.7
2026-05-27 14:40:36 -04:00
89203fc4a1
feat(android): skeleton bodies on Library + detail screens (audit v2 #16 , slice 2)
bvandeusen and Claude Opus 4.7
2026-05-27 14:31:29 -04:00
43ee8f9a39
feat(android): skeleton tiles + Home cross-fade reveal (audit v2 #16 , slice 1)
bvandeusen and Claude Opus 4.7
2026-05-27 14:18:02 -04:00
f21f53d04a
fix(android) detekt: name LinkedHashMap load factor constant
bvandeusen and Claude Opus 4.7
2026-05-27 14:06:34 -04:00
208a7d056b
feat(android): detail-screen seed extras (audit v2 #11 )
bvandeusen and Claude Opus 4.7
2026-05-27 13:33:11 -04:00
c816490061
fix(android) detekt: shrink AdminUsersScreen, real regenerate fix, suppress TooManyFunctions
bvandeusen and Claude Opus 4.7
2026-05-27 13:14:34 -04:00
c2c9de26e7
feat(android) + fix detekt: AdminUsers Invites + Requests/PlaylistDetail refactors
bvandeusen and Claude Opus 4.7
2026-05-27 13:01:13 -04:00
7500d283a8
feat(android): PlaylistDetail Regenerate button + refreshSystem endpoint
bvandeusen and Claude Opus 4.7
2026-05-27 12:54:47 -04:00
49a5324be8
feat(android): Requests polish — Listen / cancel confirm / progress / kind avatar
bvandeusen and Claude Opus 4.7
2026-05-27 12:52:25 -04:00
ec585997ae
feat(android): Search artists/albums as horizontal carousels
bvandeusen and Claude Opus 4.7
2026-05-27 12:47:05 -04:00
a42a4df736
fix(android): silence JVM + Kotlin annotation-target warnings
bvandeusen and Claude Opus 4.7
2026-05-27 11:51:36 -04:00
7250f1f0e0
fix(android): LibraryViewModelTest — pass PlayerController to ctor
bvandeusen and Claude Opus 4.7
2026-05-27 11:48:44 -04:00
37043fb7e0
fix(android): Lucide.Shuffle in LibraryScreen — Shuffle is an extension
bvandeusen and Claude Opus 4.7
2026-05-27 11:35:25 -04:00
de79cf0342
fix(android): detekt + silence JDK 22+ native-access warning
bvandeusen and Claude Opus 4.7
2026-05-27 11:22:53 -04:00
92a9b55c12
feat(android): Library AppBar — Shuffle all button
bvandeusen and Claude Opus 4.7
2026-05-27 11:12:11 -04:00
cd1c054f62
feat(android): AdminRequests — show requester username
bvandeusen and Claude Opus 4.7
2026-05-27 11:10:50 -04:00
a7f1160b7e
feat(android): Hidden tab — cover thumb + relative-time stamp
bvandeusen and Claude Opus 4.7
2026-05-27 11:09:27 -04:00
c29d1e0b3d
feat(android): now-playing row highlight on track surfaces
bvandeusen and Claude Opus 4.7
2026-05-26 22:04:59 -04:00
225ff35c4c
fix(android): detekt LongMethod on MiniRow (62/60)
bvandeusen and Claude Opus 4.7
2026-05-26 21:54:21 -04:00
a606267c1e
feat(android): MiniPlayer prev/next + inline scrubber + like button
bvandeusen and Claude Opus 4.7
2026-05-26 21:35:51 -04:00
e82710dc0b
fix(android): MeRepository KDoc — actually remove the /api/me/* trap
bvandeusen and Claude Opus 4.7
2026-05-26 21:24:23 -04:00
c74fa41fd0
fix(android): KSP MeRepository resolution — KDoc /api/me/* trap
bvandeusen and Claude Opus 4.7
2026-05-26 21:24:05 -04:00
3c1d99037c
fix(android): MeApi — move request bodies inline (project pattern)
bvandeusen and Claude Opus 4.7
2026-05-26 21:04:23 -04:00