- Calls keep going with the app in the background: a foreground service
(CallService.kt, driven from lib/matrix/call_service.dart) declares the
microphone, the camera while it's on and the screen while it's shared.
Its notification (CallStyle) shows the call's length, opens the call
and hangs up. Swiping the app away ends the call.
- Screen sharing on Android: consent, then media projection on the
service, then LiveKit publishes a screen-share track. A shared screen
replaces the sharer's camera on their tile, shown whole and unmirrored;
stopping it from Android's controls stops the share.
- Read receipts per thread (MSC3771): an open thread sends receipts with
thread_id, "Read" under replies comes from receipts in the thread, and
threads with unread replies get a dot on "N replies" and in the list.
Not tested on a device yet. README updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Replies: Reply on a message's long press puts it above the composer;
sent replies quote the message they answer (sender and first line),
with the reply fallback left out of the body.
- Reactions: six quick ones and any other on long press, chips under the
message with counts, the user's own highlighted; tapping a chip adds or
takes back a reaction, a long press lists who reacted.
- Threads: Reply in thread opens a thread view (the root, then its
replies, older ones fetched from /relations, new ones live from the room
timeline) with a composer that sends into the thread. Thread replies
are hidden from the main timeline; the root shows "N replies". Room info
lists the room's threads (/threads).
The composer moved out of the room screen into widgets/composer.dart so
the room and thread views share it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>