Make Copy to… and Cut to… the selection bar's actions
verify / gate (push) Has been cancelled
verify / release (push) Has been cancelled

The selection bar offered Copy and Move, which only filled an in-app clipboard; the
destination picker then lived behind an overflow menu, and Paste in the top bar. That
made a copy a two-step detour through another folder - the thing M16's picker exists to
avoid.

- The bar's two verbs are now Copy to… and Cut to…, both opening the destination picker.
- The clipboard state, Paste here, and the overflow's duplicate Copy to… / Move to… are
  removed. The picker's cut title and confirm are Cut to… / Cut here.
- A copy still keeps the selection for a second destination; a cut clears it. Conflicts
  still ask before overwriting, naming the picked folder.
- Five clipboard tests are removed; the mark, restart and undo tests now use the picker.
  BrowserTopBar's search and overflow sections are extracted so its two new detekt
  findings are fixed rather than baselined.

Driven on the Xiaomi phone: Copy to… copied 120 x 16 MB through Internal storage ->
AADemo -> Target and reported Copied 121 items to Target; Cut to… moved file001.bin and
offered Undo; a name in the way raised Items already exist here; the top-bar overflow
has no Paste. The foreground-service video was re-recorded against the new bar at 16.1 s.

Verified: ./tools/verify.sh green, the code map current, 426 unit tests pass, and the
video decodes as H.264 1080x2400 with no audio.
This commit is contained in:
2026-10-18 15:07:35 +02:00
parent f9305d1070
commit ddcd68b4b7
23 changed files with 322 additions and 417 deletions
+20 -5
View File
@@ -55,11 +55,12 @@ upload needs a **higher `versionCode`** than every previous upload.
description, and the deferred and interrupted impact. Every `OperationKind` is local — `COPY`,
`MOVE`, `DELETE`, `COMPRESS`, `EXTRACT` — and the app has no `INTERNET` permission, so network
processing, backup/restore and media transcoding are explicitly not ticked. It also records that
the required video is **not** the All files access one: [FGS_VIDEO](docs/FGS_VIDEO.md) holds an
**18.0 s** captioned take of the local copy — selection, Copy, Paste here, the notification with
its progress bar, and the completed folder — cut from a 35.2 s raw recording to remove the two
waits, with every filename synthetic. The traps are written down too: no Up after Copy, and open
the shade only once the notification exists.
the required video is **not** the All files access one: [FGS_VIDEO](docs/FGS_VIDEO.md) holds a
**16.1 s** captioned take of the local copy — selection, **Copy to…**, the destination picker,
**Copy here**, the notification with its progress bar, and the completed folder — cut from a
41.0 s raw recording to remove the two waits, with every filename synthetic. The traps are written
down too: the picker recentres at every level, and open the shade only once the notification
exists and let it settle.
- **A dot marks what an operation just produced.** Copy something, extract an archive, rename a file or make a
folder, and the rows it created carry a small dot until you open that folder again — so "what did that 4 GB
@@ -277,6 +278,20 @@ upload needs a **higher `versionCode`** than every previous upload.
### Changed
- **Copy and Cut are now Copy to… and Cut to…, and the clipboard is gone.** The selection bar's
first two actions open the destination picker directly; choosing a folder starts the copy — or the
cut — without leaving the folder you are in. The separate clipboard state, **Paste here**, and the
overflow's duplicate **Copy to… / Move to…** entries are removed, and the picker's cut verb reads
**Cut to… / Cut here**. A copy still keeps the selection for a second destination; a cut still
clears it because those rows leave; conflicts still ask, naming the picked folder. Five tests that
exercised the clipboard were removed, and the mark, restart and undo tests now go through the
picker; the foreground-service video was re-recorded against the new bar. Driven on the Xiaomi
phone: Copy to… copied 120 × 16 MB and Cut to… moved one file, and the top-bar overflow has no
Paste.
Why: the clipboard made a copy a two-step detour through another folder, which is exactly what M16
built the picker to avoid. Keeping both would have left two meanings for “Copy” in one bar.
- **File thumbnails are bigger.** The leading visual in a list row went from 28 dp to 48 dp and
the one in a grid cell from 40 dp to 96 dp, with the grid's minimum column width raised from
108 dp to 144 dp so the larger tile and the two-line name under it still fit. Neither size was