Follow-up to the rotation finding in #173.
The PR now dismisses the progress window before touching a destroyed Activity, so a completed import no longer tries to show a dialog through a dead window. The blocking subscription is still Activity-owned, however: rotating during a long import loses the visible operation and its eventual result.
Move history-import ownership into a ViewModel so that:
- the import continues across Activity recreation;
- the recreated My Devices screen reconnects to current progress;
- exactly one final success or failure result is delivered;
- added rows still refresh the device list and notify the map;
- leaving the screen intentionally does not leak the Activity.
The progress/importer seam added in #173 should allow this to be tested with a latch-controlled fake.
Follow-up to the rotation finding in #173.
The PR now dismisses the progress window before touching a destroyed Activity, so a completed import no longer tries to show a dialog through a dead window. The blocking subscription is still Activity-owned, however: rotating during a long import loses the visible operation and its eventual result.
Move history-import ownership into a ViewModel so that:
The progress/importer seam added in #173 should allow this to be tested with a latch-controlled fake.