# Edge cases

Walk the changed behaviour through every row that the change can reach. For each,
answer handled / not handled / not reachable, with file:line. Skip sections the
app has no equivalent for, and add the risky cases you find in this repo's own
code (say which ones you added).

## Whole app
- Offline ↔ online flip mid-action (toggle airplane mode while a request runs).
- Guest / signed-out vs signed in (no account, some features hidden).
- First launch / fresh install (no prefs, no cached content).
- Process death and restore (activity recreated, ViewModel state gone unless saved).
- Fragment view destroyed while work runs (`viewLifecycleOwner` vs fragment lifecycle).
- Rapid repeat taps / double taps on the same control (re-entrancy, duplicate requests).
- RTL languages (`values-ar`, `values-fa`): mirrored layouts, text direction.
- Error path leaves no stale state: loaders closed, buttons re-enabled, flags reset.

## Large or editable content (canvas, editor, long lists)
- Empty screen vs one holding thousands of items.
- Many pages / page or tab switch while an operation is in flight.
- Zoomed or panned canvas (are coordinates stored before or after the transform?).
- Undo / redo across the changed behaviour.
- Autosave or background sync running concurrently with the changed code.
- Every item type on screen (does the change apply to all types it should, and only those?).
- Recording / screen capture active.

## WebView and floating UI
- WebView not created yet (first call arrives before lazy creation).
- Overlay or side sheet closed, or moved, mid-request.
- A request still in flight when a new one arrives.
- Offline content ready vs not ready; online feature tapped while offline.
- `@JavascriptInterface` callbacks arrive on a binder thread, not main.
