PR 2/3: Experimental Native Call - headless - #7745
BillCarsonFr wants to merge 5 commits into
Conversation
|
📱 Scan the QR code below to install the build (arm64 only) for this PR. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## feature/valere/native_call_entry_point #7745 +/- ##
==========================================================================
- Coverage 81.05% 80.99% -0.07%
==========================================================================
Files 2794 2798 +4
Lines 82690 82804 +114
Branches 11384 11398 +14
==========================================================================
+ Hits 67027 67063 +36
- Misses 11277 11355 +78
Partials 4386 4386 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
a3503fa to
f535b7d
Compare
The component and the matrix-rust-rtc core publish as GitHub release assets rather than to Maven, so two filtered ivy repositories resolve them; both become plain coordinates the day they reach Maven Central. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The factory lives in libraries/matrix/impl because that is the only module compiled against the Rust SDK, and is app-scoped because a call is started for whichever account it belongs to rather than the one on screen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Keyed by session id in app scope rather than session-scoped, because answering a call notification after a cold start has no session graph to reach a session-scoped stack from. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Found on a device: with no UI to answer the microphone permission or unset the maximized snapshot, the call parks forever and blanks the screen through the proximity wake lock. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The notification's Answer action named ElementCallActivity outright, so answering always opened the WebView whatever FeatureFlags.NativeCall was set to. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
bb6c040 to
5de162e
Compare
|
@jmartinesp I modified the PR and forced push it. Your previous comment is on code that has been removed. There is a point about the dependency that I am not sure about, right now the native call component and the matrix-rust-rtc core publish as GitHub release asset. Is this is a blocker? Should I publish on maven? Other than that I updated the PR description to say more about the content. |
|
jmartinesp
left a comment
There was a problem hiding this comment.
The code in the PR seems ok, and I tested the feature and it worked well overall.
There is a point about the dependency that I am not sure about, right now the native call component and the matrix-rust-rtc core publish as GitHub release asset. Is this is a blocker? Should I publish on maven?
I think this is ok, but ideally we'd publish the libraries to maven central in the future.
Other than that, a few things I noticed which I'm not sure if are part of the integration or the EC native project:
- When you are in a call for a DM and the other user hangs up, the call doesn't end for you AFAICT. I always have to hang up manually in the notification.
- Clicking on 'mute microphone' doesn't modify the notification, so it always displays 'mute microphone' (also, the text is cut-off).
- At least once, I started a call from EW, replied on EXA an although I could see the call happening on both devices, none received sound AFAICT. Muting and unmuting did nothing. I haven't found a way to reproduce this though, it seemed quite random.
I haven't tested that PR stand-alone a lot. Do you have these issue with the 3/3 top of the stack? |
I haven't tested that one yet, but I can take a look. |
|
Yes, it still has both DM and mute microphone issues + a few new ones with PiP. I guess the PiP change triggered within the EC native UI is different than the one we trigger when leaving the screen in EXA? |



Content
This PR allows to accept incoming audio call without any UI (via the notifcation to accept then hangup).
In a nutshell, there is an
ElementCallStackthat needs to be created (it is done lazilly seegetOrBuildand per account -for multi account-), this setups the wireing needed for the rust core to talk and listen to the matrix client. I exists when there is no call.From the
stackobject, you can now access theElementCallController, this is the thing that will actually start/join a call and maintain an active call.The flow is the following:
ElementCallEntryPointElementCallEntryPointreads the lab flag and forwards to theNativeCallEntryPointNativeCallEntryPointuse theElementCallControllerto start the callMotivation and context
Screenshots / GIFs
Tests
Tested devices
Checklist