Move @Preview composables out of published artifact to fix R8 builds#1730
Move @Preview composables out of published artifact to fix R8 builds#1730PratimMallick wants to merge 3 commits into
Conversation
…fix R8 builds Compose-generated ComposableSingletons classes referenced the compileOnly stream-video-android-previewdata module (StreamPreviewDataUtils, previewCall, etc.) from production code, breaking consumers' minified (R8) release builds with "Missing class" errors. - Move all @Preview composables from src/main into a new debug-only source set (one <Name>Preview.kt per file), so preview-data is never referenced from the release artifact. - Change previewdata dependency from compileOnly to debugImplementation. - Declare kotlinx-datetime explicitly (used by the livestream countdown UI) so it no longer leaks in transitively, fixing the related kotlinx.datetime R8 missing-class errors. Fixes #1448 Co-authored-by: Cursor <cursoragent@cursor.com>
WalkthroughThis PR moves Compose preview code from main to debug sources, adds an explicit ChangesCompose preview source-set split
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/SpotlightVideorendererPreview.kt (1)
1-91:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRename file to follow PascalCase convention.
The filename uses lowercase 'r' in "Videorenderer" but should be "VideoRenderer" to match PascalCase naming conventions. The file should be renamed from
SpotlightVideorendererPreview.kttoSpotlightVideoRendererPreview.ktfor consistency with the component being previewed (SpotlightVideoRenderer) and other preview files in the codebase.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/SpotlightVideorendererPreview.kt` around lines 1 - 91, The filename SpotlightVideorendererPreview.kt uses incorrect casing with a lowercase 'r' in "Videorenderer" which violates PascalCase naming conventions. Rename the file from SpotlightVideorendererPreview.kt to SpotlightVideoRendererPreview.kt to properly match the PascalCase convention and align with the SpotlightVideoRenderer component being previewed. This change is only to the filename itself and requires no modifications to the file contents.Source: Coding guidelines
🧹 Nitpick comments (9)
stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/SettingsActionPreview.kt (1)
27-27: 💤 Low valueConsider marking debug preview as
private.Debug-only preview functions typically use
privatevisibility since they're not part of the module's public API surface.♻️ Suggested change
-public fun ToggleSettingsActionPreview() { +private fun ToggleSettingsActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/SettingsActionPreview.kt` at line 27, The ToggleSettingsActionPreview function is marked as public visibility, but since it is a debug-only preview function and not part of the module's public API surface, it should be marked as private. Change the visibility modifier from public to private in the function declaration of ToggleSettingsActionPreview.stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ClosedCaptionsToggleActionPreview.kt (1)
27-27: 💤 Low valueConsider marking debug preview as
private.Debug-only preview functions typically use
privatevisibility since they're not part of the module's public API surface.♻️ Suggested change
-public fun ClosedCaptionsToggleActionPreview() { +private fun ClosedCaptionsToggleActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ClosedCaptionsToggleActionPreview.kt` at line 27, The function ClosedCaptionsToggleActionPreview is currently marked as public, but since it is a debug-only preview function that is not part of the public API surface, change its visibility modifier from public to private to properly reflect its internal-only scope.stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleMicrophoneActionPreview.kt (1)
27-27: 💤 Low valueConsider marking debug preview as
private.Debug-only preview functions typically use
privatevisibility since they're not part of the module's public API surface.♻️ Suggested change
-public fun ToggleMicrophoneActionPreview() { +private fun ToggleMicrophoneActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleMicrophoneActionPreview.kt` at line 27, The ToggleMicrophoneActionPreview function is currently declared with public visibility, but since this is a debug-only preview function, it should not be exposed as part of the module's public API. Change the visibility modifier of the ToggleMicrophoneActionPreview function from public to private to restrict its scope to internal use only.stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleHifiAudioActionPreview.kt (1)
27-27: 💤 Low valueConsider marking debug preview as
private.Debug-only preview functions typically use
privatevisibility since they're not part of the module's public API surface.♻️ Suggested change
-public fun ToggleHifiAudioActionPreview() { +private fun ToggleHifiAudioActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleHifiAudioActionPreview.kt` at line 27, The ToggleHifiAudioActionPreview function is marked as public, but debug-only preview functions should not be part of the public API surface. Change the visibility modifier of the ToggleHifiAudioActionPreview function from public to private to indicate that it is only for internal debug/preview purposes and should not be exposed as part of the module's public API.stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallActionPreview.kt (1)
26-26: 💤 Low valueConsider marking debug preview as
private.Debug-only preview functions typically use
privatevisibility since they're not part of the module's public API surface.♻️ Additional change
-public fun LeaveCallActionPreview() { +private fun LeaveCallActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallActionPreview.kt` at line 26, The function LeaveCalLActionPreview() is marked with public visibility, but as a debug-only preview function, it should not be part of the module's public API surface. Change the visibility modifier from public to private on the LeaveCalLActionPreview() function definition to restrict its scope to internal use only.stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleCameraActionPreview.kt (1)
27-27: 💤 Low valueConsider marking debug preview as
private.Debug-only preview functions typically use
privatevisibility since they're not part of the module's public API surface.♻️ Suggested change
-public fun ToggleCameraActionPreview() { +private fun ToggleCameraActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleCameraActionPreview.kt` at line 27, The ToggleCameraActionPreview function is marked as public but should be private since it is a debug-only preview function and should not be exposed as part of the module's public API. Change the visibility modifier of ToggleCameraActionPreview from public to private to restrict its visibility to the debug module only.stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleSpeakerphoneActionPreview.kt (1)
25-27: ⚡ Quick winPrefer
privatevisibility for preview functions.Preview composables are consumed only by IDE tooling and do not need
publicvisibility. Other preview files in this PR consistently useprivate.♻️ Suggested visibility change
`@Preview` `@Composable` -public fun ToggleSpeakerphoneActionPreview() { +private fun ToggleSpeakerphoneActionPreview() {As per coding guidelines, prefer explicit visibility modifiers and limit unnecessary exposure.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleSpeakerphoneActionPreview.kt` around lines 25 - 27, Change the visibility modifier of the ToggleSpeakerphoneActionPreview function from public to private. Preview composables are only consumed by IDE tooling and do not require public visibility. Replace the public keyword with private to align with the visibility modifiers used consistently in other preview files within this PR and follow the coding guidelines for explicit visibility modifiers with appropriate exposure levels.Source: Coding guidelines
stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/pinning/ParticipantActions.kt (1)
156-164: Visibility widened tointernalfor debug preview access.The visibility change from
privatetointernalallows debug preview files to call this composable. While this is necessary for the preview relocation approach, it exposes the function throughout the module. Consider whether the preview could use the publicParticipantActionswrapper instead, or document why direct access to the stateless variant is required.As per coding guidelines, limit
internalleakage across modules.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/pinning/ParticipantActions.kt` around lines 156 - 164, The function ParticipantActionsWithoutState has been changed from private to internal visibility to enable debug preview access, but this unnecessarily exposes the function throughout the module. Either revert the visibility of ParticipantActionsWithoutState back to private and use the public ParticipantActions wrapper instead in preview files, or if direct access to the stateless variant is truly required, add clear documentation explaining why the preview cannot use the public wrapper and why this internal exposure is necessary.Source: Coding guidelines
stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareVideoRendererPreview.kt (1)
30-40: 💤 Low valueReorder initialization for consistency.
The
StreamPreviewDataUtils.initializeStreamVideocall is placed inside theVideoThemecomposable, while all other preview files initialize before theVideoThemewrapper. For consistency and clarity, consider moving the initialization outside.♻️ Suggested reordering
`@Preview` `@Composable` private fun ScreenShareVideoRendererPreview() { + StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) VideoTheme { - StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) ScreenShareVideoRenderer(🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareVideoRendererPreview.kt` around lines 30 - 40, In the ScreenShareVideoRendererPreview function, the StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) call is currently placed inside the VideoTheme composable block. Move this initialization call outside and before the VideoTheme wrapper to match the pattern used in other preview files for consistency and clarity.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/CallAppBarPreview.kt`:
- Line 31: Remove the unnecessary ExperimentalTime annotation and its import
since Kotlin 1.9.25 has stabilized the Duration API. Delete the import statement
for kotlin.time.ExperimentalTime and remove the `@ExperimentalTime` annotation
that is applied to the code (likely on a composable function or property around
line 35 in CallAppBarPreview.kt).
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/FlipCameraActionPreview.kt`:
- Line 25: The preview function FlipActionPreview should be renamed to
FlipCameraActionPreview to match the file name FlipCameraActionPreview.kt and
the component FlipCameraAction that it previews. This ensures consistent naming
conventions across preview files and improves code discoverability.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallActionPreview.kt`:
- Line 26: The function name LeaveCalLActionPreview contains a typo with an
incorrect uppercase L in "CalL". Rename this function to LeaveCallActionPreview
to match the file name and maintain consistent naming conventions. This typo
appears in the function declaration and should be corrected wherever this
function is referenced or exported.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/FloatingParticipantVideoPreview.kt`:
- Around line 36-46: The screenWidthDp and screenHeightDp values are in
density-independent pixels (DP), but the parentBounds parameter in the
FloatingParticipantVideo function expects pixel dimensions. To fix this, access
the LocalDensity composable and use its density value to convert the DP
measurements to actual pixels before creating the IntSize object. Multiply each
DP dimension by the density.density value to get the correct pixel dimensions
for the parentBounds parameter.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitScreenSharingVideoRendererPreview.kt`:
- Around line 52-64: The PortraitScreenSharingMyContentPreview function is
missing the StreamPreviewDataUtils initialization call that is present in the
first preview function. Add a call to
StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) at the
beginning of the PortraitScreenSharingMyContentPreview() function, before the
VideoTheme block, to ensure preview data objects render correctly and match the
initialization pattern used in the other preview function.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/video/VideoRendererPreview.kt`:
- Line 40: The org.webrtc.VideoTrack constructor on lines 40 and 57 in
VideoRendererPreview.kt is being passed an Int literal (123) when it expects a
Long type for the native handle. Replace both occurrences of
org.webrtc.VideoTrack(123) with org.webrtc.VideoTrack(1000L) to match the
correct type and align with the pattern used in CallLobbyPreview.kt and
CallLobby.kt.
---
Outside diff comments:
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/SpotlightVideorendererPreview.kt`:
- Around line 1-91: The filename SpotlightVideorendererPreview.kt uses incorrect
casing with a lowercase 'r' in "Videorenderer" which violates PascalCase naming
conventions. Rename the file from SpotlightVideorendererPreview.kt to
SpotlightVideoRendererPreview.kt to properly match the PascalCase convention and
align with the SpotlightVideoRenderer component being previewed. This change is
only to the filename itself and requires no modifications to the file contents.
---
Nitpick comments:
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ClosedCaptionsToggleActionPreview.kt`:
- Line 27: The function ClosedCaptionsToggleActionPreview is currently marked as
public, but since it is a debug-only preview function that is not part of the
public API surface, change its visibility modifier from public to private to
properly reflect its internal-only scope.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallActionPreview.kt`:
- Line 26: The function LeaveCalLActionPreview() is marked with public
visibility, but as a debug-only preview function, it should not be part of the
module's public API surface. Change the visibility modifier from public to
private on the LeaveCalLActionPreview() function definition to restrict its
scope to internal use only.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/SettingsActionPreview.kt`:
- Line 27: The ToggleSettingsActionPreview function is marked as public
visibility, but since it is a debug-only preview function and not part of the
module's public API surface, it should be marked as private. Change the
visibility modifier from public to private in the function declaration of
ToggleSettingsActionPreview.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleCameraActionPreview.kt`:
- Line 27: The ToggleCameraActionPreview function is marked as public but should
be private since it is a debug-only preview function and should not be exposed
as part of the module's public API. Change the visibility modifier of
ToggleCameraActionPreview from public to private to restrict its visibility to
the debug module only.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleHifiAudioActionPreview.kt`:
- Line 27: The ToggleHifiAudioActionPreview function is marked as public, but
debug-only preview functions should not be part of the public API surface.
Change the visibility modifier of the ToggleHifiAudioActionPreview function from
public to private to indicate that it is only for internal debug/preview
purposes and should not be exposed as part of the module's public API.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleMicrophoneActionPreview.kt`:
- Line 27: The ToggleMicrophoneActionPreview function is currently declared with
public visibility, but since this is a debug-only preview function, it should
not be exposed as part of the module's public API. Change the visibility
modifier of the ToggleMicrophoneActionPreview function from public to private to
restrict its scope to internal use only.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleSpeakerphoneActionPreview.kt`:
- Around line 25-27: Change the visibility modifier of the
ToggleSpeakerphoneActionPreview function from public to private. Preview
composables are only consumed by IDE tooling and do not require public
visibility. Replace the public keyword with private to align with the visibility
modifiers used consistently in other preview files within this PR and follow the
coding guidelines for explicit visibility modifiers with appropriate exposure
levels.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareVideoRendererPreview.kt`:
- Around line 30-40: In the ScreenShareVideoRendererPreview function, the
StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) call is
currently placed inside the VideoTheme composable block. Move this
initialization call outside and before the VideoTheme wrapper to match the
pattern used in other preview files for consistency and clarity.
In
`@stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/pinning/ParticipantActions.kt`:
- Around line 156-164: The function ParticipantActionsWithoutState has been
changed from private to internal visibility to enable debug preview access, but
this unnecessarily exposes the function throughout the module. Either revert the
visibility of ParticipantActionsWithoutState back to private and use the public
ParticipantActions wrapper instead in preview files, or if direct access to the
stateless variant is truly required, add clear documentation explaining why the
preview cannot use the public wrapper and why this internal exposure is
necessary.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 18520019-ee22-414e-b387-446015a6d092
📒 Files selected for processing (148)
CHANGELOG.mdgradle/libs.versions.tomlstream-video-android-ui-compose/api/stream-video-android-ui-compose.apistream-video-android-ui-compose/build.gradle.ktsstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioAppBarPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioControlActionsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioParticipantsGridPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioRoomContentPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/audio/ParticipantAudioPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/avatar/AvatarPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/avatar/InitialsAvatarPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/avatar/UserAvatarBackgroundPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/avatar/UserAvatarPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/background/CallBackgroundPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/base/BadgePreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/base/ContainerPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/base/DialogsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/base/InputFieldsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/base/StreamButtonPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/CallAppBarPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/AudioCallContentPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/CallContentPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/internal/InviteUsersDialogPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/ControlActionsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/AcceptCallActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/CancelCallActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ChatDialogActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ClosedCaptionsToggleActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/DeclineCallActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/FlipCameraActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/SettingsActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleCameraActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleHifiAudioActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleMicrophoneActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleSpeakerphoneActionPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/lobby/CallLobbyPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/moderation/ModerationWarningUiContainerPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/pinning/ParticipantActionsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/FloatingParticipantVideoPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantVideoPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantsLayoutPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantsRegularGridPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LandscapeScreenSharingVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LandscapeVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LazyColumnVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LazyRowVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitScreenSharingVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareTooltipPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareVideoRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/SpotlightVideorendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/RingingCallContentPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallContentPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallControlsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallDetailsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallContentPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallControlsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallDetailsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/indicator/AudioVolumeIndicatorPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/indicator/GenericIndicatorPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/indicator/MicrophoneIndicatorPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/indicator/NetworkQualityIndicatorPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/indicator/SoundIndicatorPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamBackStagePreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamPlayerOverlayPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamPlayerPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamRendererPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/CallParticipantsInfoMenuPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/ParticipantAvatarsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantListAppBarPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantsInfoActionsPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantsListPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/InviteUserListPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/ParticipantInformationPreview.ktstream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/video/VideoRendererPreview.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioAppBar.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioControlActions.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioParticipantsGrid.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioRoomContent.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/ParticipantAudio.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/Avatar.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/InitialsAvatar.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/UserAvatar.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/UserAvatarBackground.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/background/CallBackground.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/Badge.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/Container.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/Dialogs.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/InputFields.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/StreamButton.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/CallAppBar.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/AudioCallContent.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/CallContent.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/internal/InviteUsersDialog.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/ControlActions.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/AcceptCallAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/CancelCallAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ChatDialogAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ClosedCaptionsToggleAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/DeclineCallAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/FlipCameraAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/SettingsAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleCameraAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleHifiAudioAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleMicrophoneAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleSpeakerphoneAction.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/lobby/CallLobby.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/moderation/ModerationWarningUiContainer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/pinning/ParticipantActions.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/FloatingParticipantVideo.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantVideo.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantsLayout.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantsRegularGrid.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LandscapeScreenSharingVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LandscapeVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LazyColumnVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LazyRowVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitScreenSharingVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareTooltip.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareVideoRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/SpotlightVideorenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/RingingCallContent.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallContent.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallControls.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallDetails.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallContent.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallControls.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallDetails.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/AudioVolumeIndicator.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/GenericIndicator.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/MicrophoneIndicator.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/NetworkQualityIndicator.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/SoundIndicator.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamBackStage.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamPlayer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamPlayerOverlay.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamRenderer.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/CallParticipantsInfoMenu.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/ParticipantAvatars.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantListAppBar.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantsInfoActions.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantsList.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/InviteUserList.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/ParticipantInformation.ktstream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/video/VideoRenderer.kt
💤 Files with no reviewable changes (70)
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/GenericIndicator.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallDetails.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/ControlActions.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/Badge.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/background/CallBackground.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallDetails.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleCameraAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioParticipantsGrid.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/AcceptCallAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantListAppBar.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/ParticipantInformation.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleHifiAudioAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallContent.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/SettingsAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/ParticipantAudio.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareTooltip.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/FlipCameraAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ClosedCaptionsToggleAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/CallContent.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/SoundIndicator.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantsLayout.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/internal/InviteUsersDialog.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantsInfoActions.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioAppBar.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallControls.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/ParticipantAvatars.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/SpotlightVideorenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/moderation/ModerationWarningUiContainer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantsRegularGrid.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/InputFields.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamBackStage.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ChatDialogAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/Avatar.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleMicrophoneAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/NetworkQualityIndicator.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/Container.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/UserAvatarBackground.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/AudioVolumeIndicator.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/outgoingcall/OutgoingCallContent.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/DeclineCallAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioRoomContent.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/incomingcall/IncomingCallControls.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamPlayerOverlay.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/video/VideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LandscapeScreenSharingVideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/activecall/AudioCallContent.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/livestream/LivestreamPlayer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/UserAvatar.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/ParticipantVideo.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LandscapeVideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/StreamButton.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/InviteUserList.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitScreenSharingVideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/indicator/MicrophoneIndicator.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/internal/CallParticipantsList.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/ScreenShareVideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/CancelCallAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LazyRowVideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/lobby/CallLobby.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/FloatingParticipantVideo.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/participants/CallParticipantsInfoMenu.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/LazyColumnVideoRenderer.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/ringing/RingingCallContent.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/base/Dialogs.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/audio/AudioControlActions.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/avatar/InitialsAvatar.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/ToggleSpeakerphoneAction.kt
- stream-video-android-ui-compose/src/main/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitVideoRenderer.kt
| import io.getstream.video.android.mock.StreamPreviewDataUtils | ||
| import io.getstream.video.android.mock.previewCall | ||
| import kotlin.time.Duration.Companion.milliseconds | ||
| import kotlin.time.ExperimentalTime |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check the Kotlin version configured in the project
# Check gradle.properties for kotlin version
rg -n 'kotlin.*version' gradle.properties gradle/libs.versions.toml
# Check if ExperimentalTime is used elsewhere
rg -n '`@ExperimentalTime`|kotlin\.time\.ExperimentalTime' --type kotlin
# Check build.gradle.kts for Kotlin plugin version
rg -n 'kotlin.*plugin.*version' --glob '**/build.gradle.kts'Repository: GetStream/stream-video-android
Length of output: 3496
🏁 Script executed:
# Find the Kotlin version definition in gradle/libs.versions.toml
rg -n '^\s*kotlin\s*=' gradle/libs.versions.tomlRepository: GetStream/stream-video-android
Length of output: 95
Remove unnecessary @ExperimentalTime annotation.
Kotlin 1.9.25 (the project's target version) stabilized the Duration API and removed the @ExperimentalTime annotation. The import at line 31 and the annotation at line 35 should be removed.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/CallAppBarPreview.kt`
at line 31, Remove the unnecessary ExperimentalTime annotation and its import
since Kotlin 1.9.25 has stabilized the Duration API. Delete the import statement
for kotlin.time.ExperimentalTime and remove the `@ExperimentalTime` annotation
that is applied to the code (likely on a composable function or property around
line 35 in CallAppBarPreview.kt).
|
|
||
| @Preview | ||
| @Composable | ||
| private fun FlipActionPreview() { |
There was a problem hiding this comment.
Rename preview function to match file name and component.
The function is named FlipActionPreview but the file is FlipCameraActionPreview.kt and it previews FlipCameraAction. Consistent naming improves discoverability and follows the pattern established in other preview files.
🔧 Suggested fix
-private fun FlipActionPreview() {
+private fun FlipCameraActionPreview() {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/FlipCameraActionPreview.kt`
at line 25, The preview function FlipActionPreview should be renamed to
FlipCameraActionPreview to match the file name FlipCameraActionPreview.kt and
the component FlipCameraAction that it previews. This ensures consistent naming
conventions across preview files and improves code discoverability.
|
|
||
| @Preview | ||
| @Composable | ||
| public fun LeaveCalLActionPreview() { |
There was a problem hiding this comment.
Fix typo in function name.
The function is named LeaveCalLActionPreview with an uppercase L in "CalL". It should be LeaveCallActionPreview to match the component name and file name.
🔧 Suggested fix
-public fun LeaveCalLActionPreview() {
+public fun LeaveCallActionPreview() {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| public fun LeaveCalLActionPreview() { | |
| public fun LeaveCallActionPreview() { |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/controls/actions/LeaveCallActionPreview.kt`
at line 26, The function name LeaveCalLActionPreview contains a typo with an
incorrect uppercase L in "CalL". Rename this function to LeaveCallActionPreview
to match the file name and maintain consistent naming conventions. This typo
appears in the function declaration and should be corrected wherever this
function is referenced or exported.
| val configuration = LocalConfiguration.current | ||
| val screenWidth = configuration.screenWidthDp | ||
| val screenHeight = configuration.screenHeightDp | ||
|
|
||
| VideoTheme { | ||
| Box { | ||
| FloatingParticipantVideo( | ||
| call = previewCall, | ||
| modifier = Modifier.fillMaxSize(), | ||
| participant = previewParticipant, | ||
| parentBounds = IntSize(screenWidth, screenHeight), |
There was a problem hiding this comment.
Potential unit mismatch: DP values used for pixel-based IntSize.
screenWidthDp and screenHeightDp return density-independent pixel (DP) values, but IntSize for parentBounds typically expects actual pixel dimensions. This may cause incorrect sizing in the preview.
Consider converting DP to pixels using density, or verify that parentBounds accepts DP values.
🔧 Potential fix to convert DP to pixels
StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current)
val configuration = LocalConfiguration.current
+ val density = LocalDensity.current
val screenWidth = configuration.screenWidthDp
val screenHeight = configuration.screenHeightDp
VideoTheme {
Box {
FloatingParticipantVideo(
call = previewCall,
modifier = Modifier.fillMaxSize(),
participant = previewParticipant,
- parentBounds = IntSize(screenWidth, screenHeight),
+ parentBounds = with(density) { IntSize(screenWidth.dp.roundToPx(), screenHeight.dp.roundToPx()) },
)
}
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| val configuration = LocalConfiguration.current | |
| val screenWidth = configuration.screenWidthDp | |
| val screenHeight = configuration.screenHeightDp | |
| VideoTheme { | |
| Box { | |
| FloatingParticipantVideo( | |
| call = previewCall, | |
| modifier = Modifier.fillMaxSize(), | |
| participant = previewParticipant, | |
| parentBounds = IntSize(screenWidth, screenHeight), | |
| val configuration = LocalConfiguration.current | |
| val density = LocalDensity.current | |
| val screenWidth = configuration.screenWidthDp | |
| val screenHeight = configuration.screenHeightDp | |
| VideoTheme { | |
| Box { | |
| FloatingParticipantVideo( | |
| call = previewCall, | |
| modifier = Modifier.fillMaxSize(), | |
| participant = previewParticipant, | |
| parentBounds = with(density) { IntSize(screenWidth.dp.roundToPx(), screenHeight.dp.roundToPx()) }, |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/FloatingParticipantVideoPreview.kt`
around lines 36 - 46, The screenWidthDp and screenHeightDp values are in
density-independent pixels (DP), but the parentBounds parameter in the
FloatingParticipantVideo function expects pixel dimensions. To fix this, access
the LocalDensity composable and use its density value to convert the DP
measurements to actual pixels before creating the IntSize object. Multiply each
DP dimension by the density.density value to get the correct pixel dimensions
for the parentBounds parameter.
| private fun PortraitScreenSharingMyContentPreview() { | ||
| VideoTheme { | ||
| PortraitScreenSharingVideoRenderer( | ||
| call = previewCall, | ||
| session = ScreenSharingSession( | ||
| participant = previewParticipantsList[0], | ||
| ), | ||
| participants = previewParticipantsList, | ||
| dominantSpeaker = previewParticipantsList[0], | ||
| modifier = Modifier.fillMaxSize(), | ||
| ) | ||
| } | ||
| } |
There was a problem hiding this comment.
Add missing StreamPreviewDataUtils initialization.
The second preview function is missing the StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) call that appears in the first preview. Without this initialization, the preview data objects may not render correctly.
🔧 Proposed fix
`@Preview`
`@Preview`(uiMode = Configuration.UI_MODE_NIGHT_YES)
`@Composable`
private fun PortraitScreenSharingMyContentPreview() {
+ StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current)
VideoTheme {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/call/renderer/internal/PortraitScreenSharingVideoRendererPreview.kt`
around lines 52 - 64, The PortraitScreenSharingMyContentPreview function is
missing the StreamPreviewDataUtils initialization call that is present in the
first preview function. Add a call to
StreamPreviewDataUtils.initializeStreamVideo(LocalContext.current) at the
beginning of the PortraitScreenSharingMyContentPreview() function, before the
VideoTheme block, to ensure preview data objects render correctly and match the
initialization pattern used in the other preview function.
| VideoRenderer( | ||
| call = previewCall, | ||
| video = ParticipantState.Video( | ||
| track = VideoTrack("", org.webrtc.VideoTrack(123)), |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check how VideoTrack is constructed elsewhere in the codebase
# Search for other VideoTrack instantiations
rg -n 'VideoTrack\(' --type kotlin -A2 -B2
# Check WebRTC library version
rg -n 'org\.webrtc|webrtc' gradle/libs.versions.toml build.gradle.ktsRepository: GetStream/stream-video-android
Length of output: 26904
🏁 Script executed:
# Search for WebRTC VideoTrack usage patterns in the codebase
rg -n 'org\.webrtc\.VideoTrack\s*\(' --type kotlin -B1 -A1 | head -40
# Check gradle dependency for WebRTC version
rg -n 'stream.*webrtc|webrtc.*=' gradle/libs.versions.toml build.gradle.ktsRepository: GetStream/stream-video-android
Length of output: 2510
Use 1000L instead of 123 for org.webrtc.VideoTrack constructor arguments.
Lines 40 and 57 pass an Int literal to org.webrtc.VideoTrack(), but the constructor expects a native handle of type Long. This is inconsistent with CallLobbyPreview.kt and CallLobby.kt, which both correctly use 1000L. Change both occurrences to org.webrtc.VideoTrack(1000L) to match the established pattern and provide the correct type.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@stream-video-android-ui-compose/src/debug/kotlin/io/getstream/video/android/compose/ui/components/video/VideoRendererPreview.kt`
at line 40, The org.webrtc.VideoTrack constructor on lines 40 and 57 in
VideoRendererPreview.kt is being passed an Int literal (123) when it expects a
Long type for the native handle. Replace both occurrences of
org.webrtc.VideoTrack(123) with org.webrtc.VideoTrack(1000L) to match the
correct type and align with the pattern used in CallLobbyPreview.kt and
CallLobby.kt.
…nto fix/r8-previewdata-missing-classes # Conflicts: # stream-video-android-ui-compose/api/stream-video-android-ui-compose.api
PR checklist ✅All required conditions are satisfied:
🎉 Great job! This PR is ready for review. |
SDK Size Comparison 📏
|
|


Goal
Fixes 1244
R8/minified release builds of apps consuming
stream-video-android-ui-composefail withMissing class io.getstream.video.android.mock.StreamPreviewDataUtils(andStreamPreviewDataUtilsKt). The compose module depends onstream-video-android-previewdataascompileOnly, but the Compose compiler emitsComposableSingletons$*lambda holders for the inline@Previewfunctions into production classes, so the preview-data references leak into the published release artifact even though that module is never on a consumer's runtime classpath.Fixes #1448
Implementation
@Previewcomposable out ofsrc/maininto a new debug-only source set (src/debug/kotlin, one<Name>Preview.ktper original file, same package). Previews still render in Android Studio (debug variant) but are no longer compiled into the release artifact.stream-video-android-previewdatadependency fromcompileOnlytodebugImplementation.private→internal(CalLCenterContent,ParticipantActionsWithoutState). One preview that was also used by production code (ModerationWarningUiContentDemoviaLocalInspectionMode) stays inmainwith the@Previewmoved to a thin debug wrapper.kotlinx-datetime(0.6.1) explicitly as animplementationdependency of the compose module — it is used by the livestream countdown UI in production but was only arriving transitively, which also causedMissing class kotlinx.datetime.*R8 errors (reported in the same issue thread).ComposableSingletons$*preview classes are removed from the published API surface.Testing
./gradlew :stream-video-android-ui-compose:compileReleaseKotlin— published variant compiles without preview-data../gradlew :stream-video-android-ui-compose:compileDebugKotlin— previews still compile (IDE rendering intact)../gradlew :stream-video-android-ui-compose:spotlessCheck+:apiCheck— pass (API baseline updated viaapiDump)../gradlew :stream-video-android-ui-compose:testDebugUnitTest— pass.tutorials:tutorial-video(a clean consumer with no preview-data dependency). Before:minifyReleaseWithR8failed with the exact issue R8 build failure with StreamPreviewDataUtils classes referenced from ComposableSingletons #1448 error. After: it passes.classes.jarcontains 0 classes referencingio/getstream/video/android/mock(was 50+).☑️Contributor Checklist
General
developbranchCode & documentation
stream-video-examples)☑️Reviewer Checklist
Made with Cursor
Summary by CodeRabbit