Implement Android move, copy, and delete workflows #108

Open
opened 2026-08-17 19:15:15 +00:00 by hugo · 0 comments
Owner

Goal

Expose storage-owned tree mutations through discoverable Material interactions without unsafe stale or destructive actions.

Scope

  • Provide swipe actions where appropriate plus overflow/context and TalkBack accessibility actions for Move, Copy, and Delete.
  • A full/destructive swipe may select Delete but must always stop at an explicit confirmation naming the storage-provided target.
  • Present storage-provided destination hierarchy, validation, collision, overwrite requirement, revision, and typed result for Move/Copy.
  • Invoke only typed Rust mutations and refresh affected panes while preserving the nearest valid navigation/selection state.
  • Coordinate with dirty/open editors, authentication, Git conflicts, concurrent repository operations, and stale row/revision identities.
  • Handle cancellation, destination disappearance, existing target, overwrite confirmation, partial I/O failure, relock, and process/background interruption without applying to the wrong item.
  • Keep all rollback, reencryption, recipient, filesystem, and commit-message semantics in crates/storage.

Acceptance criteria

  • Move, Copy, and Delete are available without relying solely on gestures.
  • Delete always requires confirmation; overwrite is explicit and cannot be inferred from a display string.
  • Stale rows/revisions cannot mutate a replacement entry.
  • Cancellation/failure leaves the repository, editor sessions, and navigation coherent.
  • Upstream-compatible encrypted fixtures prove selective reencryption and rollback behavior while Compose tests verify interaction/accessibility.

Depends on hierarchical navigation, entry editing, and lifecycle security. Part of #87.

## Goal Expose storage-owned tree mutations through discoverable Material interactions without unsafe stale or destructive actions. ## Scope - Provide swipe actions where appropriate plus overflow/context and TalkBack accessibility actions for Move, Copy, and Delete. - A full/destructive swipe may select Delete but must always stop at an explicit confirmation naming the storage-provided target. - Present storage-provided destination hierarchy, validation, collision, overwrite requirement, revision, and typed result for Move/Copy. - Invoke only typed Rust mutations and refresh affected panes while preserving the nearest valid navigation/selection state. - Coordinate with dirty/open editors, authentication, Git conflicts, concurrent repository operations, and stale row/revision identities. - Handle cancellation, destination disappearance, existing target, overwrite confirmation, partial I/O failure, relock, and process/background interruption without applying to the wrong item. - Keep all rollback, reencryption, recipient, filesystem, and commit-message semantics in `crates/storage`. ## Acceptance criteria - Move, Copy, and Delete are available without relying solely on gestures. - Delete always requires confirmation; overwrite is explicit and cannot be inferred from a display string. - Stale rows/revisions cannot mutate a replacement entry. - Cancellation/failure leaves the repository, editor sessions, and navigation coherent. - Upstream-compatible encrypted fixtures prove selective reencryption and rollback behavior while Compose tests verify interaction/accessibility. Depends on hierarchical navigation, entry editing, and lifecycle security. Part of #87.
hugo added this to the 06 - Implement an Android version of the software milestone 2026-08-17 19:15:15 +00:00
hugo added the enhancement label 2026-08-17 19:15:15 +00:00
Sign in to join this conversation.