- Keep the grid composed under the viewer instead of swapping it for a
black box, removing the momentary black flash while the pager draws
its first frame after tapping a photo
- Restore the pre-audit fade: thumbnail stays fully opaque under the
fading-in full image instead of crossfading both over black
copy() ran on every state update (each drag-select step included) and eagerly
recomputed five derived properties: two unused O(N log N) sorts, an O(N)
selection filter, an O(N) selectable-URI set and its containsAll check.
- Remove sortedPhotos/sortedSubfolders: never read (the screen sorts with its
own remember() calls)
- selectedPhotos/selectablePhotoUris/allPhotosSelected become by lazy:
computed at most once per instance, only when actually read; body delegates
stay out of generated copy()/equals(), @Immutable semantics hold
- Memoize selectablePhotoUris across drag-select steps in the ViewModel keyed
by photos list identity, so a drag step no longer recomputes the O(N) set
- FolderTreePickerSheet: add contentType to lazy folder items for slot reuse
- GalleryScreen: use plain remember instead of derivedStateOf over non-state
inputs; defer photo fade alpha to Draw phase via graphicsLayer; react to
zoom threshold with snapshotFlow instead of per-frame effect relaunch
- GalleryViewModel: drop @Immutable from MovePhotoSheetState so Strong
Skipping compares the lazy feed by O(1) reference equality
- SystemCameraCapture: move temp-file disk I/O off the main thread