- Pending/uploading rows get a cancel button; every cancel is confirmed
in a dialog and the source file is always kept — only a confirmed
upload deletes originals. The in-flight HTTP transfer aborts
immediately (async OkHttp call instead of blocking execute()).
- Enqueue refuses content whose SHA-256 is already pending/uploading,
so sharing or picking the same file twice no longer uploads it twice
in parallel (content URIs are opaque; the hash is the identity).
- Cancel/finish races resolved with conditional DB updates: a cancel
landing mid-flight keeps the source; a cancel after completion is
refused with a toast instead of flipping a finished row.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>