Commit Graph

  • 2a87a50b81 feat(android): offline-pool Home cards (audit v3 §4.3) — closes #28 bvandeusen 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 2026-05-28 07:42:13 -04:00
  • 8f5635c489 feat(android): in-app APK update install (audit v3 #25) bvandeusen 2026-05-28 01:18:49 -04:00
  • 5ce9ca9e62 fix(android): NowPlaying go-to-album/artist navigates atomically (audit v3 Bug-5) bvandeusen 2026-05-28 01:09:33 -04:00
  • 6a473661ba fix(android) detekt: extract Home section helpers from HomeSuccessContent bvandeusen 2026-05-28 01:01:43 -04:00
  • 7f6aa9482a feat(android): typed-confirm on AdminUsers delete (audit v3 §4.20) bvandeusen 2026-05-28 00:57:30 -04:00
  • ca0fb70370 feat(android): TrackActions hidden-state reacts to SSE (audit v3 Bug-9/§4.12) bvandeusen 2026-05-28 00:56:26 -04:00
  • 1d1a27540a feat(android): chunk Home Recently-Added into 25-album carousels (audit v3 §4.6) bvandeusen 2026-05-28 00:51:50 -04:00
  • 38102df929 feat(android): seed headers on detail-screen Loading state (audit v3 Bug-8) bvandeusen 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 2026-05-28 00:47:49 -04:00
  • ef85f5fd0b feat(android): EventsStream reconnect-with-backoff (audit v3 §4.13) bvandeusen 2026-05-27 23:52:24 -04:00
  • 8455922e8c feat(android): QueueScreen rows show artist · album + duration (audit v3 §4.17) bvandeusen 2026-05-27 23:51:03 -04:00
  • a7127e127f test(android): LibraryViewModelTest expects ErrorCopy generic fallback bvandeusen 2026-05-27 23:32:14 -04:00
  • 3af8fa7207 feat(android): ErrorCopy — friendly error messages across the app (audit v3 §4.2) bvandeusen 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 2026-05-27 22:26:15 -04:00
  • 57d01d70ad feat(android): PlaybackErrorReporter — surface ExoPlayer skip-on-error (audit v3 §4.1) bvandeusen 2026-05-27 22:03:32 -04:00
  • bda69d33c9 fix(android): LikesRepository.toggleLike param is desiredState not liked bvandeusen 2026-05-27 21:33:15 -04:00
  • 1c05b561ba fix(android) detekt: extract SettingsList helper bvandeusen 2026-05-27 21:22:19 -04:00
  • dd7c5544bf fix(android) detekt: extract SignOutConfirmDialog helper bvandeusen 2026-05-27 21:15:45 -04:00
  • 80b59aecf0 refactor(android): HomeRepository hydrates via MetadataProvider (audit v3 #24, slice 3/3) bvandeusen 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 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 2026-05-27 21:08:59 -04:00
  • 05c7d922c4 feat(android): LikedTab inline heart + Settings sign-out confirmation bvandeusen 2026-05-27 21:02:41 -04:00
  • d8459a2674 fix(android): ArtistDetail Play button surfaces failures (audit v3 Bug-7) bvandeusen 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 2026-05-27 20:58:54 -04:00
  • b0d0936c56 feat(android): Home per-section empty messages (audit v3 §4.5) bvandeusen 2026-05-27 20:57:41 -04:00
  • cc6a8e2476 fix(android): cosmetic cleanup — admin badge, AdminLanding subtitle, NowPlaying clip bvandeusen 2026-05-27 20:56:43 -04:00
  • 3239cb976d fix(android): shared LoadingCentered + LibraryScreen Retry actually retries bvandeusen 2026-05-27 20:55:52 -04:00
  • 040217cab6 fix(android): hydrate missing Home entities so sections actually render bvandeusen 2026-05-27 20:37:39 -04:00
  • e8a7e48bd5 fix(android): Settings column wasn't scrolling bvandeusen 2026-05-27 19:52:42 -04:00
  • 7e1d4cde81 fix(android) detekt: extract VersionTooOldViewModel to its own file bvandeusen 2026-05-27 19:09:36 -04:00
  • ae26d66987 feat(android): VersionGate banner (audit v2 #23) bvandeusen 2026-05-27 18:47:00 -04:00
  • d20fab5459 fix(android) detekt: compareComponentWise via zip+firstOrNull (single return) bvandeusen 2026-05-27 18:14:56 -04:00
  • 5f31fdc300 feat(android): About card check-for-updates button (audit v2 #20, slice 2) bvandeusen 2026-05-27 18:11:49 -04:00
  • 2cb9f062c5 fix(android) detekt: rename ListenBrainz wire file + shrink ListenBrainzForm bvandeusen 2026-05-27 17:36:58 -04:00
  • e3e9c48a0a feat(android): ListenBrainz Settings card (audit v2 #20, slice 1) bvandeusen 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 2026-05-27 17:06:45 -04:00
  • 7082ebf9a5 fix(android) detekt: collapse hasUsableInternet to single return bvandeusen 2026-05-27 16:57:03 -04:00
  • 59a111914c feat(android): connectivity observer + shell ConnectionErrorBanner (audit v2 #21) bvandeusen 2026-05-27 16:29:49 -04:00
  • 6a932405f8 feat(android): MiniPlayer → NowPlaying cover Hero transition (audit v2 #17, slice 2) bvandeusen 2026-05-27 15:39:11 -04:00
  • 01fdd2f380 feat(android): NowPlaying dominant-color gradient backdrop (audit v2 #17, slice 1) bvandeusen 2026-05-27 15:08:00 -04:00
  • f9b0c267e3 fix(android): drop stray @Composable on SKELETON_PLAYLIST_ROWS const bvandeusen 2026-05-27 14:58:30 -04:00
  • 69179e0af3 fix(android) detekt: extract AlbumDetailStateContent helper bvandeusen 2026-05-27 14:40:36 -04:00
  • 89203fc4a1 feat(android): skeleton bodies on Library + detail screens (audit v2 #16, slice 2) bvandeusen 2026-05-27 14:31:29 -04:00
  • 43ee8f9a39 feat(android): skeleton tiles + Home cross-fade reveal (audit v2 #16, slice 1) bvandeusen 2026-05-27 14:18:02 -04:00
  • f21f53d04a fix(android) detekt: name LinkedHashMap load factor constant bvandeusen 2026-05-27 14:06:34 -04:00
  • 208a7d056b feat(android): detail-screen seed extras (audit v2 #11) bvandeusen 2026-05-27 13:33:11 -04:00
  • c816490061 fix(android) detekt: shrink AdminUsersScreen, real regenerate fix, suppress TooManyFunctions bvandeusen 2026-05-27 13:14:34 -04:00
  • c2c9de26e7 feat(android) + fix detekt: AdminUsers Invites + Requests/PlaylistDetail refactors bvandeusen 2026-05-27 13:01:13 -04:00
  • 7500d283a8 feat(android): PlaylistDetail Regenerate button + refreshSystem endpoint bvandeusen 2026-05-27 12:54:47 -04:00
  • 49a5324be8 feat(android): Requests polish — Listen / cancel confirm / progress / kind avatar bvandeusen 2026-05-27 12:52:25 -04:00
  • ec585997ae feat(android): Search artists/albums as horizontal carousels bvandeusen 2026-05-27 12:47:05 -04:00
  • a42a4df736 fix(android): silence JVM + Kotlin annotation-target warnings bvandeusen 2026-05-27 11:51:36 -04:00
  • 7250f1f0e0 fix(android): LibraryViewModelTest — pass PlayerController to ctor bvandeusen 2026-05-27 11:48:44 -04:00
  • 37043fb7e0 fix(android): Lucide.Shuffle in LibraryScreen — Shuffle is an extension bvandeusen 2026-05-27 11:35:25 -04:00
  • de79cf0342 fix(android): detekt + silence JDK 22+ native-access warning bvandeusen 2026-05-27 11:22:53 -04:00
  • 92a9b55c12 feat(android): Library AppBar — Shuffle all button bvandeusen 2026-05-27 11:12:11 -04:00
  • cd1c054f62 feat(android): AdminRequests — show requester username bvandeusen 2026-05-27 11:10:50 -04:00
  • a7f1160b7e feat(android): Hidden tab — cover thumb + relative-time stamp bvandeusen 2026-05-27 11:09:27 -04:00
  • c29d1e0b3d feat(android): now-playing row highlight on track surfaces bvandeusen 2026-05-26 22:04:59 -04:00
  • 225ff35c4c fix(android): detekt LongMethod on MiniRow (62/60) bvandeusen 2026-05-26 21:54:21 -04:00
  • a606267c1e feat(android): MiniPlayer prev/next + inline scrubber + like button bvandeusen 2026-05-26 21:35:51 -04:00
  • e82710dc0b fix(android): MeRepository KDoc — actually remove the /api/me/* trap bvandeusen 2026-05-26 21:24:23 -04:00
  • c74fa41fd0 fix(android): KSP MeRepository resolution — KDoc /api/me/* trap bvandeusen 2026-05-26 21:24:05 -04:00
  • 3c1d99037c fix(android): MeApi — move request bodies inline (project pattern) bvandeusen 2026-05-26 21:04:23 -04:00
  • a1b1eed740 fix(android): MeRepository resolution — match project Api+body pattern bvandeusen 2026-05-26 21:03:56 -04:00
  • b1bcfe7fa3 fix(android): detekt ReturnCount on PasswordViewModel.change (3/2) bvandeusen 2026-05-26 20:46:33 -04:00
  • ae45e8f32e fix(android): actually wire ProfileCard + PasswordCard into Settings bvandeusen 2026-05-26 20:15:27 -04:00
  • 14c5262ed7 feat(android): Settings — Profile + Password cards bvandeusen 2026-05-26 20:15:01 -04:00
  • f18b7d4658 feat(android): MeApi + MyProfile + MeRepository foundation bvandeusen 2026-05-26 20:13:41 -04:00
  • f7c3bd2dcf feat(android): Settings — My Requests + Admin tiles bvandeusen 2026-05-26 19:59:20 -04:00
  • 8a2279d5df feat(android): NowPlaying drag-down-to-dismiss + close button bvandeusen 2026-05-26 19:50:55 -04:00
  • 29c676fcf8 fix(android): Requests cancel → MutationQueue offline fallback bvandeusen 2026-05-26 19:49:30 -04:00
  • 118c687847 fix(android): pull-to-refresh works on Empty/Error states bvandeusen 2026-05-26 19:47:54 -04:00
  • 4d7a4312db fix(android): hide Storage prefetch + cache-liked toggles (no-ops) bvandeusen 2026-05-26 19:44:50 -04:00
  • d99d317563 fix(android): silent-breakage cluster — search/artist/nowplaying bvandeusen 2026-05-26 19:43:55 -04:00
  • 622c90a2d5 fix(android): LibraryViewModelTest — pass SyncController to constructor bvandeusen 2026-05-26 18:48:12 -04:00
  • b6a48a56e8 fix(android): detekt LongMethod on DiscoverScreen (63/60) bvandeusen 2026-05-26 18:44:27 -04:00
  • cf07a2a5a8 feat(android): pull-to-refresh — library tabs + admin + hidden bvandeusen 2026-05-26 18:25:50 -04:00
  • 4ca10e2afa feat(android): pull-to-refresh on Playlists / Discover / Requests bvandeusen 2026-05-26 18:19:12 -04:00
  • e6e4f6dcf1 feat(android): PullToRefreshScaffold + Home / Album / Artist detail bvandeusen 2026-05-26 18:16:02 -04:00
  • 4a3215cc07 feat(android): MiniPlayer TrackActions kebab + shell-level snackbar bvandeusen 2026-05-26 18:08:20 -04:00
  • c9bf0479ec fix(android): StorageCard — simpler OutlinedButton + DropdownMenu bvandeusen 2026-05-26 17:55:29 -04:00
  • 5455cd5d80 fix(android): detekt TooManyFunctions on AuthStore (14/11) bvandeusen 2026-05-26 16:53:39 -04:00
  • 6ef08edd99 feat(android): Settings — Storage section UI + Sync / Clear actions bvandeusen 2026-05-26 16:25:24 -04:00
  • b438772c96 feat(android): persist CacheSettings + PlayerModule reads from AuthStore bvandeusen 2026-05-26 16:23:13 -04:00
  • 9baed7e579 fix(android): AdminRequestsViewModel — missing imports for EventsStream bvandeusen 2026-05-26 15:43:24 -04:00
  • 525873fffc feat(android): per-screen SSE subscribers — playlists / requests / admin bvandeusen 2026-05-26 15:02:42 -04:00
  • 3ce30bf19c feat(android): LiveEventsDispatcher — cross-screen SSE invalidations bvandeusen 2026-05-26 14:58:57 -04:00
  • 29cfbd61b1 feat(android): EventsStream — SSE subscription to /api/events/stream bvandeusen 2026-05-26 14:58:21 -04:00
  • a9b3c936f1 fix(android): detekt LongMethod on NowPlayingScreen (61/60) bvandeusen 2026-05-26 14:53:55 -04:00
  • 03a6dc4e5d feat(android): shuffle + repeat on NowPlaying bvandeusen 2026-05-26 14:45:29 -04:00
  • dc68156d98 fix(android): detekt — package naming, file rename, length caps bvandeusen 2026-05-26 14:18:15 -04:00
  • 4580f950e3 feat(android): PlayEventsReporter — wire mobile plays to server bvandeusen 2026-05-26 14:04:23 -04:00
  • ddc4472e29 feat(android): MutationQueue PLAY_OFFLINE kind bvandeusen 2026-05-26 14:02:52 -04:00
  • c396b673ac feat(android): surface queue source on PlayerUiState bvandeusen 2026-05-26 14:02:06 -04:00
  • 92c128e388 feat(android): EventsApi + wire types for /api/events bvandeusen 2026-05-26 14:01:44 -04:00
  • 415200d8f0 feat(android): persist client_id for play-event reporting bvandeusen 2026-05-26 14:01:21 -04:00
  • 3f00006b74 feat(android): TrackActions kebab on NowPlaying with hideQueueActions bvandeusen 2026-05-26 12:24:13 -04:00
  • 965ec412d1 feat(android): TrackActions button on Playlist / Library tabs / Search bvandeusen 2026-05-26 12:23:33 -04:00