Resolved Content Source
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.
Gating rules (the two paths differ deliberately, mirroring web's resolveContentSource):
Multi-party (
isMultiParty == true): a content tile renders whenever a primary content owner is resolved — INDEPENDENT or LEGACY. This is the existing behavior; legacy multi-party already presents the single video as a content tile. Unchanged.1:1 (
isMultiParty == false): a content tile renders ONLY when the primary content is INDEPENDENT. In the LEGACY 1:1 case the single video is physically swapped to the screen by the SDK and presented in the normal one-tile layout, so surfacing a content tile would double-render it. Gating strictly on INDEPENDENT keeps the legacy 1:1 single-tile experience byte-identical.