- Delete the source file once an upload is confirmed (best-effort: SAF
picks get a persisted read+write grant and are removed; read-only
shared streams are left in place). Cache copy always removed. A removed
source shows as 'removed from phone'.
- Distinguish duplicates: a HEAD (or the server's 200 existed) marks the
item 'Duplicate · already on server' — content is never re-sent or
overwritten, since the name IS the sha256. Different content = different
hash = a new file, not a duplicate.
- 'Clear history' app-bar button clears finished/duplicate/failed rows.
- Register as an 'Open with' target (ACTION_VIEW, content/file) in
addition to the existing share-sheet target.
- Room schema v2 (destructive fallback; queue is ephemeral).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>