User Flows
This document explains the major user-visible flows in the app.
Connect And Browse
- The app launches and starts browsing for camera-class devices.
- A connected iPhone appears in the sidebar.
- The user selects the device, or the app auto-selects the first one.
- The manager opens a device session.
- Once the device is ready, the app builds a list of media files.
- The grid shows those files.
- Visible cells request thumbnails as they appear.
Search
- The user types in the toolbar search field.
MediaGridView filters the current media list by filename.
- The grid immediately updates to show matching items only.
Select All operates on visible results, not hidden ones.
Sort
- The user chooses a sort field.
- The user can reverse the direction with the arrow button.
- The grid recomputes the display order from the current visible set.
Filter By Size Or Date
- The user opens the filter popover.
- The user chooses either
Size or Date mode.
- The user enters a valid range.
- The filter becomes active only when the input is valid.
- The grid recomputes the visible file list.
- The toolbar shows that a filter is active.
Selection
The selection system follows common desktop conventions.
- Click selects one item.
- Clicking the only selected item again clears selection.
- Command-click toggles an item.
- Shift-click selects a range from the anchor item.
- Command-A selects all visible items.
- Escape clears selection.
Delete
- The user selects one or more items.
- The user presses the delete action.
- The app asks for confirmation.
- The manager requests deletion from the device.
- Successful deletions are removed from local state.
- Partial failures produce an error message but still remove successful items.
Device Disconnect
- The user disconnects the iPhone while the app is open.
- ImageCaptureCore reports device removal.
- The manager clears selection-related device state.
- Thumbnail tasks are canceled.
- The grid disappears and the empty state returns.
- The app shows a device disconnected message.
Failure Handling
The app has explicit handling for these scenarios:
- session open takes too long
- session open fails
- thumbnail request takes too long
- thumbnail data is missing or undecodable
- delete request times out
- delete partially fails
- device disconnects during use
These failures are translated into user-facing strings through AppError.