Repository navigation
feat(mobile): dense track rows on catalog lineups behind track_rows - #14700
Merged
Merged
Conversation
Mobile catalog lineups render tracks as 64px rows instead of bordered tiles, matching web. Behind the existing track_rows flag; Feed keeps tiles. - harmony-native TrackRow: optional rank, 48px art, title, artist line, duration or a status (price/unlock), and a pressed state. Long-press opens the track's actions and is exposed to VoiceOver as an action. - TrackRowTile: connected row with the tile's play and gated-content behavior, an equalizer on the playing track's art, Artist Pick context, and podcast time-left labels. - useOpenTrackOverflow: overflow actions shared by TrackTile and the row. Rows add share, favorite and repost since they have no inline buttons. - TrackLineup tileVariant='row'; used on Trending, Underground, profile Tracks and Reposts, and search track results. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
dylanjeffers
added a commit
that referenced
this pull request
Oct 22, 2026
…animation (#14701) Follow-up to #14700: the Library catches up with Trending, and rows get a real press animation. **Library Tracks tab** (behind `track_rows`, on in production): the bordered card of art-less rows is replaced by the same `TrackRow` Trending uses, full-bleed: 48px artwork with the playing overlay, title with the offline download indicator, artist with badges, duration. Tap plays, long-press opens the actions (now including favorite/repost/share since there is no kebab). The flag-off path keeps the old `TrackList`. **Filter field**: `FilterInput` is a flush search-style pill (surface2, search icon, clear button) instead of a shadowed Paper card with a filter icon. Same props, so Albums/Playlists, Listening History, Add to Collection and the feature-flag screen pick it up too. The client-side filter and 250 ms server query debounce are unchanged. **Row press animation** (`TrackRow`, so Trending/profiles/search get it too): press-in scales the row to 0.985 with a surface2 highlight; release springs back. A long-press dips to 0.96 and springs back as the actions open, alongside the existing haptic. Reanimated 4 on the UI thread; the highlight is an absolute overlay so no color interpolation through transparent. **Tested** on the iOS 26.5 simulator (1.5.190 Release build with this bundle swapped in, signed in): Library rows and artwork, tap to play with the equalizer overlay, long-press menu, typing a filter and clearing it, pagination skeletons. Mobile `tsc` and eslint are clean. Not tested: Android, offline mode with downloaded tracks, VoiceOver. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 1 of the redesign on mobile: tracks in catalog lineups render as 64px rows instead of bordered tiles, matching web (#14684-#14690). Gated by the existing
track_rowsflag, which is on in production, so this reaches RC users through the RC OTA on merge. Feed keeps tiles.Where: Trending, Underground, profile Tracks and Reposts, search track results. Collections in mixed lineups (Reposts) stay tiles. Library already uses
TrackListrows and is unchanged.Row: optional rank, 48px art, title, artist with badges, duration (or "12m left" / "Played" for podcasts and audiobooks), and a price/unlock button in place of the duration on locked tracks.
Code:
harmony-native/components/TrackRow: presentational row.lineup-tile/TrackRowTile: connected row.lineup-tile/useOpenTrackOverflow: overflow actions now shared byTrackTileand the row (tile menu unchanged). Rows add share, favorite and repost since they have no inline buttons.TrackLineupgetstileVariant: 'tile' | 'row'.Tested on the iOS 26.5 simulator (1.5.190 Release build with this bundle swapped in), signed in: Trending rows and ranks, tap to play and switch tracks, equalizer, long-press menu without starting playback, pagination to 50, profile Tracks rows, loading skeletons. Not tested: Android, search results, a locked track's price button, VoiceOver.
Mobile
tscand eslint are clean locally (mobile CI only runs security checks).🤖 Generated with Claude Code