Package-level declarations
Types
Resolves an avatar for a remote participant's host-supplied peerId (passed to SerenadaCore.join). The call UI renders the returned avatar cover-fit, cropped to a circle above the participant's name when their remote video track is off.
Image payload returned by an AvatarProvider.
Subset of local participant state this module reads.
mode distinguishes the independent content stream from the legacy single-video-as-content fallback.
Subset of a remote participant this module reads.
The call phases during which the content-stage layout may render. Mirrors the subset of app.serenada.core.call.CallPhase the call UI treats as an active call; kept local so this helper stays free of Compose/Android types and is JVM-unit-testable. Every other app.serenada.core.call.CallPhase maps to Other (never renders the content stage).
The Frontline call UI's INDEPENDENT-content decision for one render.
Inputs to the content resolver for one render.
Resolved content presentation for a single owner.
The content-role input to the layout (app.serenada.core.layout.ContentSource), or null when no content tile should render. This is the render-logic seam that decides WHEN the content-stage layout fires — pure so it can be unit tested.
A participant whose camera/avatar tile the stage needs (local or remote).
Identity of a single stage tile: a participant cid + which stream of theirs.
Functions
Derive the full ordered stream-keyed tile list for the stage.
A Frontline remote screen-share full-screen request is valid only while the same source is still the current remote screen-share spotlight. If the stream ends or spotlight moves, the UI falls back to the framed view automatically.
Frontline remote screen shares always render with fit-style scaling. The legacy camera fit/cover preference still applies to remote camera tiles.
Parse a stage tile id back into its {cid, kind} key, or null if malformed. Uses lastIndexOf("::") so cids that themselves contain "::" round-trip.
Pick the primary content owner among local + multiple simultaneous remote sharers.
Resolve the spotlight (primary) tile id among the derived tiles.
The content-role input to the layout, or null when no content tile should render. See ResolvedContentSource for the gating rationale.
Resolve the Frontline INDEPENDENT content decision from a ContentScene. Pure so it can be unit tested without Compose. Returns null unless the chosen primary content is an INDEPENDENT screen-share track (the only case the new dedicated content path engages); every other case keeps the legacy single-video path.
Resolve content for the local participant.
Resolve content for every remote participant that is presenting.
Pre-built call flow that manages the full call lifecycle.
Low-level call flow composable that takes explicit state and callbacks.
Decide WHEN the content-stage render branch fires, gated on the call phase. Pure so it can be unit tested without Compose. Mirrors web's shouldRenderContentStage.
Stable string id for a stage tile (the SceneParticipant.id fed to layout).
Structural, null-safe equality for two tile keys.