Serenada Call Flow
Pre-built call flow that manages the full call lifecycle.
Provide either a url (URL-first) or a session (session-first) to start a call. When a url is provided, the composable creates and owns the SerenadaSession internally. When a session is provided, the caller retains ownership and is responsible for closing it.
Parameters
Call URL to join. Mutually exclusive with session.
An externally created SerenadaSession. Mutually exclusive with url.
Feature flags controlling which UI controls are shown.
Visual customisation (colors, shapes, typography).
Optional display name shown in the call UI.
Whether remote video defaults to cover (crop-to-fill) mode.
Localized string overrides keyed by SerenadaString.
Called when the user taps the share-link control. Pass null to hide it.
Called when the user taps the invite control. Pass null to hide it.
Called when the user toggles remote video fit/fill mode.
Called when the user taps the end-call button. When null, the session leaves directly. When provided, the host owns any cleanup and dismissal for that button path.
Called with the android.media.projection.MediaProjection consent intent when the user starts screen sharing. Use this to start a foreground service with android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION before the projection begins. When null, the session handles screen sharing directly.
Called when the user stops screen sharing. Use this to downgrade the foreground service type. When null, the session handles it directly.
Called when the call ends and the UI should be dismissed, excluding a custom onEndCall button path.
Low-level call flow composable that takes explicit state and callbacks.
Use the higher-level SerenadaCallFlow overload (with url or session) for most integrations. This overload is for hosts that manage their own SerenadaSession and need full control over every callback and renderer attachment.
Parameters
Current call UI state, typically derived from CallState.
The room identifier for the active call.
Shareable room URL (e.g. "https://serenada.app/call/<roomId>") shown in the waiting overlay's QR code and share button. Pass null (typical when running with a custom app.serenada.core.SignalingProvider and no Serenada-hosted server) to hide both controls. When using the high-level overload, SerenadaSession.roomUrl is forwarded here.
Shared EGL context for WebRTC video rendering.
Optional display name shown in the call UI.
Custom renderer provider for advanced rendering setups.
Whether remote video defaults to cover (crop-to-fill) mode.
Feature flags controlling which UI controls are shown.
Visual customisation (colors, shapes, typography).
Localized string overrides keyed by SerenadaString.
Coordinator-published output routes available to the call UI.
Currently selected or active output route, if known.
Called when the user toggles the microphone.
Called when the user toggles the camera.
Called when the user cycles the camera mode.
Called when the user toggles the flashlight.
Called with the scale factor when the user pinch-zooms the local video.
Called when the user taps the end-call button.
Called when the user picks an audio route.
Called when the user taps the share-link control. Pass null to hide it.
Called when the user taps the invite control.
Called when the user toggles remote video fit/fill mode.
Called with the MediaProjection consent intent when screen sharing starts.
Called when screen sharing stops.
Attaches a SurfaceViewRenderer for the local video track.
Detaches the local video renderer.
Attaches a VideoSink for the local video track.
Detaches the local video sink.
Attaches a SurfaceViewRenderer for the remote video track.
Detaches the remote video renderer.
Attaches a VideoSink for a specific remote participant by CID.
Detaches the video sink for a specific remote participant.
Attaches a VideoSink for the remote video track.
Detaches the remote video sink.
Called when the call ends and the UI should be dismissed.