Files
amethyst/commons
Claude 25fa0c4901 fix: audit of the one-UI migration branch
Bugs:
- Single-image uploads (avatar, banner, emoji packs, relay group,
  long-form cover) report a metadata-strip failure as "Metadata could not
  be removed" again instead of a generic upload error, and long-form
  covers are not stripped, as before the move to uploadToDefaultServer.
- AndroidMediaUploader moves to Dispatchers.IO itself: the calendar event
  composer called it from a Main-bound scope, hashing and decoding images
  on the UI thread.
- Chat "retry without encryption" did nothing in hold mode: the retry
  state was only captured for send.
- Pickers (gallery, file, document) keep their launched flag across an
  activity recreation, and the Concord and geocache pickers keep their
  open flag, so a picked image is no longer dropped or the picker
  reopened after a rotation.
- Android's DateSkeletonFormatter keys its cache on the time zone, and the
  wallet rows format month, day and time as one locale pattern again.
- Deep-link query lookup drops a #fragment, as java.net.URI did.
- Pasting an empty clipboard no longer wipes a typed invoice.
- BuzzDmListViewModel decides "new channel" with one atomic insert.
- StringMediaUri compares by value (temp-file cleanup compares URIs) and
  lastPathSegmentOrNull matches Android (decoded, null without a path).
- Cordn attachments no longer log a false "could not delete" warning.
- HiddenAccountsFeedViewModel.Factory accepts a supertype request again.

Performance:
- rememberViewModel's lambda overload builds its factory once per call
  site instead of per recomposition.
- The upload video thumbnail decodes a scaled frame and releases its
  MediaMetadataRetriever.
- Active subscriptions polling runs in the screen's effect, so revisits
  no longer stack loops.
- Zap button configs are remembered and marked @Immutable.

Also drops dead code (an unused formatter and Context locals) and adds
tests for the query lookup, MediaUri and the month/day/time skeleton.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S7FuNBSKiyVecARSoE4B9P
2026-09-29 21:00:10 +00:00
..