feat(android): configuration in tabs, tags and file types sorted with a scroller #273

Merged
kfickel merged 3 commits from 272_config-tabs into main 2026-10-16 06:41:11 +02:00
Collaborator

Closes #272.

The configuration screen of the app was one long list. It is now split into tabs.

What changed

  • Five tabs: Dimensions · Tags · File types · Commands · General. They use a PrimaryScrollableTabRow over a HorizontalPager, the same as the state lists, so you can swipe between them. The screen keeps the selected tab (rememberSaveable) and passes it into ConfigContent, which still runs no effects.
  • Tags and file types are sorted by name, ignoring case. When two names differ only in case, the capitalised one comes first, so the order is stable. Dimensions and commands keep the order of the file.
  • Scroller: the Tags and File types tabs have the FastScroller of the Stream tab. While you hold it, it shows the name of the first entry on screen (file types with their _).
  • Search filters every tab. While a search is set, each tab shows how many entries match (Tags 2). The general settings are not searched, as before.
  • The unplaced tags now sit at the top of the Tags tab, shown only when nothing is searched. Problems with the file are still shown above the tabs.
  • Each entry is now its own lazy row. Rows are grouped by shape (rounded at the ends of a group, slightly rounded between rows) instead of sharing one OutlinedCard, because the scroller needs one row per entry.

Pure logic (ConfigList.kt)

  • configSections sorts tags and file types.
  • New: ConfigTab, ConfigSections.count(tab), and entryLabel(names, leading, index), which gives the scroller's label and is written like dayAt.
  • Unit tests cover the sorting (including names that differ only in case), the counts per tab with and without a search, and entryLabel.

Screenshots

ConfigScreenshot is replaced by one scene per tab. There are also new scenes for search (counts in the tab row) and for a file with problems (banner above the tabs). ConfigUnreadableScreenshot is kept; its banner moved slightly. All images were checked by eye.

Docs

README (Config), REQUIREMENTS (R35, Configuration) and AGENTS (Config.kt, ConfigList.kt, FastScroller.kt) are updated.

Verification

  • nix build .#streamd-app (unit tests + validateDebugScreenshotTest) ✅
  • nix flake check ✅
Closes #272. The configuration screen of the app was one long list. It is now split into tabs. ### What changed - **Five tabs**: Dimensions · Tags · File types · Commands · General. They use a `PrimaryScrollableTabRow` over a `HorizontalPager`, the same as the state lists, so you can swipe between them. The screen keeps the selected tab (`rememberSaveable`) and passes it into `ConfigContent`, which still runs no effects. - **Tags and file types are sorted by name**, ignoring case. When two names differ only in case, the capitalised one comes first, so the order is stable. Dimensions and commands keep the order of the file. - **Scroller**: the Tags and File types tabs have the `FastScroller` of the Stream tab. While you hold it, it shows the name of the first entry on screen (file types with their `_`). - **Search** filters every tab. While a search is set, each tab shows how many entries match (`Tags 2`). The general settings are not searched, as before. - The **unplaced tags** now sit at the top of the Tags tab, shown only when nothing is searched. Problems with the file are still shown above the tabs. - Each entry is now its own lazy row. Rows are grouped by shape (rounded at the ends of a group, slightly rounded between rows) instead of sharing one `OutlinedCard`, because the scroller needs one row per entry. ### Pure logic (`ConfigList.kt`) - `configSections` sorts tags and file types. - New: `ConfigTab`, `ConfigSections.count(tab)`, and `entryLabel(names, leading, index)`, which gives the scroller's label and is written like `dayAt`. - Unit tests cover the sorting (including names that differ only in case), the counts per tab with and without a search, and `entryLabel`. ### Screenshots `ConfigScreenshot` is replaced by one scene per tab. There are also new scenes for search (counts in the tab row) and for a file with problems (banner above the tabs). `ConfigUnreadableScreenshot` is kept; its banner moved slightly. All images were checked by eye. ### Docs README (Config), REQUIREMENTS (R35, *Configuration*) and AGENTS (`Config.kt`, `ConfigList.kt`, `FastScroller.kt`) are updated. ### Verification - `nix build .#streamd-app` (unit tests + `validateDebugScreenshotTest`) ✅ - `nix flake check` ✅
docs: the configuration of the app in tabs, with tags and file types by name
All checks were successful
Continuous Integration / Build Package (push) Successful in 15m53s
Continuous Integration / Conventional Commits (push) Successful in 19s
Continuous Integration / Lint, Check & Test (push) Successful in 5m29s
6b45c61038
kfickel deleted branch 272_config-tabs 2026-10-16 06:41:12 +02:00
Sign in to join this conversation.
No reviewers
No labels
android
cli
epic
planned
tui
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
kfickel/streamd!273
No description provided.