27 lines
1.7 KiB
Markdown
27 lines
1.7 KiB
Markdown
# Tabbed Station Libraries
|
|
|
|
## Task
|
|
Replace the single station list with a tabbed interface where every playlist gets its own tab, SomaFM is a built-in tab with listener-count sorting, and imported playlists become their own tabs automatically.
|
|
|
|
## Changes Made
|
|
|
|
### Data Model
|
|
- **Station.kt** -- Added `listenerCount: Int = 0` field for sort-by-listeners feature
|
|
- **Playlist.kt** -- Added `isBuiltIn: Boolean = false` to protect built-in playlists (SomaFM) from deletion
|
|
|
|
### Database
|
|
- **RadioDatabase.kt** -- Bumped to version 2, added `MIGRATION_1_2` that adds the new columns and seeds SomaFM data for existing installs
|
|
- **SomaFmSeedData.kt** -- Added listener counts to all 44 stations, set `isBuiltIn = true` on SomaFM playlist, extracted shared `seedStations()` function used by both `onCreate` and the migration
|
|
- **RadioApplication.kt** -- Registered `MIGRATION_1_2`
|
|
|
|
### UI
|
|
- **StationListScreen.kt** -- Complete restructure: `ScrollableTabRow` for tabs, `SortChipRow` with FilterChips (Default, A-Z, Z-A, Listeners), per-tab station list. Built-in tabs hide add/import/delete actions. Listener count shown inline on SomaFM stations. Long-press edit/delete disabled on built-in tab stations.
|
|
- **StationListViewModel.kt** -- New state model with `TabInfo`, `SortMode`, tab selection, and in-memory sorting. Import now creates a new playlist (tab) from the file name and assigns all parsed stations to it, then switches to the new tab.
|
|
- **AddStationDialog.kt** -- Simplified: removed playlist picker (stations go to current tab's playlist automatically)
|
|
- **EditStationDialog.kt** -- Simplified: removed playlist picker
|
|
|
|
## Follow-up Items
|
|
- Drag-and-drop reordering within tabs
|
|
- Tab reordering
|
|
- Renaming tabs/playlists
|