Repository navigation
Conversation
The client keeps only the connection keep-alive: it closes the connection in the background with no active call, and reopens it when it closed it or the connection dropped. Each active call mutes and restores its own camera and microphone, so the per-cid mute maps in StreamVideo are gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## feat/flu-863-call-ringing-controller #1439 +/- ##
========================================================================
+ Coverage 44.40% 44.59% +0.19%
========================================================================
Files 422 423 +1
Lines 31481 31506 +25
========================================================================
+ Hits 13979 14051 +72
+ Misses 17502 17455 -47 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
renefloor
added this pull request to stack #1442
October 9, 2026 06:12
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes FLU-858
Part of FLU-859 · 24/26, stacked on #1438
What changed
AppLifecycleController(lib/src/lifecycle/,@internal) handles the client's side of the app lifecycle:state.appLifecycleState.keepConnectionsAliveWhenInBackgroundis set.isConnected, andcloseConnection/openConnectioncallbacks. The callbacks also drop and restore the event subscription.openConnection()and re-add the event subscription on every resume, even when nothing had closed the connection. It now reopens when the controller closed the connection, or when the client reports it is no longer connected: a connection kept alive can still drop in the background.Callfollowsstate.appLifecycleStatewhile it is active.LocalMediaController(B1) gainsonAppPausedandonAppResumed, with the camera and microphone flags of that one call, and_multitaskingCameraAccessSupportedmoves in with them._mutedCameraByStateChangeand_mutedAudioByStateChangemaps inStreamVideoare gone.device.stateChangetrace moves with them.try/catchused to swallow the whole handler, so a failed close or a failed mute skipped everything after it. Now a failed close or reopen is logged and the controller goes on, and each call logs its own mute failures.Decisions to check
appLifecycleState, not the raw lifecycle stream.Callalready has the client state, and B6'sCallHostexposes it. The emitter replays its value when the call starts following it, but the call is not active yet at that point (_initruns beforesetActiveCall), so that value is never acted on. One test pins it: a call joined while the app is in the background is muted only the next time the app goes there.LocalMediaControllerhas no reconnect-specific path to pin.Tests
test/src/lifecycle/app_lifecycle_controller_test.dart(6), on the C2 fixture:test/src/call/call_background_mute_test.dart(5):setupMockClientStatestubsappLifecycleState.stream_video: 1309 passed;stream_video_push_notification: 67;stream_video_flutterwithout goldens: 729.🤖 Generated with Claude Code