The session moves from the connection screen's ViewModel into an
app-wide SessionController, and a foreground service keeps the process
running while connected:
- Its notification shows the server and status and offers Mute, Deafen
and Disconnect.
- It declares microphone use only once the microphone is handed to the
connection, as Android requires that permission to be granted then.
- It holds a low-latency Wi-Fi lock and a CPU wake lock, since voice
goes out every 20 ms.
- When the system moves to another network, the session reconnects to
where it was, as its socket stays bound to the old one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>