board: a long press on a card does what the editor's overflow does
Trash existed on Android and was three interactions deep — open the note, tap the overflow, Move to trash — with nothing at all on the board itself. The operator's read of that was not "the actions are in the editor"; it was "there are no long hold context menus in the app I have no way to delete notes." (#2946) The card now takes `combinedClickable` and raises a DropdownMenu holding the same items as the editor's overflow, in the same words, from the same string resources, dispatching the same `EditorAction`s through the same `BoardViewModel.onEditorAction`. A note has one vocabulary of things you can do to it, and reusing the exhaustive dispatcher means the board cannot grow a parallel one that drifts. Gated on `note.trashed` rather than on the board's destination — the same reading the editor uses for read-only, and the only one that survives Reminders and search, which both mix piles. Trash gets an UNDO snackbar rather than a confirmation. A long press is a gesture you can make by accident, so the mistake worth designing for is the one nobody meant to make, and a dialog only helps someone paying attention in the moment they were not. Delete forever keeps its dialog; that one does not undo. `MenuItem` and the delete-forever dialog move to Panel.kt now that two surfaces raise them, so there is one place for the close-before-acting order and one wording of the consequences. Colour is deliberately not in this menu, though #2946 suggested it: `note.color` and its picker come out in #3041, so a swatch row here would be building the one control already known to be leaving. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,14 @@
|
||||
<!-- Board -->
|
||||
<string name="board_empty_note">Empty note</string>
|
||||
|
||||
<!-- The long-press menu. Its ITEMS are the editor_* strings, deliberately: a
|
||||
note has one vocabulary of things you can do to it, and a board that said
|
||||
"Delete" where the editor says "Move to trash" would be describing two
|
||||
different apps. Only the wrapper and the undo need words of their own. -->
|
||||
<string name="board_note_actions">Note actions</string>
|
||||
<string name="board_trashed">Moved to trash</string>
|
||||
<string name="board_undo">Undo</string>
|
||||
|
||||
<!-- Empty states. Each destination says something true of ITSELF; a single
|
||||
"nothing here" reads as encouragement on the board and as a fault in Trash. -->
|
||||
<string name="board_empty_title">Nothing here yet</string>
|
||||
|
||||
Reference in New Issue
Block a user