feat(android): time range sheet, All shards screen, shards in the stream #311

Merged
kfickel merged 4 commits from 285_activity-range-and-shards into main 2026-10-20 19:43:21 +02:00
Collaborator

Closes #285.

What

  • Core and bindings: activity_shards picks one series before paging, activity_files lists every matching file without reading any, and resolve_activity_range_from resolves all from the tracking start. Bound as activityShards, activityFiles and activityRangeFrom.
  • Time range sheet: the text is parsed as it is typed, with the resolved dates and day count, example chips, the All/Days/Month/Year tabs and quick picks. Apply starts a new root and clears the drill history; dismissing it cancels.
    • Days tab: two taps make a range; it opens on the month the range ends in, and the arrows stop at the tracking start and this month.
    • An answer for an older text is dropped.
  • All shards: a destination without the bottom bar. Series chips with inclusive counts, Stream-style day headers, pages of 50, retry at the same offset; choosing another series starts at its top.
  • Show shards in stream: a generic file-ID filter with a chip you can dismiss. It narrows the cards before day grouping, search and the fast scroller, is kept across tabs and cleared when the repository changes. An empty filter says that no note is in it.

Tests

  • Core tests on MemoryStore and a Kotlin smoke test of the bindings.
  • Pure app tests: taps, band, browse bounds, the draft dropping old answers, grouping by day across pages, the header count, paging and retry.
  • Light and dark screenshots of every picker tab, invalid input, the shard list (filtered, empty, failed, loading more), the filtered Stream and the empty filter.
  • nix flake check and nix build .#streamd-app pass.

Not done

  • No emulator acceptance run was made.
  • The Stream filter's ownership (kept across tabs, cleared on repository change, rebuilt after the process ends) is in App and has no unit test.
Closes #285. ## What - **Core and bindings:** `activity_shards` picks one series before paging, `activity_files` lists every matching file without reading any, and `resolve_activity_range_from` resolves `all` from the tracking start. Bound as `activityShards`, `activityFiles` and `activityRangeFrom`. - **Time range sheet:** the text is parsed as it is typed, with the resolved dates and day count, example chips, the All/Days/Month/Year tabs and quick picks. Apply starts a new root and clears the drill history; dismissing it cancels. - Days tab: two taps make a range; it opens on the month the range ends in, and the arrows stop at the tracking start and this month. - An answer for an older text is dropped. - **All shards:** a destination without the bottom bar. Series chips with inclusive counts, Stream-style day headers, pages of 50, retry at the same offset; choosing another series starts at its top. - **Show shards in stream:** a generic file-ID filter with a chip you can dismiss. It narrows the cards before day grouping, search and the fast scroller, is kept across tabs and cleared when the repository changes. An empty filter says that no note is in it. ## Tests - Core tests on `MemoryStore` and a Kotlin smoke test of the bindings. - Pure app tests: taps, band, browse bounds, the draft dropping old answers, grouping by day across pages, the header count, paging and retry. - Light and dark screenshots of every picker tab, invalid input, the shard list (filtered, empty, failed, loading more), the filtered Stream and the empty filter. - `nix flake check` and `nix build .#streamd-app` pass. ## Not done - No emulator acceptance run was made. - The Stream filter's ownership (kept across tabs, cleared on repository change, rebuilt after the process ends) is in `App` and has no unit test.
The calendar opens where the range ends and a tap after typed text starts
again; the pickers stop at the tracking start and this month; an answer for
an older text is dropped. The shard list groups through a tested helper, has
the day headers of the Stream and ListItem rows, keeps one count and starts
a chosen series at its top. An empty Stream filter says so.
docs(activity): describe the range sheet, the shard list and the stream filter
All checks were successful
Continuous Integration / Conventional Commits (push) Successful in 22s
Continuous Integration / Lint, Check & Test (push) Successful in 1m59s
Continuous Integration / Build Package (push) Successful in 45s
680cfad9fa
kfickel scheduled this pull request to auto merge when all checks succeed 2026-10-20 19:35:30 +02:00
kfickel deleted branch 285_activity-range-and-shards 2026-10-20 19:43:21 +02:00
Sign in to join this conversation.
No reviewers
No labels
android
cli
epic
planned
tui
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!311
No description provided.