├── .editorconfig ├── .git-blame-ignore-revs ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── android_task.md │ ├── bug_report.md │ └── config.yml ├── actions │ └── setup-node │ │ └── action.yml ├── pull_request_template.md ├── release.yaml └── workflows │ ├── android.yml │ ├── app-distribute.yml │ ├── e2e-build.yml │ ├── e2e-test-cron.yml │ ├── e2e-test.yml │ ├── internal-app-distribute.yml │ ├── no-response.yml │ ├── publish-new-version.yml │ ├── publish-snapshot.yml │ ├── release-docs.yaml │ ├── sdk-size-checks.yml │ └── sdk-size-updates.yml ├── .gitignore ├── .readme-assets └── Github-Graphic-Android.jpg ├── .repackage-assets └── maven_local.png ├── .sign └── debug.keystore.jks ├── .styles ├── Google │ ├── AMPM.yml │ ├── Acronyms.yml │ ├── Colons.yml │ ├── Contractions.yml │ ├── DateFormat.yml │ ├── Ellipses.yml │ ├── EmDash.yml │ ├── EnDash.yml │ ├── Exclamation.yml │ ├── FirstPerson.yml │ ├── Gender.yml │ ├── GenderBias.yml │ ├── HeadingPunctuation.yml │ ├── Headings.yml │ ├── Latin.yml │ ├── LyHyphens.yml │ ├── OptionalPlurals.yml │ ├── Ordinal.yml │ ├── OxfordComma.yml │ ├── Parens.yml │ ├── Passive.yml │ ├── Periods.yml │ ├── Quotes.yml │ ├── Ranges.yml │ ├── Semicolons.yml │ ├── Slang.yml │ ├── Spacing.yml │ ├── Spelling.yml │ ├── Units.yml │ ├── We.yml │ ├── Will.yml │ ├── WordList.yml │ ├── meta.json │ └── vocab.txt └── Vocab │ └── Base │ ├── accept.txt │ └── reject.txt ├── .vale.ini ├── AppKey ├── CHANGELOG.md ├── DEPRECATIONS.md ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── SECURITY.md ├── benchmark ├── .gitignore ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── io │ └── getstream │ └── video │ └── android │ └── benchmark │ ├── BaselineProfileGenerator.kt │ ├── DogfoodingScenarios.kt │ ├── StartupBenchmarks.kt │ └── Utils.kt ├── build-logic ├── convention │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ ├── AndroidApplicationComposeConventionPlugin.kt │ │ ├── AndroidApplicationConventionPlugin.kt │ │ ├── AndroidLibraryComposeConventionPlugin.kt │ │ ├── AndroidLibraryConventionPlugin.kt │ │ ├── SpotlessConventionPlugin.kt │ │ └── io │ │ └── getstream │ │ └── video │ │ ├── AndroidCompose.kt │ │ ├── DemoFlavor.kt │ │ └── KotlinAndroid.kt ├── gradle.properties └── settings.gradle.kts ├── build.gradle.kts ├── buildSrc ├── build.gradle.kts └── src │ └── main │ └── kotlin │ └── io │ └── getstream │ └── video │ └── android │ ├── Configuration.kt │ └── commands │ ├── rpc │ ├── plugin │ │ ├── GenerateRPCServiceExtension.kt │ │ └── GenerateRPCServicePlugin.kt │ └── task │ │ └── GenerateRPCServiceTask.kt │ └── utils │ └── Tasks.kt ├── compose_compiler_config.conf ├── demo-app ├── .gitignore ├── README.md ├── benchmark-rules.pro ├── build.gradle.kts ├── google-services.json ├── libs │ └── renderscript-toolkit.aar ├── lint-baseline.xml ├── proguard-rules.pro └── src │ ├── androidTestE2etestingDebug │ ├── kotlin │ │ └── io │ │ │ └── getstream │ │ │ └── video │ │ │ └── android │ │ │ ├── pages │ │ │ ├── CallDetailsPage.kt │ │ │ ├── CallPage.kt │ │ │ ├── DirectCallPage.kt │ │ │ ├── LobbyPage.kt │ │ │ ├── LoginPage.kt │ │ │ └── RingPage.kt │ │ │ ├── robots │ │ │ ├── ParticipantRobot.kt │ │ │ ├── UserRobot.kt │ │ │ ├── UserRobotCallAsserts.kt │ │ │ └── UserRobotLobbyAsserts.kt │ │ │ ├── rules │ │ │ └── RetryRule.kt │ │ │ ├── tests │ │ │ ├── CallLifecycleTests.kt │ │ │ ├── LayoutTests.kt │ │ │ ├── LobbyTests.kt │ │ │ ├── ParticipantActionsTests.kt │ │ │ ├── ReconnectionTests.kt │ │ │ ├── StreamTestCase.kt │ │ │ └── UserActionsTests.kt │ │ │ └── uiautomator │ │ │ ├── Actions.kt │ │ │ ├── Base.kt │ │ │ ├── Element.kt │ │ │ ├── FindBy.kt │ │ │ ├── Math.kt │ │ │ ├── Permissions.kt │ │ │ └── Wait.kt │ └── resources │ │ └── allure.properties │ ├── development │ └── res │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml │ ├── e2etesting │ └── res │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher_round.png │ │ └── values │ │ └── strings.xml │ ├── main │ ├── AndroidManifest.xml │ ├── generated │ │ └── baselineProfiles │ │ │ ├── baseline-prof.txt │ │ │ └── startup-prof.txt │ ├── ic_launcher-playstore.png │ ├── kotlin │ │ └── io │ │ │ └── getstream │ │ │ └── video │ │ │ └── android │ │ │ ├── App.kt │ │ │ ├── CallActivity.kt │ │ │ ├── DeeplinkingActivity.kt │ │ │ ├── MainActivity.kt │ │ │ ├── analytics │ │ │ └── FirebaseEvents.kt │ │ │ ├── data │ │ │ ├── repositories │ │ │ │ └── GoogleAccountRepository.kt │ │ │ └── services │ │ │ │ ├── google │ │ │ │ └── ListDirectoryPeopleResponse.kt │ │ │ │ └── stream │ │ │ │ ├── GetAuthDataResponse.kt │ │ │ │ └── StreamService.kt │ │ │ ├── di │ │ │ └── AppModule.kt │ │ │ ├── models │ │ │ ├── GoogleAccount.kt │ │ │ └── Users.kt │ │ │ ├── tooling │ │ │ ├── extensions │ │ │ │ ├── ContextExtensions.kt │ │ │ │ └── Utils.kt │ │ │ ├── ui │ │ │ │ ├── ExceptionTraceActivity.kt │ │ │ │ └── ExceptionTraceScreen.kt │ │ │ └── util │ │ │ │ └── StreamFlavors.kt │ │ │ ├── ui │ │ │ ├── DogfoodingNavHost.kt │ │ │ ├── call │ │ │ │ ├── AvailableDeviceMenu.kt │ │ │ │ ├── CallScreen.kt │ │ │ │ ├── CallStats.kt │ │ │ │ ├── ChatDialog.kt │ │ │ │ ├── ChatOverly.kt │ │ │ │ ├── CustomReactionContent.kt │ │ │ │ ├── FeedbackDialog.kt │ │ │ │ ├── LandscapeControls.kt │ │ │ │ ├── LayoutChooser.kt │ │ │ │ ├── ParticipantsDialog.kt │ │ │ │ ├── QRCode.kt │ │ │ │ ├── ReactionsMenu.kt │ │ │ │ └── ShareCall.kt │ │ │ ├── closedcaptions │ │ │ │ ├── ClosedCaptionUi.kt │ │ │ │ ├── ClosedCaptionUiState.kt │ │ │ │ └── ClosedCaptionsTheme.kt │ │ │ ├── join │ │ │ │ ├── CallJoinScreen.kt │ │ │ │ ├── CallJoinViewModel.kt │ │ │ │ └── barcode │ │ │ │ │ └── BardcodeScanner.kt │ │ │ ├── lobby │ │ │ │ ├── CallLobbyScreen.kt │ │ │ │ └── CallLobbyViewModel.kt │ │ │ ├── login │ │ │ │ ├── GoogleSignIn.kt │ │ │ │ ├── GoogleSignInLauncher.kt │ │ │ │ ├── LoginScreen.kt │ │ │ │ └── LoginViewModel.kt │ │ │ ├── menu │ │ │ │ ├── AudioDeviceUiState.kt │ │ │ │ ├── MenuDefinitions.kt │ │ │ │ ├── SettingsMenu.kt │ │ │ │ ├── TranscriptionUiState.kt │ │ │ │ ├── VideoFiltersMenu.kt │ │ │ │ ├── base │ │ │ │ │ ├── DynamicMenu.kt │ │ │ │ │ └── MenuTypes.kt │ │ │ │ └── transcriptions │ │ │ │ │ └── TranscriptionUiStateManager.kt │ │ │ └── outgoing │ │ │ │ ├── DirectCallJoinScreen.kt │ │ │ │ └── DirectCallJoinViewModel.kt │ │ │ └── util │ │ │ ├── FeedbackSender.kt │ │ │ ├── InAppUpdateHelper.kt │ │ │ ├── InstallReferrer.kt │ │ │ ├── LockOrientation.kt │ │ │ ├── NetworkMonitor.kt │ │ │ ├── ProgressBar.kt │ │ │ ├── PushNotifications.kt │ │ │ ├── StreamVideoInitHelper.kt │ │ │ ├── UserHelper.kt │ │ │ ├── config │ │ │ ├── AppConfig.kt │ │ │ └── types │ │ │ │ └── StreamEnvironment.kt │ │ │ └── filters │ │ │ ├── SampleAudioFilter.kt │ │ │ └── SampleVideoFilter.kt │ └── res │ │ ├── drawable │ │ ├── amsterdam1.webp │ │ ├── amsterdam2.webp │ │ ├── boulder1.webp │ │ ├── boulder2.webp │ │ ├── feedback_artwork.png │ │ ├── google_button_logo.xml │ │ ├── gradient1.webp │ │ ├── ic_blur_off.xml │ │ ├── ic_blur_on.xml │ │ ├── ic_default_avatar.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_layout_grid.xml │ │ ├── ic_layout_spotlight.xml │ │ ├── ic_mic.xml │ │ ├── ic_scan_qr.xml │ │ ├── ic_stream_video_meeting_logo.xml │ │ └── stream_calls_logo.png │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ └── network_security_config.xml │ ├── production │ └── res │ │ └── values │ │ └── strings.xml │ └── staging │ └── res │ └── values │ └── strings.xml ├── development.md ├── env.properties.sample ├── fastlane ├── .env ├── .rubocop.yml ├── Allurefile ├── Fastfile └── Pluginfile ├── generate-openapi.sh ├── generate_openapi_v2.sh ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── integrate_webrtc.py ├── metrics ├── size.json └── stream-video-android-metrics │ ├── build.gradle.kts │ └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── io │ └── getstream │ └── video │ └── android │ └── metrics │ └── MainActivity.kt ├── repackage.md ├── repackage.sh ├── scripts ├── coverage.gradle ├── git-hooks │ └── pre-push ├── open-api-code-gen.gradle.kts ├── publish-module.gradle ├── publish-root.gradle ├── release │ └── local-release ├── repackage │ ├── repackage.py │ └── utils │ │ ├── __init__.py │ │ ├── gradle_publish.py │ │ ├── gradle_settings.py │ │ ├── maven.py │ │ ├── project_configuration.py │ │ ├── repackage_video_sdk.py │ │ ├── repackage_webrtc_android.py │ │ └── string_replacement.py ├── show-last-snapshot-update.sh └── sonar.gradle ├── settings.gradle.kts ├── spotless ├── copyright.kt ├── copyright.kts └── copyright.xml ├── stream-video-android-bom └── build.gradle.kts ├── stream-video-android-core ├── .gitignore ├── api │ └── stream-video-android-core.api ├── build.gradle.kts ├── consumer-proguard-rules.pro ├── proguard-rules.pro ├── src │ ├── androidTest │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ │ └── io │ │ │ └── getstream │ │ │ └── video │ │ │ └── android │ │ │ └── core │ │ │ ├── AndroidDeviceTest.kt │ │ │ ├── DispatcherRule.kt │ │ │ ├── IntegrationTestBase.kt │ │ │ ├── LivestreamTest.kt │ │ │ ├── MediaManagerTest.kt │ │ │ ├── ReconnectTest.kt │ │ │ ├── RingTest.kt │ │ │ └── SupportTest.kt │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── baseline-prof.txt │ │ ├── kotlin │ │ │ └── io │ │ │ │ └── getstream │ │ │ │ ├── android │ │ │ │ └── video │ │ │ │ │ └── generated │ │ │ │ │ ├── apis │ │ │ │ │ └── ProductvideoApi.kt │ │ │ │ │ ├── infrastructure │ │ │ │ │ ├── BigDecimalAdapter.kt │ │ │ │ │ ├── BigIntegerAdapter.kt │ │ │ │ │ ├── ByteArrayAdapter.kt │ │ │ │ │ ├── LocalDateAdapter.kt │ │ │ │ │ ├── LocalDateTimeAdapter.kt │ │ │ │ │ ├── OffsetDateTimeAdapter.kt │ │ │ │ │ ├── Serializer.kt │ │ │ │ │ ├── URIAdapter.kt │ │ │ │ │ └── UUIDAdapter.kt │ │ │ │ │ └── models │ │ │ │ │ ├── APIError.kt │ │ │ │ │ ├── AcceptCallResponse.kt │ │ │ │ │ ├── AggregatedStats.kt │ │ │ │ │ ├── AudioSettingsRequest.kt │ │ │ │ │ ├── AudioSettingsResponse.kt │ │ │ │ │ ├── BackstageSettingsRequest.kt │ │ │ │ │ ├── BackstageSettingsResponse.kt │ │ │ │ │ ├── BlockUserRequest.kt │ │ │ │ │ ├── BlockUserResponse.kt │ │ │ │ │ ├── BlockedUserEvent.kt │ │ │ │ │ ├── Bound.kt │ │ │ │ │ ├── BroadcastSettingsRequest.kt │ │ │ │ │ ├── BroadcastSettingsResponse.kt │ │ │ │ │ ├── CallAcceptedEvent.kt │ │ │ │ │ ├── CallClosedCaption.kt │ │ │ │ │ ├── CallClosedCaptionsFailedEvent.kt │ │ │ │ │ ├── CallClosedCaptionsStartedEvent.kt │ │ │ │ │ ├── CallClosedCaptionsStoppedEvent.kt │ │ │ │ │ ├── CallCreatedEvent.kt │ │ │ │ │ ├── CallDeletedEvent.kt │ │ │ │ │ ├── CallDurationReport.kt │ │ │ │ │ ├── CallDurationReportResponse.kt │ │ │ │ │ ├── CallEndedEvent.kt │ │ │ │ │ ├── CallEvent.kt │ │ │ │ │ ├── CallHLSBroadcastingFailedEvent.kt │ │ │ │ │ ├── CallHLSBroadcastingStartedEvent.kt │ │ │ │ │ ├── CallHLSBroadcastingStoppedEvent.kt │ │ │ │ │ ├── CallIngressResponse.kt │ │ │ │ │ ├── CallLiveStartedEvent.kt │ │ │ │ │ ├── CallMemberAddedEvent.kt │ │ │ │ │ ├── CallMemberRemovedEvent.kt │ │ │ │ │ ├── CallMemberUpdatedEvent.kt │ │ │ │ │ ├── CallMemberUpdatedPermissionEvent.kt │ │ │ │ │ ├── CallMissedEvent.kt │ │ │ │ │ ├── CallNotificationEvent.kt │ │ │ │ │ ├── CallParticipantCountReport.kt │ │ │ │ │ ├── CallParticipantCountReportResponse.kt │ │ │ │ │ ├── CallParticipantResponse.kt │ │ │ │ │ ├── CallReactionEvent.kt │ │ │ │ │ ├── CallRecording.kt │ │ │ │ │ ├── CallRecordingFailedEvent.kt │ │ │ │ │ ├── CallRecordingReadyEvent.kt │ │ │ │ │ ├── CallRecordingStartedEvent.kt │ │ │ │ │ ├── CallRecordingStoppedEvent.kt │ │ │ │ │ ├── CallRejectedEvent.kt │ │ │ │ │ ├── CallRequest.kt │ │ │ │ │ ├── CallResponse.kt │ │ │ │ │ ├── CallRingEvent.kt │ │ │ │ │ ├── CallRtmpBroadcastFailedEvent.kt │ │ │ │ │ ├── CallRtmpBroadcastStartedEvent.kt │ │ │ │ │ ├── CallRtmpBroadcastStoppedEvent.kt │ │ │ │ │ ├── CallSessionEndedEvent.kt │ │ │ │ │ ├── CallSessionParticipantCountsUpdatedEvent.kt │ │ │ │ │ ├── CallSessionParticipantJoinedEvent.kt │ │ │ │ │ ├── CallSessionParticipantLeftEvent.kt │ │ │ │ │ ├── CallSessionResponse.kt │ │ │ │ │ ├── CallSessionStartedEvent.kt │ │ │ │ │ ├── CallSettingsRequest.kt │ │ │ │ │ ├── CallSettingsResponse.kt │ │ │ │ │ ├── CallStateResponseFields.kt │ │ │ │ │ ├── CallStatsReportSummaryResponse.kt │ │ │ │ │ ├── CallTimeline.kt │ │ │ │ │ ├── CallTranscription.kt │ │ │ │ │ ├── CallTranscriptionFailedEvent.kt │ │ │ │ │ ├── CallTranscriptionReadyEvent.kt │ │ │ │ │ ├── CallTranscriptionStartedEvent.kt │ │ │ │ │ ├── CallTranscriptionStoppedEvent.kt │ │ │ │ │ ├── CallUpdatedEvent.kt │ │ │ │ │ ├── CallUserMutedEvent.kt │ │ │ │ │ ├── CallsPerDayReport.kt │ │ │ │ │ ├── CallsPerDayReportResponse.kt │ │ │ │ │ ├── ClosedCaptionEvent.kt │ │ │ │ │ ├── CollectUserFeedbackRequest.kt │ │ │ │ │ ├── CollectUserFeedbackResponse.kt │ │ │ │ │ ├── ConnectUserDetailsRequest.kt │ │ │ │ │ ├── ConnectedEvent.kt │ │ │ │ │ ├── ConnectionErrorEvent.kt │ │ │ │ │ ├── Coordinates.kt │ │ │ │ │ ├── Count.kt │ │ │ │ │ ├── CreateDeviceRequest.kt │ │ │ │ │ ├── CreateGuestRequest.kt │ │ │ │ │ ├── CreateGuestResponse.kt │ │ │ │ │ ├── Credentials.kt │ │ │ │ │ ├── CustomVideoEvent.kt │ │ │ │ │ ├── DailyAggregateCallDurationReportResponse.kt │ │ │ │ │ ├── DailyAggregateCallParticipantCountReportResponse.kt │ │ │ │ │ ├── DailyAggregateCallsPerDayReportResponse.kt │ │ │ │ │ ├── DailyAggregateQualityScoreReportResponse.kt │ │ │ │ │ ├── DailyAggregateSDKUsageReportResponse.kt │ │ │ │ │ ├── DailyAggregateUserFeedbackReportResponse.kt │ │ │ │ │ ├── DeleteCallRequest.kt │ │ │ │ │ ├── DeleteCallResponse.kt │ │ │ │ │ ├── DeleteRecordingResponse.kt │ │ │ │ │ ├── DeleteTranscriptionResponse.kt │ │ │ │ │ ├── DeviceResponse.kt │ │ │ │ │ ├── EdgeResponse.kt │ │ │ │ │ ├── EgressHLSResponse.kt │ │ │ │ │ ├── EgressRTMPResponse.kt │ │ │ │ │ ├── EgressResponse.kt │ │ │ │ │ ├── EndCallResponse.kt │ │ │ │ │ ├── GeofenceSettingsRequest.kt │ │ │ │ │ ├── GeofenceSettingsResponse.kt │ │ │ │ │ ├── GeolocationResult.kt │ │ │ │ │ ├── GetCallResponse.kt │ │ │ │ │ ├── GetCallStatsResponse.kt │ │ │ │ │ ├── GetEdgesResponse.kt │ │ │ │ │ ├── GetOrCreateCallRequest.kt │ │ │ │ │ ├── GetOrCreateCallResponse.kt │ │ │ │ │ ├── GoLiveRequest.kt │ │ │ │ │ ├── GoLiveResponse.kt │ │ │ │ │ ├── HLSSettingsRequest.kt │ │ │ │ │ ├── HLSSettingsResponse.kt │ │ │ │ │ ├── HealthCheckEvent.kt │ │ │ │ │ ├── ICEServer.kt │ │ │ │ │ ├── JoinCallRequest.kt │ │ │ │ │ ├── JoinCallResponse.kt │ │ │ │ │ ├── LayoutSettingsRequest.kt │ │ │ │ │ ├── LimitsSettingsRequest.kt │ │ │ │ │ ├── LimitsSettingsResponse.kt │ │ │ │ │ ├── ListDevicesResponse.kt │ │ │ │ │ ├── ListRecordingsResponse.kt │ │ │ │ │ ├── ListTranscriptionsResponse.kt │ │ │ │ │ ├── Location.kt │ │ │ │ │ ├── MediaPubSubHint.kt │ │ │ │ │ ├── MemberRequest.kt │ │ │ │ │ ├── MemberResponse.kt │ │ │ │ │ ├── MuteUsersRequest.kt │ │ │ │ │ ├── MuteUsersResponse.kt │ │ │ │ │ ├── NetworkMetricsReportResponse.kt │ │ │ │ │ ├── NoiseCancellationSettings.kt │ │ │ │ │ ├── OwnCapability.kt │ │ │ │ │ ├── OwnUserResponse.kt │ │ │ │ │ ├── PerSDKUsageReport.kt │ │ │ │ │ ├── PermissionRequestEvent.kt │ │ │ │ │ ├── PinRequest.kt │ │ │ │ │ ├── PinResponse.kt │ │ │ │ │ ├── PublishedTrackInfo.kt │ │ │ │ │ ├── PublisherAggregateStats.kt │ │ │ │ │ ├── PushPreferences.kt │ │ │ │ │ ├── QualityScoreReport.kt │ │ │ │ │ ├── QualityScoreReportResponse.kt │ │ │ │ │ ├── QueryAggregateCallStatsRequest.kt │ │ │ │ │ ├── QueryAggregateCallStatsResponse.kt │ │ │ │ │ ├── QueryCallMembersRequest.kt │ │ │ │ │ ├── QueryCallMembersResponse.kt │ │ │ │ │ ├── QueryCallStatsRequest.kt │ │ │ │ │ ├── QueryCallStatsResponse.kt │ │ │ │ │ ├── QueryCallsRequest.kt │ │ │ │ │ ├── QueryCallsResponse.kt │ │ │ │ │ ├── RTMPBroadcastRequest.kt │ │ │ │ │ ├── RTMPIngress.kt │ │ │ │ │ ├── RTMPSettingsRequest.kt │ │ │ │ │ ├── RTMPSettingsResponse.kt │ │ │ │ │ ├── ReactionResponse.kt │ │ │ │ │ ├── RecordSettingsRequest.kt │ │ │ │ │ ├── RecordSettingsResponse.kt │ │ │ │ │ ├── RejectCallRequest.kt │ │ │ │ │ ├── RejectCallResponse.kt │ │ │ │ │ ├── ReportByHistogramBucket.kt │ │ │ │ │ ├── RequestPermissionRequest.kt │ │ │ │ │ ├── RequestPermissionResponse.kt │ │ │ │ │ ├── Response.kt │ │ │ │ │ ├── RingSettingsRequest.kt │ │ │ │ │ ├── RingSettingsResponse.kt │ │ │ │ │ ├── SDKUsageReport.kt │ │ │ │ │ ├── SDKUsageReportResponse.kt │ │ │ │ │ ├── SFULocationResponse.kt │ │ │ │ │ ├── SFUResponse.kt │ │ │ │ │ ├── ScreensharingSettingsRequest.kt │ │ │ │ │ ├── ScreensharingSettingsResponse.kt │ │ │ │ │ ├── SendCallEventRequest.kt │ │ │ │ │ ├── SendCallEventResponse.kt │ │ │ │ │ ├── SendReactionRequest.kt │ │ │ │ │ ├── SendReactionResponse.kt │ │ │ │ │ ├── SessionSettingsRequest.kt │ │ │ │ │ ├── SessionSettingsResponse.kt │ │ │ │ │ ├── SortParamRequest.kt │ │ │ │ │ ├── StartClosedCaptionsRequest.kt │ │ │ │ │ ├── StartClosedCaptionsResponse.kt │ │ │ │ │ ├── StartHLSBroadcastingResponse.kt │ │ │ │ │ ├── StartRTMPBroadcastsRequest.kt │ │ │ │ │ ├── StartRTMPBroadcastsResponse.kt │ │ │ │ │ ├── StartRecordingRequest.kt │ │ │ │ │ ├── StartRecordingResponse.kt │ │ │ │ │ ├── StartTranscriptionRequest.kt │ │ │ │ │ ├── StartTranscriptionResponse.kt │ │ │ │ │ ├── StatsOptions.kt │ │ │ │ │ ├── StopAllRTMPBroadcastsResponse.kt │ │ │ │ │ ├── StopClosedCaptionsRequest.kt │ │ │ │ │ ├── StopClosedCaptionsResponse.kt │ │ │ │ │ ├── StopHLSBroadcastingResponse.kt │ │ │ │ │ ├── StopLiveRequest.kt │ │ │ │ │ ├── StopLiveResponse.kt │ │ │ │ │ ├── StopRTMPBroadcastsResponse.kt │ │ │ │ │ ├── StopRecordingResponse.kt │ │ │ │ │ ├── StopTranscriptionRequest.kt │ │ │ │ │ ├── StopTranscriptionResponse.kt │ │ │ │ │ ├── Subsession.kt │ │ │ │ │ ├── TURNAggregatedStats.kt │ │ │ │ │ ├── TargetResolution.kt │ │ │ │ │ ├── ThumbnailResponse.kt │ │ │ │ │ ├── ThumbnailsSettingsRequest.kt │ │ │ │ │ ├── ThumbnailsSettingsResponse.kt │ │ │ │ │ ├── TimeStats.kt │ │ │ │ │ ├── TranscriptionSettingsRequest.kt │ │ │ │ │ ├── TranscriptionSettingsResponse.kt │ │ │ │ │ ├── UnblockUserRequest.kt │ │ │ │ │ ├── UnblockUserResponse.kt │ │ │ │ │ ├── UnblockedUserEvent.kt │ │ │ │ │ ├── UnpinRequest.kt │ │ │ │ │ ├── UnpinResponse.kt │ │ │ │ │ ├── UpdateCallMembersRequest.kt │ │ │ │ │ ├── UpdateCallMembersResponse.kt │ │ │ │ │ ├── UpdateCallRequest.kt │ │ │ │ │ ├── UpdateCallResponse.kt │ │ │ │ │ ├── UpdateUserPermissionsRequest.kt │ │ │ │ │ ├── UpdateUserPermissionsResponse.kt │ │ │ │ │ ├── UpdatedCallPermissionsEvent.kt │ │ │ │ │ ├── UserFeedbackReport.kt │ │ │ │ │ ├── UserFeedbackReportResponse.kt │ │ │ │ │ ├── UserInfoResponse.kt │ │ │ │ │ ├── UserRequest.kt │ │ │ │ │ ├── UserResponse.kt │ │ │ │ │ ├── UserResponsePrivacyFields.kt │ │ │ │ │ ├── UserSessionStats.kt │ │ │ │ │ ├── UserStats.kt │ │ │ │ │ ├── UserUpdatedEvent.kt │ │ │ │ │ ├── VideoDimension.kt │ │ │ │ │ ├── VideoEvent.kt │ │ │ │ │ ├── VideoQuality.kt │ │ │ │ │ ├── VideoSettingsRequest.kt │ │ │ │ │ ├── VideoSettingsResponse.kt │ │ │ │ │ ├── WSAuthMessage.kt │ │ │ │ │ ├── WSAuthMessageRequest.kt │ │ │ │ │ ├── WSCallEvent.kt │ │ │ │ │ └── WSClientEvent.kt │ │ │ │ └── video │ │ │ │ └── android │ │ │ │ ├── core │ │ │ │ ├── Call.kt │ │ │ │ ├── CallHealthMonitor.kt │ │ │ │ ├── CallState.kt │ │ │ │ ├── CallStats.kt │ │ │ │ ├── CallStatsReport.kt │ │ │ │ ├── ClientState.kt │ │ │ │ ├── EventSubscription.kt │ │ │ │ ├── MediaManager.kt │ │ │ │ ├── MemberState.kt │ │ │ │ ├── ParticipantState.kt │ │ │ │ ├── StreamVideo.kt │ │ │ │ ├── StreamVideoBuilder.kt │ │ │ │ ├── StreamVideoClient.kt │ │ │ │ ├── StreamVideoConfig.kt │ │ │ │ ├── audio │ │ │ │ │ ├── AudioHandler.kt │ │ │ │ │ └── StreamAudioDevice.kt │ │ │ │ ├── call │ │ │ │ │ ├── CallType.kt │ │ │ │ │ ├── RtcSession.kt │ │ │ │ │ ├── audio │ │ │ │ │ │ └── InputAudioFilter.kt │ │ │ │ │ ├── connection │ │ │ │ │ │ ├── Publisher.kt │ │ │ │ │ │ ├── StreamPeerConnection.kt │ │ │ │ │ │ ├── StreamPeerConnectionFactory.kt │ │ │ │ │ │ ├── coding │ │ │ │ │ │ │ ├── SelectiveVideoDecoderFactory.kt │ │ │ │ │ │ │ └── SelectiveVideoEncoderFactory.kt │ │ │ │ │ │ ├── transceivers │ │ │ │ │ │ │ └── TransceiverCache.kt │ │ │ │ │ │ └── utils │ │ │ │ │ │ │ └── VideoLayers.kt │ │ │ │ │ ├── signal │ │ │ │ │ │ └── socket │ │ │ │ │ │ │ └── RTCEventMapper.kt │ │ │ │ │ ├── state │ │ │ │ │ │ └── CallAction.kt │ │ │ │ │ ├── stats │ │ │ │ │ │ ├── RtcMapper.kt │ │ │ │ │ │ └── model │ │ │ │ │ │ │ ├── RtcAudioSourceStats.kt │ │ │ │ │ │ │ ├── RtcCodecStats.kt │ │ │ │ │ │ │ ├── RtcIceCandidatePairStats.kt │ │ │ │ │ │ │ ├── RtcIceCandidateStats.kt │ │ │ │ │ │ │ ├── RtcInboundRtpAudioStreamStats.kt │ │ │ │ │ │ │ ├── RtcInboundRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcInboundRtpVideoStreamStats.kt │ │ │ │ │ │ │ ├── RtcMediaSourceStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamAudioTrackReceiverStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamAudioTrackSenderStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamAudioTrackStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamTrackReceiverStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamTrackSenderStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamTrackStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamVideoTrackReceiverStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamVideoTrackSenderStats.kt │ │ │ │ │ │ │ ├── RtcMediaStreamVideoTrackStats.kt │ │ │ │ │ │ │ ├── RtcOutboundRtpAudioStreamStats.kt │ │ │ │ │ │ │ ├── RtcOutboundRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcOutboundRtpVideoStreamStats.kt │ │ │ │ │ │ │ ├── RtcReceivedRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcRemoteInboundRtpAudioStreamStats.kt │ │ │ │ │ │ │ ├── RtcRemoteInboundRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcRemoteInboundRtpVideoStreamStats.kt │ │ │ │ │ │ │ ├── RtcRemoteOutboundRtpAudioStreamStats.kt │ │ │ │ │ │ │ ├── RtcRemoteOutboundRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcRemoteOutboundRtpVideoStreamStats.kt │ │ │ │ │ │ │ ├── RtcRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcSentRtpStreamStats.kt │ │ │ │ │ │ │ ├── RtcStats.kt │ │ │ │ │ │ │ ├── RtcStatsReport.kt │ │ │ │ │ │ │ ├── RtcVideoSourceStats.kt │ │ │ │ │ │ │ └── discriminator │ │ │ │ │ │ │ ├── RtcMediaKind.kt │ │ │ │ │ │ │ ├── RtcQualityLimitationReason.kt │ │ │ │ │ │ │ └── RtcReportType.kt │ │ │ │ │ ├── utils │ │ │ │ │ │ ├── AudioValuePercentageNormaliser.kt │ │ │ │ │ │ ├── PeerConnection.kt │ │ │ │ │ │ ├── SDPUtils.kt │ │ │ │ │ │ ├── SoundInputProcessor.kt │ │ │ │ │ │ ├── Stringify.kt │ │ │ │ │ │ └── TrackOverridesHandler.kt │ │ │ │ │ └── video │ │ │ │ │ │ ├── FilterVideoProcessor.kt │ │ │ │ │ │ ├── VideoFilter.kt │ │ │ │ │ │ └── YuvFrame.kt │ │ │ │ ├── closedcaptions │ │ │ │ │ ├── ClosedCaptionManager.kt │ │ │ │ │ ├── ClosedCaptionsConfig.kt │ │ │ │ │ └── ClosedCaptionsSettings.kt │ │ │ │ ├── dispatchers │ │ │ │ │ └── DispatcherProvider.kt │ │ │ │ ├── errors │ │ │ │ │ ├── DisconnectCause.kt │ │ │ │ │ ├── Errors.kt │ │ │ │ │ └── VideoErrorCode.kt │ │ │ │ ├── events │ │ │ │ │ ├── SfuDataEvent.kt │ │ │ │ │ └── VideoEventListener.kt │ │ │ │ ├── filter │ │ │ │ │ ├── FilterObject.kt │ │ │ │ │ ├── FilterObjectToMap.kt │ │ │ │ │ └── Filters.kt │ │ │ │ ├── header │ │ │ │ │ ├── HeadersUtil.kt │ │ │ │ │ └── VersionPrefixHeader.kt │ │ │ │ ├── internal │ │ │ │ │ ├── InternalStreamVideoApi.kt │ │ │ │ │ ├── module │ │ │ │ │ │ ├── ConnectionModuleDeclaration.kt │ │ │ │ │ │ ├── CoordinatorAuthInterceptor.kt │ │ │ │ │ │ ├── CoordinatorConnectionModule.kt │ │ │ │ │ │ ├── HeadersInterceptor.kt │ │ │ │ │ │ └── SfuConnectionModule.kt │ │ │ │ │ └── network │ │ │ │ │ │ └── NetworkStateProvider.kt │ │ │ │ ├── lifecycle │ │ │ │ │ ├── LifecycleHandler.kt │ │ │ │ │ └── StreamLifecycleObserver.kt │ │ │ │ ├── logging │ │ │ │ │ ├── HttpLoggingLevel.kt │ │ │ │ │ └── LoggingLevel.kt │ │ │ │ ├── mapper │ │ │ │ │ └── ReactionMapper.kt │ │ │ │ ├── model │ │ │ │ │ ├── CallData.kt │ │ │ │ │ ├── CallEventType.kt │ │ │ │ │ ├── CallRecordingData.kt │ │ │ │ │ ├── CallStatus.kt │ │ │ │ │ ├── EdgeData.kt │ │ │ │ │ ├── IceCandidate.kt │ │ │ │ │ ├── IceServer.kt │ │ │ │ │ ├── Ingress.kt │ │ │ │ │ ├── MediaTrack.kt │ │ │ │ │ ├── Member.kt │ │ │ │ │ ├── MuteUsersData.kt │ │ │ │ │ ├── NetworkQuality.kt │ │ │ │ │ ├── PreferredVideoPublishOptions.kt │ │ │ │ │ ├── PreferredVideoResolution.kt │ │ │ │ │ ├── QueriedCalls.kt │ │ │ │ │ ├── QueriedMembers.kt │ │ │ │ │ ├── Reaction.kt │ │ │ │ │ ├── ReactionData.kt │ │ │ │ │ ├── RejectReason.kt │ │ │ │ │ ├── ScreenSharingSession.kt │ │ │ │ │ ├── SortData.kt │ │ │ │ │ ├── StreamPeerType.kt │ │ │ │ │ ├── UpdateUserPermissionsData.kt │ │ │ │ │ ├── VideoModel.kt │ │ │ │ │ └── VisibilityOnScreenState.kt │ │ │ │ ├── notifications │ │ │ │ │ ├── DefaultNotificationHandler.kt │ │ │ │ │ ├── DefaultStreamIntentResolver.kt │ │ │ │ │ ├── NotificationConfig.kt │ │ │ │ │ ├── NotificationHandler.kt │ │ │ │ │ ├── internal │ │ │ │ │ │ ├── DismissNotificationActivity.kt │ │ │ │ │ │ ├── NoOpNotificationHandler.kt │ │ │ │ │ │ ├── StreamNotificationManager.kt │ │ │ │ │ │ ├── VideoPushDelegate.kt │ │ │ │ │ │ ├── receivers │ │ │ │ │ │ │ ├── GenericCallActionBroadcastReceiver.kt │ │ │ │ │ │ │ ├── LeaveCallBroadcastReceiver.kt │ │ │ │ │ │ │ ├── RejectCallBroadcastReceiver.kt │ │ │ │ │ │ │ ├── StopScreenshareBroadcastReceiver.kt │ │ │ │ │ │ │ └── ToggleCameraBroadcastReceiver.kt │ │ │ │ │ │ ├── service │ │ │ │ │ │ │ ├── AudioCallService.kt │ │ │ │ │ │ │ ├── CallService.kt │ │ │ │ │ │ │ ├── CallServiceConfig.kt │ │ │ │ │ │ │ ├── CallServiceConfigBuilder.kt │ │ │ │ │ │ │ ├── CallServiceConfigRegistry.kt │ │ │ │ │ │ │ ├── DefaultCallConfigurations.kt │ │ │ │ │ │ │ └── LivestreamCallService.kt │ │ │ │ │ │ └── storage │ │ │ │ │ │ │ ├── DevicePreferences.kt │ │ │ │ │ │ │ ├── DevicePreferencesSerializer.kt │ │ │ │ │ │ │ └── DeviceTokenStorage.kt │ │ │ │ │ └── medianotifications │ │ │ │ │ │ ├── Data.kt │ │ │ │ │ │ └── MediaNotificationHandler.kt │ │ │ │ ├── permission │ │ │ │ │ ├── PermissionRequest.kt │ │ │ │ │ └── android │ │ │ │ │ │ ├── DefaultStreamPermissionCheck.kt │ │ │ │ │ │ ├── PermissionUtilities.kt │ │ │ │ │ │ └── StreamPermissionCheck.kt │ │ │ │ ├── pinning │ │ │ │ │ └── PinUpdates.kt │ │ │ │ ├── screenshare │ │ │ │ │ └── StreamScreenShareService.kt │ │ │ │ ├── socket │ │ │ │ │ ├── ErrorResponse.kt │ │ │ │ │ ├── common │ │ │ │ │ │ ├── ConnectionConf.kt │ │ │ │ │ │ ├── ErrorDetail.kt │ │ │ │ │ │ ├── ErrorResponse.kt │ │ │ │ │ │ ├── HealthMonitor.kt │ │ │ │ │ │ ├── SocketActions.kt │ │ │ │ │ │ ├── SocketConnectionPolicy.kt │ │ │ │ │ │ ├── SocketErrorMessage.kt │ │ │ │ │ │ ├── SocketFactory.kt │ │ │ │ │ │ ├── SocketListener.kt │ │ │ │ │ │ ├── StreamWebSocket.kt │ │ │ │ │ │ ├── StreamWebSocketEvent.kt │ │ │ │ │ │ ├── VideoErrorDetail.kt │ │ │ │ │ │ ├── VideoParser.kt │ │ │ │ │ │ ├── fsm │ │ │ │ │ │ │ ├── FiniteStateMachine.kt │ │ │ │ │ │ │ └── builder │ │ │ │ │ │ │ │ ├── FSMBuilder.kt │ │ │ │ │ │ │ │ ├── FSMBuilderMarker.kt │ │ │ │ │ │ │ │ └── StateHandlerBuilder.kt │ │ │ │ │ │ ├── parser2 │ │ │ │ │ │ │ ├── MoshiErrorLogging.kt │ │ │ │ │ │ │ ├── MoshiVideoParser.kt │ │ │ │ │ │ │ ├── ThreadLocalDelegate.kt │ │ │ │ │ │ │ └── adapters │ │ │ │ │ │ │ │ ├── CustomObjectDtoAdapter.kt │ │ │ │ │ │ │ │ ├── DateAdapter.kt │ │ │ │ │ │ │ │ └── internal │ │ │ │ │ │ │ │ └── StreamDateFormatter.kt │ │ │ │ │ │ ├── scope │ │ │ │ │ │ │ ├── ClientScope.kt │ │ │ │ │ │ │ ├── UserScope.kt │ │ │ │ │ │ │ └── user │ │ │ │ │ │ │ │ ├── UserId.kt │ │ │ │ │ │ │ │ ├── UserIdentifier.kt │ │ │ │ │ │ │ │ └── UserJob.kt │ │ │ │ │ │ └── token │ │ │ │ │ │ │ ├── CacheableTokenProvider.kt │ │ │ │ │ │ │ ├── ConstantTokenProvider.kt │ │ │ │ │ │ │ ├── TokenManager.kt │ │ │ │ │ │ │ ├── TokenManagerImpl.kt │ │ │ │ │ │ │ └── TokenProvider.kt │ │ │ │ │ ├── coordinator │ │ │ │ │ │ ├── CoordinatorSocket.kt │ │ │ │ │ │ ├── CoordinatorSocketConnection.kt │ │ │ │ │ │ ├── CoordinatorSocketStateService.kt │ │ │ │ │ │ └── state │ │ │ │ │ │ │ ├── RestartReason.kt │ │ │ │ │ │ │ ├── VideoSocketConnectionType.kt │ │ │ │ │ │ │ ├── VideoSocketState.kt │ │ │ │ │ │ │ └── VideoSocketStateEvent.kt │ │ │ │ │ ├── internal │ │ │ │ │ │ ├── EventType.kt │ │ │ │ │ │ └── HealthMonitor.kt │ │ │ │ │ └── sfu │ │ │ │ │ │ ├── SfuSocket.kt │ │ │ │ │ │ ├── SfuSocketConnection.kt │ │ │ │ │ │ ├── SfuSocketStateService.kt │ │ │ │ │ │ └── state │ │ │ │ │ │ ├── RestartReason.kt │ │ │ │ │ │ ├── SfuSocketState.kt │ │ │ │ │ │ └── SfuSocketStateEvent.kt │ │ │ │ ├── sorting │ │ │ │ │ ├── DefaultSortOrder.kt │ │ │ │ │ └── SortedParticipantsState.kt │ │ │ │ ├── sounds │ │ │ │ │ ├── CallSoundPlayer.kt │ │ │ │ │ └── RingingConfig.kt │ │ │ │ └── utils │ │ │ │ │ ├── AndroidUtils.kt │ │ │ │ │ ├── AtomicUnitCall.kt │ │ │ │ │ ├── CallClientUtils.kt │ │ │ │ │ ├── DomainUtils.kt │ │ │ │ │ ├── LatencyResult.kt │ │ │ │ │ ├── ListUtils.kt │ │ │ │ │ ├── NoiseCancellationUtils.kt │ │ │ │ │ ├── RampValueUpAndDownHelper.kt │ │ │ │ │ ├── SdpVersion.kt │ │ │ │ │ ├── StateFlow.kt │ │ │ │ │ ├── StringUtils.kt │ │ │ │ │ ├── TokenUtils.kt │ │ │ │ │ └── UserUtils.kt │ │ │ │ ├── datastore │ │ │ │ ├── delegate │ │ │ │ │ └── StreamUserDataStore.kt │ │ │ │ ├── model │ │ │ │ │ └── StreamUserPreferences.kt │ │ │ │ └── serializer │ │ │ │ │ ├── EncryptedSerializer.kt │ │ │ │ │ └── UserSerializer.kt │ │ │ │ └── model │ │ │ │ ├── Credentials.kt │ │ │ │ ├── Device.kt │ │ │ │ ├── StreamCallId.kt │ │ │ │ ├── User.kt │ │ │ │ ├── UserAudioLevel.kt │ │ │ │ ├── UserDevices.kt │ │ │ │ └── mapper │ │ │ │ └── StreamCallCidMapper.kt │ │ ├── proto │ │ │ └── video │ │ │ │ └── sfu │ │ │ │ ├── event │ │ │ │ ├── events.pb.go │ │ │ │ ├── events.proto │ │ │ │ └── events_vtproto.pb.go │ │ │ │ ├── models │ │ │ │ ├── models.pb.go │ │ │ │ ├── models.pb.validate.go │ │ │ │ ├── models.proto │ │ │ │ └── models_vtproto.pb.go │ │ │ │ └── signal_rpc │ │ │ │ ├── signal.pb.go │ │ │ │ ├── signal.proto │ │ │ │ ├── signal.twirp.go │ │ │ │ └── signal_vtproto.pb.go │ │ └── res │ │ │ ├── drawable │ │ │ ├── stream_video_ic_call.xml │ │ │ ├── stream_video_ic_cancel_screenshare.xml │ │ │ ├── stream_video_ic_screenshare.xml │ │ │ ├── stream_video_ic_user.xml │ │ │ └── stream_video_ic_user_group.xml │ │ │ ├── raw │ │ │ ├── call_incoming_sound.mp3 │ │ │ └── call_outgoing_sound.mp3 │ │ │ └── values │ │ │ ├── ids.xml │ │ │ └── strings.xml │ └── test │ │ └── kotlin │ │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── core │ │ ├── CallCrudTest.kt │ │ ├── CallStateTest.kt │ │ ├── CameraManagerTest.kt │ │ ├── ClientAndAuthTest.kt │ │ ├── MicrophoneManagerTest.kt │ │ ├── SdpTest.kt │ │ ├── SfuSocketStateEventTest.kt │ │ ├── SpeakerManagerTest.kt │ │ ├── StreamVideoBuilderTest.kt │ │ ├── base │ │ ├── DispatcherRule.kt │ │ ├── IntegrationTestBase.kt │ │ ├── IntegrationTestHelper.kt │ │ ├── SocketTestBase.kt │ │ ├── StreamTestLogger.kt │ │ ├── TestBase.kt │ │ └── auth │ │ │ ├── GetAuthDataResponse.kt │ │ │ └── StreamService.kt │ │ ├── call │ │ └── connection │ │ │ ├── PublisherTest.kt │ │ │ ├── StreamPeerConnectionFactoryTest.kt │ │ │ ├── StreamPeerConnectionTest.kt │ │ │ ├── transceivers │ │ │ └── TransceiverCacheTest.kt │ │ │ └── utils │ │ │ └── VideoLayersTest.kt │ │ ├── lifecycle │ │ └── ConnectionPolicyLifecycleHandlerTest.kt │ │ ├── notifications │ │ └── internal │ │ │ └── service │ │ │ └── CallServiceConfigTest.kt │ │ ├── permission │ │ └── android │ │ │ └── PermissionUtilitiesKtTest.kt │ │ ├── reconnect │ │ ├── ReconnectAttemptsCountTest.kt │ │ └── ReconnectSessionIdTest.kt │ │ ├── rtc │ │ ├── JoinCallTest.kt │ │ ├── RtcSessionTest.kt │ │ └── RtcSessionTest2.kt │ │ ├── socket │ │ └── common │ │ │ └── SocketConnectionPolicyTest.kt │ │ ├── stories │ │ ├── AudioRoomTest.kt │ │ ├── ModerationTest.kt │ │ └── RingTest.kt │ │ ├── token │ │ ├── CacheableTokenProviderTest.kt │ │ ├── FakeTokenManager.kt │ │ └── FakeTokenProvider.kt │ │ └── utils │ │ ├── AtomicUnitCallTest.kt │ │ ├── RampValueUpAndDownHelperTest.kt │ │ ├── TestUtils.kt │ │ └── TokenUtilsTest.kt └── todo.md ├── stream-video-android-filters-video ├── .gitignore ├── api │ └── stream-video-android-filters-video.api ├── build.gradle.kts ├── consumer-rules.pro ├── libs │ └── renderscript-toolkit.aar ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── io │ └── getstream │ └── video │ └── android │ └── filters │ └── video │ ├── BlurredBackgroundVideoFilter.kt │ ├── FilterUtils.kt │ └── VirtualBackgroundVideoFilter.kt ├── stream-video-android-previewdata ├── .gitignore ├── api │ └── stream-video-android-previewdata.api ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ ├── baseline-prof.txt │ ├── generated │ └── baselineProfiles │ │ └── baseline-prof.txt │ └── kotlin │ └── io │ └── getstream │ └── video │ └── android │ └── mock │ └── StreamPreviewDataUtils.kt ├── stream-video-android-ui-compose ├── .gitignore ├── api │ └── stream-video-android-ui-compose.api ├── build.gradle.kts ├── datastore │ └── proto_stream_video_user.pb ├── libs │ └── renderscript-toolkit.aar └── src │ ├── main │ ├── AndroidManifest.xml │ ├── baseline-prof.txt │ ├── generated │ │ └── baselineProfiles │ │ │ └── baseline-prof.txt │ ├── kotlin │ │ └── io │ │ │ └── getstream │ │ │ └── video │ │ │ └── android │ │ │ └── compose │ │ │ ├── lifecycle │ │ │ └── MediaPiPLifecycle.kt │ │ │ ├── permission │ │ │ ├── CallPermissions.kt │ │ │ ├── LaunchPermissionRequest.kt │ │ │ ├── SinglePermission.kt │ │ │ └── VideoPermissionsState.kt │ │ │ ├── pip │ │ │ └── PictureInPicture.kt │ │ │ ├── state │ │ │ └── ui │ │ │ │ ├── internal │ │ │ │ ├── CallParticipantInfoMode.kt │ │ │ │ └── CallParticipantsInfoOption.kt │ │ │ │ └── participants │ │ │ │ └── ParticipantInfoAction.kt │ │ │ ├── theme │ │ │ ├── StreamColors.kt │ │ │ ├── StreamDimens.kt │ │ │ ├── StreamRippleConfiguration.kt │ │ │ ├── StreamShapes.kt │ │ │ ├── StreamTypography.kt │ │ │ └── VideoTheme.kt │ │ │ ├── ui │ │ │ ├── ComposeStreamCallActivity.kt │ │ │ ├── StreamCallActivityComposeDelegate.kt │ │ │ ├── StreamCallActivityComposeUi.kt │ │ │ ├── components │ │ │ │ ├── audio │ │ │ │ │ ├── AudioAppBar.kt │ │ │ │ │ ├── AudioControlActions.kt │ │ │ │ │ ├── AudioParticipantsGrid.kt │ │ │ │ │ ├── AudioRendererStyle.kt │ │ │ │ │ ├── AudioRoomContent.kt │ │ │ │ │ └── ParticipantAudio.kt │ │ │ │ ├── avatar │ │ │ │ │ ├── Avatar.kt │ │ │ │ │ ├── InitialsAvatar.kt │ │ │ │ │ ├── LocalAvatarPreviewProvider.kt │ │ │ │ │ ├── OnlineIndicator.kt │ │ │ │ │ ├── OnlineIndicatorAlignment.kt │ │ │ │ │ ├── UserAvatar.kt │ │ │ │ │ └── UserAvatarBackground.kt │ │ │ │ ├── background │ │ │ │ │ └── CallBackground.kt │ │ │ │ ├── base │ │ │ │ │ ├── Badge.kt │ │ │ │ │ ├── Container.kt │ │ │ │ │ ├── Dialogs.kt │ │ │ │ │ ├── InputFields.kt │ │ │ │ │ ├── StreamButton.kt │ │ │ │ │ └── styling │ │ │ │ │ │ ├── Badge.kt │ │ │ │ │ │ ├── CompositeStyleProvider.kt │ │ │ │ │ │ ├── DialogStyle.kt │ │ │ │ │ │ ├── StreamButtonDrawableStyle.kt │ │ │ │ │ │ ├── StreamButtonStyle.kt │ │ │ │ │ │ ├── StreamIconStyle.kt │ │ │ │ │ │ ├── StreamStyle.kt │ │ │ │ │ │ ├── StreamTextFieldStyle.kt │ │ │ │ │ │ ├── TextStyles.kt │ │ │ │ │ │ └── Utils.kt │ │ │ │ ├── call │ │ │ │ │ ├── CallAppBar.kt │ │ │ │ │ ├── activecall │ │ │ │ │ │ ├── AudioCallContent.kt │ │ │ │ │ │ ├── CallContent.kt │ │ │ │ │ │ └── internal │ │ │ │ │ │ │ ├── DefaultPermissionHandler.kt │ │ │ │ │ │ │ └── InviteUsersDialog.kt │ │ │ │ │ ├── controls │ │ │ │ │ │ ├── ControlActions.kt │ │ │ │ │ │ └── actions │ │ │ │ │ │ │ ├── AcceptCallAction.kt │ │ │ │ │ │ │ ├── CancelCallAction.kt │ │ │ │ │ │ │ ├── ChatDialogAction.kt │ │ │ │ │ │ │ ├── ClosedCaptionsToggleAction.kt │ │ │ │ │ │ │ ├── ControlActionsBuilder.kt │ │ │ │ │ │ │ ├── DeclineCallAction.kt │ │ │ │ │ │ │ ├── FlipCameraAction.kt │ │ │ │ │ │ │ ├── GenericActions.kt │ │ │ │ │ │ │ ├── LeaveCallAction.kt │ │ │ │ │ │ │ ├── ScreenShareToggleAction.kt │ │ │ │ │ │ │ ├── SettingsAction.kt │ │ │ │ │ │ │ ├── ToggleCameraAction.kt │ │ │ │ │ │ │ ├── ToggleMicrophoneAction.kt │ │ │ │ │ │ │ └── ToggleSpeakerphoneAction.kt │ │ │ │ │ ├── diagnostics │ │ │ │ │ │ └── CallDiagnosticsContent.kt │ │ │ │ │ ├── lobby │ │ │ │ │ │ ├── CallLobby.kt │ │ │ │ │ │ └── LobbyControlsActions.kt │ │ │ │ │ ├── pinning │ │ │ │ │ │ └── ParticipantActions.kt │ │ │ │ │ ├── renderer │ │ │ │ │ │ ├── FloatingParticipantVideo.kt │ │ │ │ │ │ ├── ParticipantVideo.kt │ │ │ │ │ │ ├── ParticipantsLayout.kt │ │ │ │ │ │ ├── ParticipantsRegularGrid.kt │ │ │ │ │ │ ├── ParticipantsScreenSharing.kt │ │ │ │ │ │ ├── ParticipantsSpotlight.kt │ │ │ │ │ │ ├── VideoRendererStyle.kt │ │ │ │ │ │ └── internal │ │ │ │ │ │ │ ├── Common.kt │ │ │ │ │ │ │ ├── InternalLocalComposite.kt │ │ │ │ │ │ │ ├── LandscapeScreenSharingVideoRenderer.kt │ │ │ │ │ │ │ ├── LandscapeVideoRenderer.kt │ │ │ │ │ │ │ ├── LazyColumnVideoRenderer.kt │ │ │ │ │ │ │ ├── LazyRowVideoRenderer.kt │ │ │ │ │ │ │ ├── OrientationVideoRenderer.kt │ │ │ │ │ │ │ ├── PortraitScreenSharingVideoRenderer.kt │ │ │ │ │ │ │ ├── PortraitVideoRenderer.kt │ │ │ │ │ │ │ ├── ScreenShareTooltip.kt │ │ │ │ │ │ │ ├── ScreenShareVideoRenderer.kt │ │ │ │ │ │ │ └── SpotlightVideorenderer.kt │ │ │ │ │ └── ringing │ │ │ │ │ │ ├── RingingCallContent.kt │ │ │ │ │ │ ├── incomingcall │ │ │ │ │ │ ├── IncomingCallContent.kt │ │ │ │ │ │ ├── IncomingCallControls.kt │ │ │ │ │ │ └── IncomingCallDetails.kt │ │ │ │ │ │ └── outgoingcall │ │ │ │ │ │ ├── OutgoingCallContent.kt │ │ │ │ │ │ ├── OutgoingCallControls.kt │ │ │ │ │ │ └── OutgoingCallDetails.kt │ │ │ │ ├── indicator │ │ │ │ │ ├── AudioVolumeIndicator.kt │ │ │ │ │ ├── GenericIndicator.kt │ │ │ │ │ ├── MicrophoneIndicator.kt │ │ │ │ │ ├── NetworkQualityIndicator.kt │ │ │ │ │ └── SoundIndicator.kt │ │ │ │ ├── livestream │ │ │ │ │ ├── LivestreamBackStage.kt │ │ │ │ │ ├── LivestreamPlayer.kt │ │ │ │ │ ├── LivestreamPlayerOverlay.kt │ │ │ │ │ └── LivestreamRenderer.kt │ │ │ │ ├── participants │ │ │ │ │ ├── CallParticipantsInfoMenu.kt │ │ │ │ │ ├── ParticipantAvatars.kt │ │ │ │ │ └── internal │ │ │ │ │ │ ├── CallParticipantListAppBar.kt │ │ │ │ │ │ ├── CallParticipantsInfoActions.kt │ │ │ │ │ │ ├── CallParticipantsList.kt │ │ │ │ │ │ ├── InviteUserList.kt │ │ │ │ │ │ └── ParticipantInformation.kt │ │ │ │ ├── plugins │ │ │ │ │ ├── BlurTransformationPlugin.kt │ │ │ │ │ ├── RememberBlurPainter.kt │ │ │ │ │ └── TransformationPainter.kt │ │ │ │ └── video │ │ │ │ │ ├── VideoRenderer.kt │ │ │ │ │ ├── VideoRendererView.kt │ │ │ │ │ ├── VideoScalingType.kt │ │ │ │ │ └── config │ │ │ │ │ └── VideoRendererConfig.kt │ │ │ └── extensions │ │ │ │ └── ModifierExtensions.kt │ │ │ └── utils │ │ │ ├── ImageUtils.kt │ │ │ └── Resources.kt │ └── res │ │ ├── drawable │ │ └── example.webp │ │ └── values │ │ └── strings.xml │ └── test │ ├── kotlin │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── compose │ │ ├── AudioCallContentTest.kt │ │ ├── AudioRoomTest.kt │ │ ├── AvatarTest.kt │ │ ├── BaseComponentsTest.kt │ │ ├── CallComponentsPortraitTest.kt │ │ ├── CallContentTest.kt │ │ ├── CallControlsTest.kt │ │ ├── CallLobbyTest.kt │ │ ├── IndicatorsTest.kt │ │ ├── LivestreamTest.kt │ │ ├── ParticipantLandscapeTest.kt │ │ ├── ParticipantsPortraitTest.kt │ │ └── base │ │ └── BaseComposeTest.kt │ └── snapshots │ └── images │ ├── io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioCallContent in default state.png │ ├── io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioCallContent without header.png │ ├── io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioOnlyCallContent in default state.png │ ├── io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioOnlyCallContent without header.png │ ├── io.getstream.video.android.compose_AudioRoomTest_snapshot AudioAppBar composable.png │ ├── io.getstream.video.android.compose_AudioRoomTest_snapshot AudioControlActions composable.png │ ├── io.getstream.video.android.compose_AudioRoomTest_snapshot AudioParticipantsGrid composable.png │ ├── io.getstream.video.android.compose_AudioRoomTest_snapshot AudioRoom DarkMode composable.png │ ├── io.getstream.video.android.compose_AudioRoomTest_snapshot AudioRoom composable.png │ ├── io.getstream.video.android.compose_AvatarTest_snapshot AvatarInitial composable.png │ ├── io.getstream.video.android.compose_AvatarTest_snapshot UserAvatar composable.png │ ├── io.getstream.video.android.compose_CallBackgroundTest_snapshot CallBackground composable.png │ ├── io.getstream.video.android.compose_CallComponentsLandscapeTest_snapshot LandscapeCallControls composable.png │ ├── io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot CallAppBar composable.png │ ├── io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot CallControls composable.png │ ├── io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot ParticipantIndicatorIcon composable.png │ ├── io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot RegularCallControls composable.png │ ├── io.getstream.video.android.compose_CallContainerLandscapeTest_snapshot CallContent with multiple participants composable.png │ ├── io.getstream.video.android.compose_CallContainerPortraitTest_snapshot CallContent with multiple participants composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot CallContent with multiple participants composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent Video type with multiple participants composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent with minimum parameters.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent with one participant composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContentDetails Audio composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContentDetails Video composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallOptions composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with minimum parameters and audio type.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with minimum parameters and video type.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with multiple participants composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with one participant composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallDetails Audio composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallDetails Video composable.png │ ├── io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallOptions composable.png │ ├── io.getstream.video.android.compose_CallControlsTest_snapshot CallControls Actions composable.png │ ├── io.getstream.video.android.compose_CallControlsTest_snapshot CallControls composable.png │ ├── io.getstream.video.android.compose_CallLobbyTest_snapshot CallLobby composable.png │ ├── io.getstream.video.android.compose_IndicatorsTest_snapshot ActiveSoundLevels composable.png │ ├── io.getstream.video.android.compose_IndicatorsTest_snapshot Connection ConnectionQualityIndicator composable.png │ ├── io.getstream.video.android.compose_IndicatorsTest_snapshot Connection ParticipantLabel composable.png │ ├── io.getstream.video.android.compose_IndicatorsTest_snapshot SoundIndicator composable.png │ ├── io.getstream.video.android.compose_LivestreamTest_snapshot Livestream Player Overlay composable.png │ ├── io.getstream.video.android.compose_LivestreamTest_snapshot Livestream Player composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants1 composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants2 composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants3 composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants4 composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants5 composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants6 composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeScreenSharingContent for myself composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeScreenSharingContent for other participant composable.png │ ├── io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot ParticipantsRow composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipant a local call composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipant a remote call composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsInfoAppBar composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsInfoOptions composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsList composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot InviteUserList composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot LocalVideoContent composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantAvatars composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantInformation composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantVideo composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantsColumn composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants1 composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants2 composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants3 composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants4 composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants5 composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants6 composable.png │ ├── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitScreenSharingContent for myself composable.png │ └── io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitScreenSharingContent for other participant composable.png ├── stream-video-android-ui-core ├── api │ └── stream-video-android-ui-core.api ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ ├── baseline-prof.txt │ ├── generated │ └── baselineProfiles │ │ └── baseline-prof.txt │ ├── kotlin │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── ui │ │ └── common │ │ ├── AbstractCallActivity.kt │ │ ├── StreamActivityUiDelegate.kt │ │ ├── StreamCallActivity.kt │ │ ├── StreamCallActivityConfiguration.kt │ │ ├── notification │ │ └── AbstractNotificationActivity.kt │ │ ├── permission │ │ ├── PermissionManager.kt │ │ └── PermissionManagerProvider.kt │ │ ├── renderer │ │ └── StreamVideoTextureViewRenderer.kt │ │ ├── util │ │ ├── ColorUtils.kt │ │ ├── ParticipantsText.kt │ │ ├── Resources.kt │ │ ├── StateFlow.kt │ │ └── StreamCallActivityDelicateApi.kt │ │ └── view │ │ ├── ParticipantContentView.kt │ │ └── ParticipantItemView.kt │ └── res │ ├── drawable │ ├── stream_video_call_sample.webp │ ├── stream_video_ic_arrow_back.xml │ ├── stream_video_ic_call.xml │ ├── stream_video_ic_call_end.xml │ ├── stream_video_ic_camera_flip.xml │ ├── stream_video_ic_close.xml │ ├── stream_video_ic_fullscreen.xml │ ├── stream_video_ic_fullscreen_exit.xml │ ├── stream_video_ic_join_call.xml │ ├── stream_video_ic_landscape_mode.xml │ ├── stream_video_ic_leave.xml │ ├── stream_video_ic_live.xml │ ├── stream_video_ic_message.xml │ ├── stream_video_ic_mic_off.xml │ ├── stream_video_ic_mic_on.xml │ ├── stream_video_ic_options.xml │ ├── stream_video_ic_participants.xml │ ├── stream_video_ic_play.xml │ ├── stream_video_ic_portrait_mode.xml │ ├── stream_video_ic_preview_avatar.xml │ ├── stream_video_ic_reaction.xml │ ├── stream_video_ic_screensharing.xml │ ├── stream_video_ic_selected.xml │ ├── stream_video_ic_speaker_off.xml │ ├── stream_video_ic_speaker_on.xml │ ├── stream_video_ic_videocam_off.xml │ └── stream_video_ic_videocam_on.xml │ ├── layout │ └── stream_video_content_participant.xml │ ├── values-night │ └── colors.xml │ └── values │ ├── colors-legacy.xml │ ├── colors.xml │ ├── dimens-legacy.xml │ ├── dimens.xml │ └── strings.xml ├── stream-video-android-ui-xml ├── api │ └── stream-video-android-ui-xml.api ├── build.gradle.kts ├── lint-baseline.xml └── src │ └── main │ ├── AndroidManifest.xml │ ├── baseline-prof.txt │ ├── generated │ └── baselineProfiles │ │ └── baseline-prof.txt │ ├── kotlin │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── xml │ │ ├── VideoUI.kt │ │ ├── binding │ │ ├── CallAppBarBinding.kt │ │ ├── CallContainterViewBinding.kt │ │ ├── CallControlsViewBinding.kt │ │ ├── CallParticipantGridViewBinding.kt │ │ ├── CallParticipantListViewBinding.kt │ │ ├── CallParticipantViewBinding.kt │ │ ├── CallViewBinding.kt │ │ ├── FloatingParticipantViewBinding.kt │ │ ├── IncomingCallViewBinding.kt │ │ ├── OutgoingCallViewBinding.kt │ │ ├── PictureInPictureViewBinding.kt │ │ └── ScreenShareViewBinding.kt │ │ ├── font │ │ ├── TextStyle.kt │ │ ├── VideoFonts.kt │ │ ├── VideoFontsImpl.kt │ │ └── VideoStyle.kt │ │ ├── imageloading │ │ ├── CoilDisposable.kt │ │ ├── CoilStreamImageLoader.kt │ │ ├── DefaultStreamCoilImageLoader.kt │ │ ├── ImageHeadersProvider.kt │ │ ├── RoundedCornersTransformation.kt │ │ ├── StreamCoil.kt │ │ ├── StreamImageLoader.kt │ │ └── StreamImageLoaderFactory.kt │ │ ├── initializer │ │ └── VideoUIInitializer.kt │ │ ├── state │ │ └── CallDeviceState.kt │ │ ├── utils │ │ ├── Disposable.kt │ │ ├── LazyVarDelegate.kt │ │ ├── OrientationChangeListener.kt │ │ └── extensions │ │ │ ├── ConstraintLayout.kt │ │ │ ├── Context.kt │ │ │ ├── ImageUtils.kt │ │ │ ├── Int.kt │ │ │ ├── TypedArray.kt │ │ │ ├── View.kt │ │ │ └── ViewGroup.kt │ │ ├── viewmodel │ │ ├── CallViewModel.kt │ │ ├── CallViewModelFactory.kt │ │ └── CallViewModelFactoryProvider.kt │ │ └── widget │ │ ├── appbar │ │ ├── CallAppBarContent.kt │ │ ├── CallAppBarStyle.kt │ │ ├── CallAppBarView.kt │ │ └── internal │ │ │ ├── DefaultCallAppBarCenterContent.kt │ │ │ ├── DefaultCallAppBarLeadingContent.kt │ │ │ └── DefaultCallAppBarTrailingContent.kt │ │ ├── avatar │ │ ├── AvatarShape.kt │ │ ├── AvatarStyle.kt │ │ ├── AvatarView.kt │ │ └── internal │ │ │ └── AvatarPlaceholderDrawable.kt │ │ ├── call │ │ ├── CallView.kt │ │ └── CallViewStyle.kt │ │ ├── callcontainer │ │ ├── CallContainerStyle.kt │ │ └── CallContainerView.kt │ │ ├── calldetails │ │ ├── CallBackgroundView.kt │ │ ├── CallDetailsStyle.kt │ │ └── CallDetailsView.kt │ │ ├── control │ │ ├── CallControlItem.kt │ │ ├── CallControlsStyle.kt │ │ ├── CallControlsView.kt │ │ ├── ControlButtonStyle.kt │ │ └── ControlButtonView.kt │ │ ├── incoming │ │ ├── IncomingCallStyle.kt │ │ └── IncomingCallView.kt │ │ ├── outgoing │ │ ├── OutgoingCallStyle.kt │ │ └── OutgoingCallView.kt │ │ ├── participant │ │ ├── CallParticipantLabelAlignment.kt │ │ ├── CallParticipantStyle.kt │ │ ├── CallParticipantView.kt │ │ ├── FloatingParticipantView.kt │ │ ├── PictureInPictureStyle.kt │ │ ├── PictureInPictureView.kt │ │ ├── RendererInitializer.kt │ │ └── internal │ │ │ ├── CallParticipantsGridView.kt │ │ │ └── CallParticipantsListView.kt │ │ ├── renderer │ │ └── VideoRenderer.kt │ │ ├── screenshare │ │ ├── ScreenShareStyle.kt │ │ └── ScreenShareView.kt │ │ ├── transformer │ │ └── TransformStyle.kt │ │ └── view │ │ ├── CallCardView.kt │ │ ├── CallConstraintLayout.kt │ │ └── JobHolder.kt │ ├── res │ ├── drawable │ │ ├── stream_video_bg_active_call_participant.xml │ │ ├── stream_video_bg_call.jpg │ │ ├── stream_video_bg_call_control_option.xml │ │ ├── stream_video_bg_call_option.xml │ │ ├── stream_video_bg_call_participant_name.xml │ │ ├── stream_video_rect_active_speaker.xml │ │ ├── stream_video_rect_controls.xml │ │ └── stream_video_rect_controls_landscape.xml │ ├── layout │ │ ├── stream_video_activity_call.xml │ │ ├── stream_video_item_participant.xml │ │ ├── stream_video_view_call_app_bar.xml │ │ ├── stream_video_view_call_details.xml │ │ ├── stream_video_view_call_participant.xml │ │ ├── stream_video_view_control_button.xml │ │ ├── stream_video_view_floating_participant.xml │ │ ├── stream_video_view_incoming_call.xml │ │ ├── stream_video_view_outgoing_call.xml │ │ └── stream_video_view_screen_share.xml │ ├── menu │ │ └── stream_video_call_menu.xml │ └── values │ │ ├── stream_video_attrs.xml │ │ ├── stream_video_attrs_avatar_view.xml │ │ ├── stream_video_attrs_call_app_bar.xml │ │ ├── stream_video_attrs_call_container_view.xml │ │ ├── stream_video_attrs_call_content_view.xml │ │ ├── stream_video_attrs_call_controls_view.xml │ │ ├── stream_video_attrs_call_details_view.xml │ │ ├── stream_video_attrs_call_participant_view.xml │ │ ├── stream_video_attrs_control_button.xml │ │ ├── stream_video_attrs_incoming_call_view.xml │ │ ├── stream_video_attrs_outgoing_call_view.xml │ │ ├── stream_video_attrs_picture_in_picture_view.xml │ │ ├── stream_video_attrs_screen_share.xml │ │ ├── stream_video_colors.xml │ │ └── styles.xml │ └── startup-prof.txt └── tutorials ├── tutorial-audio ├── .gitignore ├── .idea │ ├── .gitignore │ ├── gradle.xml │ └── misc.xml ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── tutorial │ │ └── audio │ │ └── MainActivity.kt │ └── res │ ├── drawable │ ├── ic_launcher_background.xml │ └── ic_launcher_foreground.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── values │ ├── colors.xml │ ├── strings.xml │ └── themes.xml │ └── xml │ ├── backup_rules.xml │ └── data_extraction_rules.xml ├── tutorial-livestream ├── .gitignore ├── .idea │ ├── .gitignore │ ├── gradle.xml │ ├── misc.xml │ └── workspace.xml ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── tutorial │ │ └── livestream │ │ ├── LiveGuest.kt │ │ ├── LiveHost.kt │ │ ├── LiveMain.kt │ │ ├── LiveNavHost.kt │ │ ├── LiveStreamNotificationHandler.kt │ │ ├── MainActivity.kt │ │ └── ui │ │ ├── LiveButton.kt │ │ ├── LiveLabel.kt │ │ └── TimeLabel.kt │ └── res │ ├── drawable-hdpi │ └── getstream_mountain.png │ ├── drawable │ ├── ic_launcher_background.xml │ └── ic_launcher_foreground.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── values │ ├── colors.xml │ ├── strings.xml │ └── themes.xml │ └── xml │ ├── backup_rules.xml │ └── data_extraction_rules.xml ├── tutorial-ringing ├── .gitignore ├── build.gradle.kts ├── google-services.json └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── io │ │ └── getstream │ │ └── video │ │ └── android │ │ └── tutorial │ │ └── ringing │ │ ├── BusyCallActivity.kt │ │ ├── CustomCallActivity.kt │ │ ├── CustomNotificationHandler.kt │ │ ├── MainActivity.kt │ │ ├── RingingApp.kt │ │ └── VideoCallActivity.kt │ └── res │ ├── drawable │ ├── ic_launcher_background.xml │ ├── ic_launcher_foreground.xml │ └── round_call_missed_24.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── values │ ├── colors.xml │ ├── strings.xml │ └── themes.xml │ └── xml │ ├── backup_rules.xml │ ├── data_extraction_rules.xml │ └── network_security_config.xml └── tutorial-video ├── .gitignore ├── build.gradle.kts └── src └── main ├── AndroidManifest.xml ├── kotlin └── io │ └── getstream │ └── video │ └── android │ └── tutorial │ └── video │ ├── MainActivity.kt │ ├── MainActivity2.kt │ └── MainActivity3.kt └── res ├── drawable ├── ic_launcher_background.xml └── ic_launcher_foreground.xml ├── mipmap-anydpi-v26 ├── ic_launcher.xml └── ic_launcher_round.xml ├── mipmap-hdpi ├── ic_launcher.webp └── ic_launcher_round.webp ├── mipmap-mdpi ├── ic_launcher.webp └── ic_launcher_round.webp ├── mipmap-xhdpi ├── ic_launcher.webp └── ic_launcher_round.webp ├── mipmap-xxhdpi ├── ic_launcher.webp └── ic_launcher_round.webp ├── mipmap-xxxhdpi ├── ic_launcher.webp └── ic_launcher_round.webp ├── values ├── colors.xml ├── strings.xml └── themes.xml └── xml ├── backup_rules.xml └── data_extraction_rules.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | [*] 3 | # Most of the standard properties are supported 4 | max_line_length=100 5 | 6 | # don't use wildcard for Java/Kotlin imports 7 | [*.{java,kt}] 8 | wildcard_import_limit = 999 9 | ij_kotlin_name_count_to_use_star_import = 999 10 | ij_kotlin_name_count_to_use_star_import_for_members = 999 -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # Bump spotless to 6.20.0 2 | ddb1428bb7dda236be6033504c69a8ead3a677ea 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/android_task.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Android Video SDK task 3 | about: Create a new task for the Android Video SDK. 4 | title: '' 5 | labels: core, xml, compose, starter-kit, sample-app 6 | assignees: '' 7 | --- 8 | 9 | ``` 10 | Note: For labels, choose the area of our SDK to which this task applies to. Once you've chosen the area, add the corresponding labels. 11 | 12 | After that, remove the rest of the labels, as well as this comment! 13 | ``` 14 | 15 | ### Context & proposal 16 | 17 | TODO - Describe what this task is about and why we need to support it. 18 | 19 | ### Acceptance criteria 20 | 21 | To accept this task we need to complete the following items: 22 | 23 | - [ ] TODO - Add items to complete within this task. -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve. 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **SDK version** 14 | - x.x.x 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Device:** 27 | - Vendor and model: [e.g. Samsung S8] 28 | - Android version: [e.g. 9] 29 | 30 | **Screenshots** 31 | If applicable, add screenshots to help explain your problem. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Ask a question 4 | url: https://github.com/GetStream/stream-video-android/discussions 5 | about: If you just have a question, please open a discussion instead of an issue. 6 | -------------------------------------------------------------------------------- /.github/actions/setup-node/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Setup Node' 2 | description: 'Setup Node' 3 | 4 | inputs: 5 | node-version: 6 | description: The version of Node.js to use 7 | required: false 8 | default: '16' 9 | 10 | runs: 11 | using: 'composite' 12 | steps: 13 | - name: Setup Node 14 | uses: actions/setup-node@v3 15 | with: 16 | node-version: ${{ inputs.node-version }} 17 | registry-url: https://registry.npmjs.org 18 | -------------------------------------------------------------------------------- /.github/release.yaml: -------------------------------------------------------------------------------- 1 | changelog: 2 | exclude: 3 | labels: 4 | - "pr:ignore-for-release" 5 | authors: 6 | - "github-actions[bot]" 7 | - "stream-public-bot" 8 | categories: 9 | - title: Breaking Changes 🛠 10 | labels: 11 | - "pr:breaking-change" 12 | - title: New Features 🎉 13 | labels: 14 | - "pr:new-feature" 15 | - title: Bug Fixes 🐛 16 | labels: 17 | - "pr:bug" 18 | - title: Improvements ✨ 19 | labels: 20 | - "pr:improvement" 21 | - title: Documentation 📚 22 | labels: 23 | - "pr:documentation" 24 | - title: Dependencies 📦 25 | labels: 26 | - "pr:dependencies" 27 | - title: Internal 🧪 28 | labels: 29 | - "pr:internal" 30 | - "pr:ci" 31 | - "pr:test" 32 | - title: Demo App 🧩 33 | labels: 34 | - "pr:demo-app" 35 | - title: Other Changes 36 | labels: 37 | - "*" 38 | -------------------------------------------------------------------------------- /.github/workflows/no-response.yml: -------------------------------------------------------------------------------- 1 | name: No Response 2 | 3 | on: 4 | issue_comment: 5 | types: [created] 6 | schedule: 7 | # Every midnight 8 | - cron: '0 0 * * *' 9 | 10 | jobs: 11 | noResponse: 12 | runs-on: ubuntu-22.04 13 | steps: 14 | - uses: lee-dohm/no-response@v0.5.0 15 | with: 16 | token: ${{ github.token }} 17 | daysUntilClose: 7 18 | responseRequiredLabel: waiting for response 19 | closeComment: > 20 | This issue has been automatically closed because there has been no response 21 | to our request from the original author. 22 | Please don't hesitate to comment on the bug if you have 23 | any more information for us - we will reopen it right away! 24 | Thanks for your contribution. -------------------------------------------------------------------------------- /.github/workflows/release-docs.yaml: -------------------------------------------------------------------------------- 1 | name: ReleaseDocs 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | workflow_dispatch: 8 | 9 | jobs: 10 | publish_dokka: 11 | name: Dokka docs 12 | runs-on: ubuntu-22.04 13 | steps: 14 | - name: Check out code 15 | uses: actions/checkout@v3.1.0 16 | with: 17 | ref: main 18 | - uses: GetStream/android-ci-actions/actions/setup-java@main 19 | - name: Generate Dokka HTML docs 20 | run: ./gradlew dokkaHtmlMultimodule 21 | - name: Deploy to GitHub pages 22 | uses: peaceiris/actions-gh-pages@v3 23 | with: 24 | github_token: ${{ secrets.DOCUSAURUS_GH_TOKEN }} 25 | publish_dir: ./build/dokka/htmlMultiModule 26 | publish_branch: gh-pages -------------------------------------------------------------------------------- /.readme-assets/Github-Graphic-Android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/.readme-assets/Github-Graphic-Android.jpg -------------------------------------------------------------------------------- /.repackage-assets/maven_local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/.repackage-assets/maven_local.png -------------------------------------------------------------------------------- /.sign/debug.keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/.sign/debug.keystore.jks -------------------------------------------------------------------------------- /.styles/Google/AMPM.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use 'AM' or 'PM' (preceded by a space)." 3 | link: 'https://developers.google.com/style/word-list' 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2}[AP]M' 8 | - '\d{1,2} ?[ap]m' 9 | - '\d{1,2} ?[aApP]\.[mM]\.' 10 | -------------------------------------------------------------------------------- /.styles/Google/Acronyms.yml: -------------------------------------------------------------------------------- 1 | extends: conditional 2 | message: "Spell out '%s', if it's unfamiliar to the audience." 3 | link: 'https://developers.google.com/style/abbreviations' 4 | level: suggestion 5 | ignorecase: false 6 | # Ensures that the existence of 'first' implies the existence of 'second'. 7 | first: '\b([A-Z]{3,5})\b' 8 | second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{3,5})\)' 9 | # ... with the exception of these: 10 | exceptions: 11 | - API 12 | - ASP 13 | - CLI 14 | - CPU 15 | - CSS 16 | - CSV 17 | - DEBUG 18 | - DOM 19 | - DPI 20 | - FAQ 21 | - GCC 22 | - GDB 23 | - GET 24 | - GPU 25 | - GTK 26 | - GUI 27 | - HTML 28 | - HTTP 29 | - HTTPS 30 | - IDE 31 | - JAR 32 | - JSON 33 | - JSX 34 | - LESS 35 | - LLDB 36 | - NET 37 | - NOTE 38 | - NVDA 39 | - OSS 40 | - PATH 41 | - PDF 42 | - PHP 43 | - POST 44 | - RAM 45 | - REPL 46 | - RSA 47 | - SCM 48 | - SCSS 49 | - SDK 50 | - SQL 51 | - SSH 52 | - SSL 53 | - SVG 54 | - TBD 55 | - TCP 56 | - TODO 57 | - URI 58 | - URL 59 | - USB 60 | - UTF 61 | - XML 62 | - XSS 63 | - YAML 64 | - ZIP 65 | -------------------------------------------------------------------------------- /.styles/Google/Colons.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' should be in lowercase." 3 | link: 'https://developers.google.com/style/colons' 4 | nonword: true 5 | level: warning 6 | scope: sentence 7 | tokens: 8 | - ':\s[A-Z]' 9 | -------------------------------------------------------------------------------- /.styles/Google/Contractions.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Feel free to use '%s' instead of '%s'." 3 | link: 'https://developers.google.com/style/contractions' 4 | level: suggestion 5 | ignorecase: true 6 | action: 7 | name: replace 8 | swap: 9 | are not: aren't 10 | cannot: can't 11 | could not: couldn't 12 | did not: didn't 13 | do not: don't 14 | does not: doesn't 15 | has not: hasn't 16 | have not: haven't 17 | how is: how's 18 | is not: isn't 19 | it is: it's 20 | should not: shouldn't 21 | that is: that's 22 | they are: they're 23 | was not: wasn't 24 | we are: we're 25 | we have: we've 26 | were not: weren't 27 | what is: what's 28 | when is: when's 29 | where is: where's 30 | will not: won't 31 | -------------------------------------------------------------------------------- /.styles/Google/DateFormat.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use 'July 31, 2016' format, not '%s'." 3 | link: 'https://developers.google.com/style/dates-times' 4 | ignorecase: true 5 | level: error 6 | nonword: true 7 | tokens: 8 | - '\d{1,2}(?:\.|/)\d{1,2}(?:\.|/)\d{4}' 9 | - '\d{1,2} (?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?) \d{4}' 10 | -------------------------------------------------------------------------------- /.styles/Google/Ellipses.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "In general, don't use an ellipsis." 3 | link: 'https://developers.google.com/style/ellipses' 4 | nonword: true 5 | level: warning 6 | action: 7 | name: remove 8 | tokens: 9 | - '\.\.\.' 10 | -------------------------------------------------------------------------------- /.styles/Google/EmDash.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't put a space before or after a dash." 3 | link: 'https://developers.google.com/style/dashes' 4 | nonword: true 5 | level: error 6 | action: 7 | name: edit 8 | params: 9 | - remove 10 | - ' ' 11 | tokens: 12 | - '\s[—–]\s' 13 | -------------------------------------------------------------------------------- /.styles/Google/EnDash.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use an em dash ('—') instead of '–'." 3 | link: 'https://developers.google.com/style/dashes' 4 | nonword: true 5 | level: error 6 | action: 7 | name: edit 8 | params: 9 | - replace 10 | - '-' 11 | - '—' 12 | tokens: 13 | - '–' 14 | -------------------------------------------------------------------------------- /.styles/Google/Exclamation.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't use exclamation points in text." 3 | link: 'https://developers.google.com/style/exclamation-points' 4 | nonword: true 5 | level: error 6 | tokens: 7 | - '\w!(?:\s|$)' 8 | -------------------------------------------------------------------------------- /.styles/Google/FirstPerson.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Avoid first-person pronouns such as '%s'." 3 | link: 'https://developers.google.com/style/pronouns#personal-pronouns' 4 | ignorecase: true 5 | level: warning 6 | nonword: true 7 | tokens: 8 | - (?:^|\s)I\s 9 | - (?:^|\s)I,\s 10 | - \bI'm\b 11 | - \bme\b 12 | - \bmy\b 13 | - \bmine\b 14 | -------------------------------------------------------------------------------- /.styles/Google/Gender.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't use '%s' as a gender-neutral pronoun." 3 | link: 'https://developers.google.com/style/pronouns#gender-neutral-pronouns' 4 | level: error 5 | ignorecase: true 6 | tokens: 7 | - he/she 8 | - s/he 9 | - \(s\)he 10 | -------------------------------------------------------------------------------- /.styles/Google/HeadingPunctuation.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't put a period at the end of a heading." 3 | link: 'https://developers.google.com/style/capitalization#capitalization-in-titles-and-headings' 4 | nonword: true 5 | level: warning 6 | scope: heading 7 | action: 8 | name: edit 9 | params: 10 | - remove 11 | - '.' 12 | tokens: 13 | - '[a-z0-9][.]\s*$' 14 | -------------------------------------------------------------------------------- /.styles/Google/Headings.yml: -------------------------------------------------------------------------------- 1 | extends: capitalization 2 | message: "'%s' should use sentence-style capitalization." 3 | link: 'https://developers.google.com/style/capitalization#capitalization-in-titles-and-headings' 4 | level: warning 5 | scope: heading 6 | match: $sentence 7 | indicators: 8 | - ':' 9 | exceptions: 10 | - Azure 11 | - CLI 12 | - Code 13 | - Cosmos 14 | - Docker 15 | - Emmet 16 | - gRPC 17 | - I 18 | - Kubernetes 19 | - Linux 20 | - macOS 21 | - Marketplace 22 | - MongoDB 23 | - REPL 24 | - Studio 25 | - TypeScript 26 | - URLs 27 | - Visual 28 | - VS 29 | - Windows 30 | -------------------------------------------------------------------------------- /.styles/Google/Latin.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Use '%s' instead of '%s'." 3 | link: 'https://developers.google.com/style/abbreviations' 4 | ignorecase: true 5 | level: error 6 | nonword: true 7 | action: 8 | name: replace 9 | swap: 10 | '\b(?:eg|e\.g\.)[\s,]': for example 11 | '\b(?:ie|i\.e\.)[\s,]': that is 12 | -------------------------------------------------------------------------------- /.styles/Google/LyHyphens.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' doesn't need a hyphen." 3 | link: 'https://developers.google.com/style/hyphens' 4 | level: error 5 | ignorecase: false 6 | nonword: true 7 | action: 8 | name: edit 9 | params: 10 | - replace 11 | - '-' 12 | - ' ' 13 | tokens: 14 | - '\s[^\s-]+ly-' 15 | -------------------------------------------------------------------------------- /.styles/Google/OptionalPlurals.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't use plurals in parentheses such as in '%s'." 3 | link: 'https://developers.google.com/style/plurals-parentheses' 4 | level: error 5 | nonword: true 6 | action: 7 | name: edit 8 | params: 9 | - remove 10 | - '(s)' 11 | tokens: 12 | - '\b\w+\(s\)' 13 | -------------------------------------------------------------------------------- /.styles/Google/Ordinal.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Spell out all ordinal numbers ('%s') in text." 3 | link: 'https://developers.google.com/style/numbers' 4 | level: error 5 | nonword: true 6 | tokens: 7 | - \d+(?:st|nd|rd|th) 8 | -------------------------------------------------------------------------------- /.styles/Google/OxfordComma.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use the Oxford comma in '%s'." 3 | link: 'https://developers.google.com/style/commas' 4 | scope: sentence 5 | level: warning 6 | tokens: 7 | - '(?:[^,]+,){1,}\s\w+\s(?:and|or)' 8 | -------------------------------------------------------------------------------- /.styles/Google/Parens.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use parentheses judiciously." 3 | link: 'https://developers.google.com/style/parentheses' 4 | nonword: true 5 | level: suggestion 6 | tokens: 7 | - '\(.+\)' 8 | -------------------------------------------------------------------------------- /.styles/Google/Periods.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't use periods with acronyms or initialisms such as '%s'." 3 | link: 'https://developers.google.com/style/abbreviations' 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\b(?:[A-Z]\.){3,}' 8 | -------------------------------------------------------------------------------- /.styles/Google/Quotes.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Commas and periods go inside quotation marks." 3 | link: 'https://developers.google.com/style/quotation-marks' 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '"[^"]+"[.,?]' 8 | -------------------------------------------------------------------------------- /.styles/Google/Ranges.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't add words such as 'from' or 'between' to describe a range of numbers." 3 | link: 'https://developers.google.com/style/hyphens' 4 | nonword: true 5 | level: warning 6 | tokens: 7 | - '(?:from|between)\s\d+\s?-\s?\d+' 8 | -------------------------------------------------------------------------------- /.styles/Google/Semicolons.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use semicolons judiciously." 3 | link: 'https://developers.google.com/style/semicolons' 4 | nonword: true 5 | scope: sentence 6 | level: suggestion 7 | tokens: 8 | - ';' 9 | -------------------------------------------------------------------------------- /.styles/Google/Slang.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Don't use internet slang abbreviations such as '%s'." 3 | link: 'https://developers.google.com/style/abbreviations' 4 | ignorecase: true 5 | level: error 6 | tokens: 7 | - 'tl;dr' 8 | - ymmv 9 | - rtfm 10 | - imo 11 | - fwiw 12 | -------------------------------------------------------------------------------- /.styles/Google/Spacing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' should have one space." 3 | link: 'https://developers.google.com/style/sentence-spacing' 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '[a-z][.?!] {2,}[A-Z]' 8 | - '[a-z][.?!][A-Z]' 9 | -------------------------------------------------------------------------------- /.styles/Google/Spelling.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "In general, use American spelling instead of '%s'." 3 | link: 'https://developers.google.com/style/spelling' 4 | ignorecase: true 5 | level: warning 6 | tokens: 7 | - '(?:\w+)nised?' 8 | - '(?:\w+)logue' 9 | -------------------------------------------------------------------------------- /.styles/Google/Units.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Put a nonbreaking space between the number and the unit in '%s'." 3 | link: 'https://developers.google.com/style/units-of-measure' 4 | nonword: true 5 | level: error 6 | tokens: 7 | - \d+(?:B|kB|MB|GB|TB) 8 | - \d+(?:ns|ms|s|min|h|d) 9 | -------------------------------------------------------------------------------- /.styles/Google/We.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Try to avoid using first-person plural like '%s'." 3 | link: 'https://developers.google.com/style/pronouns#personal-pronouns' 4 | level: warning 5 | ignorecase: true 6 | tokens: 7 | - we 8 | - we'(?:ve|re) 9 | - ours? 10 | - us 11 | - let's 12 | -------------------------------------------------------------------------------- /.styles/Google/Will.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Avoid using '%s'." 3 | link: 'https://developers.google.com/style/tense' 4 | ignorecase: true 5 | level: warning 6 | tokens: 7 | - will 8 | -------------------------------------------------------------------------------- /.styles/Google/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "feed": "https://github.com/errata-ai/Google/releases.atom", 3 | "vale_version": ">=1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /.styles/Google/vocab.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/.styles/Google/vocab.txt -------------------------------------------------------------------------------- /.styles/Vocab/Base/accept.txt: -------------------------------------------------------------------------------- 1 | 100ms 2 | Giphy 3 | composable 4 | livestream 5 | codec 6 | Giphies 7 | SDKs 8 | SDK's 9 | browsable 10 | scrollable 11 | boolean 12 | squircle 13 | Kotlin 14 | ngrok 15 | Gradle 16 | [Ll]ivestream 17 | keystore 18 | Huawei 19 | Sonatype 20 | protobuf 21 | dialogs 22 | Macrobenchmark 23 | [Cc]ooldown 24 | Telehealth 25 | scrollable 26 | [Ii]nitializers 27 | [Aa]ccessor 28 | integrationguide 29 | [Cc]omposable 30 | APIs 31 | Jetpack 32 | Jitpack 33 | Markwon 34 | jank 35 | UIs 36 | grayscale 37 | styleable 38 | Dark_mode 39 | Linkify 40 | overridable 41 | drawables 42 | Xiaomi 43 | Light_mode 44 | Levenstein 45 | coroutine 46 | _dashboard-xiaomi-config 47 | -------------------------------------------------------------------------------- /.styles/Vocab/Base/reject.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/.styles/Vocab/Base/reject.txt -------------------------------------------------------------------------------- /.vale.ini: -------------------------------------------------------------------------------- 1 | StylesPath = .styles 2 | 3 | MinAlertLevel = error 4 | Vocab = Base 5 | 6 | Packages = Google 7 | 8 | # The "formats" section allows you to associate an "unknown" format 9 | # with one of Vale's supported formats. 10 | [formats] 11 | mdx = md 12 | 13 | # Since we mapped `mdx` to `md` in the `formats`section we have to declare our format to be `md` 14 | [*.md] 15 | BasedOnStyles = Vale, Google 16 | 17 | BlockIgnores = import \w* from '.*', \w*\.gradle 18 | 19 | -------------------------------------------------------------------------------- /AppKey: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/AppKey -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # UNRELEASED CHANGELOG 2 | ## Common changes for all artifacts 3 | ### 🐞 Fixed 4 | 5 | ### ⬆️ Improved 6 | 7 | ### ✅ Added 8 | 9 | ### ⚠️ Changed 10 | 11 | ### ❌ Removed 12 | 13 | ## stream-video-android 14 | ### 🐞 Fixed 15 | 16 | ### ⬆️ Improved 17 | 18 | ### ✅ Added 19 | 20 | ### ⚠️ Changed 21 | 22 | ### ❌ Removed 23 | 24 | ## stream-video-android-ui-compose 25 | ### 🐞 Fixed 26 | 27 | ### ⬆️ Improved 28 | 29 | ### ✅ Added 30 | Ï 31 | ### ⚠️ Changed 32 | 33 | ### ❌ Removed 34 | 35 | ## stream-video-android-xml 36 | ### 🐞 Fixed 37 | 38 | ### ⬆️ Improved 39 | 40 | ### ✅ Added 41 | 42 | ### ⚠️ Changed 43 | 44 | ### ❌ Removed 45 | 46 | ## stream-video-android-pushprovider-firebase 47 | ### 🐞 Fixed 48 | 49 | ### ⬆️ Improved 50 | 51 | ### ✅ Added 52 | 53 | ### ⚠️ Changed 54 | 55 | ### ❌ Removed -------------------------------------------------------------------------------- /DEPRECATIONS.md: -------------------------------------------------------------------------------- 1 | # Deprecations 2 | 3 | This document lists deprecated constructs in the SDK, with their expected time ⌛ of further deprecations and removals. 4 | 5 | | API / Feature | Deprecated (warning) | Deprecated (error) | Removed | Notes | 6 | | --- | --- | --- | --- | --- | 7 | | --- | --- | --- | --- | --- | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source 'https://rubygems.org' 4 | 5 | git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } 6 | 7 | gem 'fastlane', '2.225.0' 8 | gem 'json' 9 | gem 'rubocop', '1.38', group: :rubocop_dependencies 10 | gem 'sinatra', group: :sinatra_dependencies 11 | 12 | eval_gemfile('fastlane/Pluginfile') 13 | 14 | group :rubocop_dependencies do 15 | gem 'rubocop-performance' 16 | gem 'rubocop-require_tools' 17 | end 18 | 19 | group :sinatra_dependencies do 20 | gem 'puma' 21 | gem 'rackup' 22 | end 23 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting a Vulnerability 2 | At Stream we are committed to the security of our Software. We appreciate your efforts in disclosing vulnerabilities responsibly and we will make every effort to acknowledge your contributions. 3 | 4 | Report security vulnerabilities at the following email address: 5 | ``` 6 | [security@getstream.io](mailto:security@getstream.io) 7 | ``` 8 | Alternatively it is also possible to open a new issue in the affected repository, tagging it with the `security` tag. 9 | 10 | A team member will acknowledge the vulnerability and will follow-up with more detailed information. A representative of the security team will be in touch if more information is needed. 11 | 12 | # Information to include in a report 13 | While we appreciate any information that you are willing to provide, please make sure to include the following: 14 | * Which repository is affected 15 | * Which branch, if relevant 16 | * Be as descriptive as possible, the team will replicate the vulnerability before working on a fix. 17 | -------------------------------------------------------------------------------- /benchmark/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /benchmark/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt: -------------------------------------------------------------------------------- 1 | import com.android.build.api.dsl.ApplicationExtension 2 | import com.android.build.gradle.internal.dsl.BaseAppModuleExtension 3 | import io.getstream.video.configureFlavors 4 | import io.getstream.video.configureKotlinAndroid 5 | import org.gradle.api.Plugin 6 | import org.gradle.api.Project 7 | import org.gradle.kotlin.dsl.configure 8 | 9 | class AndroidApplicationConventionPlugin : Plugin { 10 | override fun apply(target: Project) { 11 | with(target) { 12 | with(pluginManager) { 13 | apply("com.android.application") 14 | apply("org.jetbrains.kotlin.android") 15 | } 16 | 17 | extensions.configure { 18 | configureKotlinAndroid(this) 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build-logic/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534 2 | org.gradle.parallel=true 3 | org.gradle.caching=true 4 | org.gradle.configureondemand=true 5 | -------------------------------------------------------------------------------- /build-logic/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") 2 | 3 | dependencyResolutionManagement { 4 | repositories { 5 | google() 6 | mavenCentral() 7 | } 8 | versionCatalogs { 9 | create("libs") { 10 | from(files("../gradle/libs.versions.toml")) 11 | } 12 | } 13 | } 14 | 15 | include(":convention") 16 | -------------------------------------------------------------------------------- /buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | gradlePlugin { 6 | plugins { 7 | create("GenerateRPCServicePlugin") { 8 | id = "io.getstream.video.generateServices" 9 | implementationClass = "io.getstream.video.android.commands.rpc.plugin.GenerateRPCServicePlugin" 10 | version = "1.0.0" 11 | } 12 | } 13 | } 14 | 15 | repositories { 16 | mavenCentral() 17 | } -------------------------------------------------------------------------------- /buildSrc/src/main/kotlin/io/getstream/video/android/Configuration.kt: -------------------------------------------------------------------------------- 1 | package io.getstream.video.android 2 | 3 | object Configuration { 4 | const val compileSdk = 35 5 | const val targetSdk = 35 6 | const val minSdk = 24 7 | const val majorVersion = 1 8 | const val minorVersion = 6 9 | const val patchVersion = 3 10 | const val versionName = "$majorVersion.$minorVersion.$patchVersion" 11 | const val versionCode = 57 12 | const val snapshotVersionName = "$majorVersion.$minorVersion.${patchVersion + 1}-SNAPSHOT" 13 | const val artifactGroup = "io.getstream" 14 | const val streamVideoCallGooglePlayVersion = versionName 15 | const val streamWebRtcVersionName = "1.3.6" 16 | } 17 | -------------------------------------------------------------------------------- /buildSrc/src/main/kotlin/io/getstream/video/android/commands/rpc/plugin/GenerateRPCServiceExtension.kt: -------------------------------------------------------------------------------- 1 | package io.getstream.video.android.commands.rpc.plugin 2 | 3 | /** 4 | * Extension that is used inside build.gradle to setup the plugin. 5 | */ 6 | open class GenerateRPCServiceExtension { 7 | /** 8 | * Source directory from which to extract proto files. 9 | */ 10 | var srcDir = "stream-video-android-core/src/main/proto" 11 | 12 | /** 13 | * Output folder for the files. If the output folder is in build don't forget to add it to sources in the modules 14 | * build.gradle. 15 | */ 16 | var outputDir = "" 17 | } -------------------------------------------------------------------------------- /buildSrc/src/main/kotlin/io/getstream/video/android/commands/utils/Tasks.kt: -------------------------------------------------------------------------------- 1 | package io.getstream.video.android.commands.utils 2 | 3 | import org.gradle.api.Action 4 | import org.gradle.api.Task 5 | import org.gradle.api.tasks.TaskContainer 6 | import org.gradle.api.tasks.TaskProvider 7 | 8 | inline fun TaskContainer.registerExt( 9 | name: String, 10 | configuration: Action, 11 | ): TaskProvider = this.register(name, T::class.java, configuration) 12 | 13 | -------------------------------------------------------------------------------- /compose_compiler_config.conf: -------------------------------------------------------------------------------- 1 | // Kotlin collections and datetime classes 2 | kotlin.collections.* 3 | org.threeten.bp.* 4 | java.time.* 5 | 6 | // We always use immutable classes for our data model, to avoid running the Compose compiler 7 | // in the module we declare it to be stable here. 8 | io.getstream.video.android.core.model.* -------------------------------------------------------------------------------- /demo-app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | !/libs/** -------------------------------------------------------------------------------- /demo-app/benchmark-rules.pro: -------------------------------------------------------------------------------- 1 | -dontobfuscate 2 | -dontwarn com.google.errorprone.annotations.InlineMe 3 | -------------------------------------------------------------------------------- /demo-app/libs/renderscript-toolkit.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/libs/renderscript-toolkit.aar -------------------------------------------------------------------------------- /demo-app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /demo-app/src/androidTestE2etestingDebug/kotlin/io/getstream/video/android/pages/DirectCallPage.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.pages 18 | 19 | import androidx.test.uiautomator.By 20 | 21 | class DirectCallPage { 22 | 23 | companion object { 24 | val sampleUser = By.text("Willard Hesser") 25 | val audioCallButton = By.res("Stream_AudioCallButton") 26 | val videoCallButton = By.res("Stream_VideoCallButton") 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /demo-app/src/androidTestE2etestingDebug/resources/allure.properties: -------------------------------------------------------------------------------- 1 | allure.results.useTestStorage=true 2 | -------------------------------------------------------------------------------- /demo-app/src/development/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/development/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/development/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/development/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/development/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/development/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/development/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/development/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/development/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | Stream Video Calls (Development) 19 | getstream.io 20 | /video/demos 21 | -------------------------------------------------------------------------------- /demo-app/src/e2etesting/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/e2etesting/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/e2etesting/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/e2etesting/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/e2etesting/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/e2etesting/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/e2etesting/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/e2etesting/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/e2etesting/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/e2etesting/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/e2etesting/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | Stream Video Calls (E2E Testing) 19 | getstream.io 20 | /video/demos 21 | -------------------------------------------------------------------------------- /demo-app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /demo-app/src/main/kotlin/io/getstream/video/android/analytics/FirebaseEvents.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.analytics 18 | 19 | object FirebaseEvents { 20 | const val INSTALL_FROM_QR_CODE = "install_from_qr_code" 21 | const val SCAN_QR_CODE = "scan_qr_code" 22 | } 23 | -------------------------------------------------------------------------------- /demo-app/src/main/kotlin/io/getstream/video/android/data/services/stream/GetAuthDataResponse.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.data.services.stream 18 | 19 | import kotlinx.serialization.Serializable 20 | 21 | @Serializable data class GetAuthDataResponse(val userId: String, val apiKey: String, val token: String) 22 | -------------------------------------------------------------------------------- /demo-app/src/main/kotlin/io/getstream/video/android/tooling/extensions/ContextExtensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.tooling.extensions 18 | 19 | import android.content.Context 20 | import android.widget.Toast 21 | import androidx.annotation.StringRes 22 | 23 | @JvmSynthetic 24 | internal fun Context.toast(@StringRes message: Int) { 25 | Toast.makeText(this, message, Toast.LENGTH_SHORT).show() 26 | } 27 | -------------------------------------------------------------------------------- /demo-app/src/main/kotlin/io/getstream/video/android/tooling/extensions/Utils.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.tooling.extensions 18 | 19 | import androidx.compose.runtime.Composable 20 | import androidx.compose.ui.platform.LocalDensity 21 | import androidx.compose.ui.unit.Dp 22 | 23 | @Composable 24 | fun Dp.toPx(): Float { 25 | val density = LocalDensity.current.density 26 | return this.value * density 27 | } 28 | -------------------------------------------------------------------------------- /demo-app/src/main/kotlin/io/getstream/video/android/tooling/util/StreamFlavors.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.tooling.util 18 | 19 | /** 20 | * Defined flavors. Used in code logic. 21 | */ 22 | internal object StreamFlavors { 23 | const val development = "development" 24 | const val production = "production" 25 | } 26 | 27 | public object StreamEnvironments { 28 | const val demo = "demo" 29 | const val pronto = "pronto" 30 | } 31 | -------------------------------------------------------------------------------- /demo-app/src/main/kotlin/io/getstream/video/android/ui/menu/AudioDeviceUiState.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.ui.menu 18 | 19 | import androidx.compose.ui.graphics.vector.ImageVector 20 | import io.getstream.video.android.core.audio.StreamAudioDevice 21 | 22 | data class AudioDeviceUiState( 23 | val streamAudioDevice: StreamAudioDevice, 24 | val text: String, 25 | val icon: ImageVector, // Assuming it's a drawable resource ID 26 | val highlight: Boolean, 27 | ) 28 | -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/amsterdam1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/amsterdam1.webp -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/amsterdam2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/amsterdam2.webp -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/boulder1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/boulder1.webp -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/boulder2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/boulder2.webp -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/feedback_artwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/feedback_artwork.png -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/gradient1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/gradient1.webp -------------------------------------------------------------------------------- /demo-app/src/main/res/drawable/stream_calls_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/drawable/stream_calls_logo.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /demo-app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | #FFBB86FC 19 | #FF6200EE 20 | #FF3700B3 21 | #FF03DAC5 22 | #FF018786 23 | #FF000000 24 | #FFFFFFFF 25 | -------------------------------------------------------------------------------- /demo-app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /demo-app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /demo-app/src/production/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | Stream Video Calls 19 | -------------------------------------------------------------------------------- /demo-app/src/staging/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | Stream Video Calls (Staging) 19 | -------------------------------------------------------------------------------- /fastlane/.env: -------------------------------------------------------------------------------- 1 | FASTLANE_SKIP_ACTION_SUMMARY=true 2 | FASTLANE_HIDE_PLUGINS_TABLE=true 3 | FASTLANE_SKIP_UPDATE_CHECK=true 4 | FASTLANE_HIDE_CHANGELOG=true 5 | -------------------------------------------------------------------------------- /fastlane/Pluginfile: -------------------------------------------------------------------------------- 1 | # Autogenerated by fastlane 2 | # 3 | # Ensure this file is checked in to source control! 4 | 5 | gem 'fastlane-plugin-stream_actions', '0.3.74' 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /metrics/size.json: -------------------------------------------------------------------------------- 1 | { 2 | "debug": { 3 | "stream-video-android-core": 13064, 4 | "stream-video-android-ui-xml": 7376, 5 | "stream-video-android-ui-compose": 9344 6 | }, 7 | "release": { 8 | "stream-video-android-core": 11592, 9 | "stream-video-android-ui-xml": 5812, 10 | "stream-video-android-ui-compose": 5980 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /metrics/stream-video-android-metrics/src/main/kotlin/io/getstream/video/android/metrics/MainActivity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.metrics 18 | 19 | import androidx.activity.ComponentActivity 20 | 21 | class MainActivity : ComponentActivity() 22 | -------------------------------------------------------------------------------- /repackage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Parse named parameters 4 | while [[ "$#" -gt 0 ]]; do 5 | case $1 in 6 | --repackaged_webrtc) repackaged_webrtc="$2"; shift ;; 7 | --webrtc_android) webrtc_android="$2"; shift ;; 8 | *) echo "Unknown parameter passed: $1"; exit 1 ;; 9 | esac 10 | shift 11 | done 12 | 13 | # Run the Python command with the parameters 14 | python3 scripts/repackage/repackage.py --repackaged_webrtc "$repackaged_webrtc" --webrtc_android "$webrtc_android" 15 | -------------------------------------------------------------------------------- /scripts/git-hooks/pre-push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Run spotlessCheck before committing 4 | ./gradlew spotlessCheck 5 | 6 | # Get the exit code of the previous command 7 | RESULTSPOTLESS=$? 8 | 9 | ./gradlew apiCheck 10 | 11 | # Get the exit code of the previous command 12 | RESULTAPI=$? 13 | 14 | # If spotlessCheck failed, prevent the commit 15 | if [ $RESULTSPOTLESS -ne 0 ]; then 16 | echo "SpotlessCheck failed. Please run :spotlessApply to fix the formatting issues before committing." 17 | exit 1 18 | fi 19 | 20 | # If apiCheck failed, prevent the commit 21 | if [ $RESULTAPI -ne 0 ]; then 22 | echo "ApiCheck failed. Please run :apiDump before committing" 23 | exit 1 24 | fi 25 | -------------------------------------------------------------------------------- /scripts/repackage/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/scripts/repackage/utils/__init__.py -------------------------------------------------------------------------------- /scripts/repackage/utils/gradle_publish.py: -------------------------------------------------------------------------------- 1 | def override_gradle_publish(file_path): 2 | content = """ 3 | apply plugin: 'maven-publish' 4 | 5 | group = PUBLISH_GROUP_ID 6 | version = PUBLISH_VERSION 7 | 8 | afterEvaluate { 9 | publishing { 10 | publications { 11 | release(MavenPublication) { 12 | groupId PUBLISH_GROUP_ID 13 | artifactId PUBLISH_ARTIFACT_ID 14 | version PUBLISH_VERSION 15 | if (project.plugins.findPlugin("com.android.library")) { 16 | from components.release 17 | } else { 18 | from components.java 19 | } 20 | } 21 | } 22 | } 23 | } 24 | """ 25 | with open(file_path, 'w') as file: 26 | file.write(content) 27 | -------------------------------------------------------------------------------- /scripts/repackage/utils/gradle_settings.py: -------------------------------------------------------------------------------- 1 | def modify_gradle_settings(): 2 | file_path = 'settings.gradle.kts' 3 | 4 | # Read the content of the file 5 | with open(file_path, 'r') as f: 6 | lines = f.readlines() 7 | 8 | # Add mavenLocal() at appropriate places 9 | for i, line in enumerate(lines): 10 | if line.strip() == "repositories {": 11 | space_count = len(line) - len(line.lstrip()) 12 | indent = ' ' * space_count * 2 13 | lines.insert(i + 1, f"{indent}mavenLocal()\n") 14 | 15 | # Remove the line include(":stream-webrtc-android") 16 | lines = [line for line in lines if 'include(":stream-webrtc-android")' not in line] 17 | 18 | # Write the modified content back to the original file 19 | with open(file_path, 'w') as f: 20 | f.writelines(lines) 21 | 22 | print(f"...{file_path} has been modified.") -------------------------------------------------------------------------------- /scripts/show-last-snapshot-update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Run the Gradle task to get the artifact list and process the output line by line 4 | ./gradlew -q printAllArtifacts | while IFS= read -r artifact; do 5 | # Extract groupId, artifactId, and snapshot version from the artifact string 6 | groupId=$(echo $artifact | cut -d: -f1) 7 | artifactId=$(echo $artifact | cut -d: -f2) 8 | snapshotVersion=$(echo $artifact | cut -d: -f3) 9 | 10 | # Format the URL for the maven-metadata.xml file in the Nexus repository 11 | url="https://oss.sonatype.org/content/repositories/snapshots/$(echo $groupId | tr '.' '/')/$artifactId/$snapshotVersion/maven-metadata.xml" 12 | 13 | # Fetch the maven-metadata.xml using curl and extract the latest release version using sed 14 | latest_version=$(curl -s "$url" | sed -n 's|.*\(.*\).*|\1|p' | head -n 1) 15 | 16 | # Print the result with the latest stable version 17 | if [ -n "$latest_version" ]; then 18 | echo "$groupId:$artifactId:$latest_version" 19 | else 20 | echo "No version found for $artifact" 21 | fi 22 | done 23 | -------------------------------------------------------------------------------- /spotless/copyright.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /spotless/copyright.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /spotless/copyright.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /stream-video-android-bom/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import io.getstream.video.android.Configuration 2 | 3 | plugins { 4 | kotlin("jvm") 5 | } 6 | 7 | rootProject.extra.apply { 8 | set("PUBLISH_GROUP_ID", Configuration.artifactGroup) 9 | set("PUBLISH_ARTIFACT_ID", "stream-video-android-bom") 10 | set("PUBLISH_VERSION", rootProject.extra.get("rootVersionName")) 11 | } 12 | 13 | dependencies { 14 | constraints { 15 | api(project(":stream-video-android-core")) 16 | api(project(":stream-video-android-ui-core")) 17 | api(project(":stream-video-android-ui-xml")) 18 | api(project(":stream-video-android-ui-compose")) 19 | api(project(":stream-video-android-filters-video")) 20 | api(project(":stream-video-android-previewdata")) 21 | } 22 | } 23 | 24 | apply(from ="${rootDir}/scripts/publish-module.gradle") -------------------------------------------------------------------------------- /stream-video-android-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /stream-video-android-core/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /stream-video-android-core/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/infrastructure/ByteArrayAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.android.video.generated.infrastructure 18 | 19 | import com.squareup.moshi.FromJson 20 | import com.squareup.moshi.ToJson 21 | 22 | class ByteArrayAdapter { 23 | @ToJson 24 | fun toJson(data: ByteArray): String = String(data) 25 | 26 | @FromJson 27 | fun fromJson(data: String): ByteArray = data.toByteArray() 28 | } 29 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/infrastructure/URIAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.android.video.generated.infrastructure 18 | 19 | import com.squareup.moshi.FromJson 20 | import com.squareup.moshi.ToJson 21 | import java.net.URI 22 | 23 | class URIAdapter { 24 | @ToJson 25 | fun toJson(uri: URI) = uri.toString() 26 | 27 | @FromJson 28 | fun fromJson(s: String): URI = URI.create(s) 29 | } 30 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallsPerDayReport.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @file:Suppress( 18 | "ArrayInDataClass", 19 | "EnumEntryName", 20 | "RemoveRedundantQualifierName", 21 | "UnusedImport", 22 | ) 23 | 24 | package io.getstream.android.video.generated.models 25 | 26 | import com.squareup.moshi.Json 27 | 28 | /** 29 | * 30 | */ 31 | 32 | data class CallsPerDayReport( 33 | @Json(name = "count") 34 | val count: kotlin.Int, 35 | ) 36 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/WSCallEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.android.video.generated.models 18 | 19 | sealed interface WSCallEvent { 20 | fun getCallCID(): String 21 | } 22 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/WSClientEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.android.video.generated.models 18 | 19 | sealed interface WSClientEvent 20 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/call/stats/model/RtcMediaSourceStats.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.call.stats.model 18 | 19 | sealed interface RtcMediaSourceStats : RtcStats { 20 | 21 | val kind: String? 22 | val trackIdentifier: String? 23 | 24 | companion object { 25 | const val KIND = "kind" 26 | const val TRACK_IDENTIFIER = "trackIdentifier" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/call/stats/model/RtcMediaStreamTrackSenderStats.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.call.stats.model 18 | 19 | // https://www.w3.org/TR/2023/CRD-webrtc-stats-20230427/#dom-rtcmediastreamtrackstats 20 | @Deprecated("Was deprecated in 11 May 2023") 21 | sealed interface RtcMediaStreamTrackSenderStats : RtcMediaStreamTrackStats { 22 | val mediaSourceId: String? 23 | } 24 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/call/stats/model/RtcStats.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.call.stats.model 18 | 19 | sealed interface RtcStats { 20 | val id: String? 21 | val type: String? 22 | val timestampUs: Double? 23 | } 24 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/call/stats/model/RtcStatsReport.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.call.stats.model 18 | 19 | import io.getstream.video.android.core.call.stats.model.discriminator.RtcReportType 20 | import org.webrtc.RTCStatsReport 21 | 22 | data class RtcStatsReport( 23 | val origin: RTCStatsReport, 24 | val parsed: Map>, 25 | ) 26 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/events/VideoEventListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.events 18 | 19 | import io.getstream.android.video.generated.models.VideoEvent 20 | 21 | public fun interface VideoEventListener { 22 | public fun onEvent(event: EventT) 23 | } 24 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/logging/HttpLoggingLevel.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.logging 18 | 19 | import okhttp3.logging.HttpLoggingInterceptor 20 | 21 | public enum class HttpLoggingLevel( 22 | internal val level: HttpLoggingInterceptor.Level, 23 | ) { 24 | NONE(HttpLoggingInterceptor.Level.NONE), 25 | BASIC(HttpLoggingInterceptor.Level.BASIC), 26 | BODY(HttpLoggingInterceptor.Level.BODY), 27 | } 28 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/model/CallData.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.model 18 | 19 | import androidx.compose.runtime.Stable 20 | 21 | @Stable 22 | public data class CallData( 23 | public val blockedUsersIds: List, 24 | public val call: CallInfo, 25 | public val members: List, 26 | public val ownMembership: CallUser?, 27 | ) 28 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/model/Ingress.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.model 18 | 19 | import androidx.compose.runtime.Stable 20 | 21 | @Stable 22 | data class Ingress(var rtmp: RTMP) 23 | 24 | @Stable 25 | data class RTMP(var address: String, var streamKey: String) 26 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/model/PreferredVideoResolution.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.model 18 | 19 | data class PreferredVideoResolution( 20 | val width: Int, 21 | val height: Int, 22 | ) 23 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/model/QueriedMembers.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.model 18 | 19 | import androidx.compose.runtime.Stable 20 | 21 | @Stable 22 | public data class QueriedMembers( 23 | public val members: List, 24 | public val next: String?, 25 | public val prev: String?, 26 | ) 27 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/notifications/internal/storage/DevicePreferences.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.notifications.internal.storage 18 | 19 | import io.getstream.video.android.model.Device 20 | import kotlinx.serialization.Serializable 21 | 22 | @Serializable 23 | internal data class DevicePreferences( 24 | public val userDevice: Device? = null, 25 | ) 26 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/common/ErrorDetail.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.common 18 | 19 | public data class ErrorDetail( 20 | public val code: Int, 21 | public val messages: List, 22 | ) 23 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/common/SocketErrorMessage.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.common 18 | 19 | internal data class SocketErrorMessage(val error: ErrorResponse? = null) 20 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/common/VideoErrorDetail.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.common 18 | 19 | /** 20 | * The error detail. 21 | * 22 | * @property code The error code. 23 | * @property messages The error messages. 24 | */ 25 | public data class VideoErrorDetail( 26 | public val code: Int, 27 | public val messages: List, 28 | ) 29 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/common/fsm/builder/FSMBuilderMarker.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.common.fsm.builder 18 | 19 | @DslMarker 20 | public annotation class FSMBuilderMarker 21 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/common/scope/user/UserId.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.common.scope.user 18 | 19 | /** 20 | * Simply an alias for the user ID. 21 | */ 22 | public typealias UserId = String 23 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/common/token/ConstantTokenProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.common.token 18 | 19 | internal class ConstantTokenProvider(private val token: String) : TokenProvider { 20 | override suspend fun loadToken(): String = token 21 | } 22 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/coordinator/state/RestartReason.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.coordinator.state 18 | 19 | enum class RestartReason { 20 | LIFECYCLE_RESUME, 21 | NETWORK_AVAILABLE, 22 | } 23 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/coordinator/state/VideoSocketConnectionType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.coordinator.state 18 | 19 | enum class VideoSocketConnectionType { 20 | INITIAL_CONNECTION, 21 | AUTOMATIC_RECONNECTION, 22 | FORCE_RECONNECTION, 23 | } 24 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/sfu/state/RestartReason.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.socket.sfu.state 18 | 19 | enum class RestartReason { 20 | RECONNECT_STRATEGY, 21 | NETWORK_AVAILABLE, 22 | } 23 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/model/Credentials.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.model 18 | 19 | /** 20 | * The API key of your Stream Video app. 21 | */ 22 | public typealias ApiKey = String 23 | 24 | /** 25 | * User's ticket to join/initiate the call. 26 | */ 27 | public typealias UserToken = String 28 | 29 | /** 30 | * User's ticket to enter the call when joined/initiated. 31 | */ 32 | public typealias SfuToken = String 33 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/model/Device.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.model 18 | 19 | import androidx.compose.runtime.Stable 20 | 21 | @Stable 22 | @kotlinx.serialization.Serializable 23 | public data class Device( 24 | val id: String, 25 | val pushProvider: String, 26 | val pushProviderName: String, 27 | ) 28 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/model/UserAudioLevel.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.model 18 | 19 | import androidx.compose.runtime.Stable 20 | 21 | /** 22 | * Represents the audio level and if a user is speaking. 23 | */ 24 | @Stable 25 | public data class UserAudioLevel( 26 | val userId: String, 27 | val isSpeaking: Boolean, 28 | val audioLevel: Float, 29 | ) 30 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/kotlin/io/getstream/video/android/model/UserDevices.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.model 18 | 19 | import androidx.compose.runtime.Stable 20 | 21 | @Stable 22 | @kotlinx.serialization.Serializable 23 | public data class UserDevices( 24 | val devices: List = emptyList(), 25 | ) 26 | -------------------------------------------------------------------------------- /stream-video-android-core/src/main/res/raw/call_incoming_sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-core/src/main/res/raw/call_incoming_sound.mp3 -------------------------------------------------------------------------------- /stream-video-android-core/src/main/res/raw/call_outgoing_sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-core/src/main/res/raw/call_outgoing_sound.mp3 -------------------------------------------------------------------------------- /stream-video-android-core/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | stream_call_GetStreamClient 21 | Stream Call 22 | 23 | -------------------------------------------------------------------------------- /stream-video-android-core/src/test/kotlin/io/getstream/video/android/core/base/auth/GetAuthDataResponse.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.base.auth 18 | 19 | import kotlinx.serialization.Serializable 20 | 21 | @Serializable data class GetAuthDataResponse(val userId: String, val apiKey: String, val token: String) 22 | -------------------------------------------------------------------------------- /stream-video-android-core/src/test/kotlin/io/getstream/video/android/core/token/FakeTokenProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.core.token 18 | 19 | import io.getstream.video.android.core.socket.common.token.TokenProvider 20 | 21 | internal class FakeTokenProvider(vararg val tokens: String) : TokenProvider { 22 | 23 | var tokenId = 0 24 | 25 | override suspend fun loadToken(): String { 26 | return tokens[tokenId++] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /stream-video-android-filters-video/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | !/libs/** -------------------------------------------------------------------------------- /stream-video-android-filters-video/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-filters-video/consumer-rules.pro -------------------------------------------------------------------------------- /stream-video-android-filters-video/libs/renderscript-toolkit.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-filters-video/libs/renderscript-toolkit.aar -------------------------------------------------------------------------------- /stream-video-android-filters-video/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /stream-video-android-filters-video/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /stream-video-android-previewdata/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /stream-video-android-previewdata/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /stream-video-android-ui-compose/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | !/libs/** -------------------------------------------------------------------------------- /stream-video-android-ui-compose/datastore/proto_stream_video_user.pb: -------------------------------------------------------------------------------- 1 | 2 | M 3 | thierryadmin"Thierry*2https://avatars.githubusercontent.com/u/265409?v=4stream-api-key 4 | user-token -------------------------------------------------------------------------------- /stream-video-android-ui-compose/libs/renderscript-toolkit.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/libs/renderscript-toolkit.aar -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/main/res/drawable/example.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/main/res/drawable/example.webp -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioCallContent in default state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioCallContent in default state.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioCallContent without header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioCallContent without header.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioOnlyCallContent in default state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioOnlyCallContent in default state.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioOnlyCallContent without header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioCallContentTest_snapshot AudioOnlyCallContent without header.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioAppBar composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioAppBar composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioControlActions composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioControlActions composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioParticipantsGrid composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioParticipantsGrid composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioRoom DarkMode composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioRoom DarkMode composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioRoom composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AudioRoomTest_snapshot AudioRoom composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AvatarTest_snapshot AvatarInitial composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AvatarTest_snapshot AvatarInitial composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AvatarTest_snapshot UserAvatar composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_AvatarTest_snapshot UserAvatar composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallBackgroundTest_snapshot CallBackground composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallBackgroundTest_snapshot CallBackground composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsLandscapeTest_snapshot LandscapeCallControls composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsLandscapeTest_snapshot LandscapeCallControls composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot CallAppBar composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot CallAppBar composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot CallControls composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot CallControls composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot ParticipantIndicatorIcon composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot ParticipantIndicatorIcon composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot RegularCallControls composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallComponentsPortraitTest_snapshot RegularCallControls composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContainerLandscapeTest_snapshot CallContent with multiple participants composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContainerLandscapeTest_snapshot CallContent with multiple participants composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContainerPortraitTest_snapshot CallContent with multiple participants composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContainerPortraitTest_snapshot CallContent with multiple participants composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot CallContent with multiple participants composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot CallContent with multiple participants composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent Video type with multiple participants composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent Video type with multiple participants composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent with minimum parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent with minimum parameters.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent with one participant composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContent with one participant composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContentDetails Audio composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContentDetails Audio composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContentDetails Video composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallContentDetails Video composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallOptions composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot IncomingCallOptions composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with minimum parameters and audio type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with minimum parameters and audio type.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with minimum parameters and video type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with minimum parameters and video type.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with multiple participants composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with multiple participants composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with one participant composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallContent with one participant composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallDetails Audio composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallDetails Audio composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallDetails Video composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallDetails Video composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallOptions composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallContentTest_snapshot OutgoingCallOptions composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallControlsTest_snapshot CallControls Actions composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallControlsTest_snapshot CallControls Actions composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallControlsTest_snapshot CallControls composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallControlsTest_snapshot CallControls composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallLobbyTest_snapshot CallLobby composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_CallLobbyTest_snapshot CallLobby composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot ActiveSoundLevels composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot ActiveSoundLevels composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot Connection ConnectionQualityIndicator composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot Connection ConnectionQualityIndicator composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot Connection ParticipantLabel composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot Connection ParticipantLabel composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot SoundIndicator composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_IndicatorsTest_snapshot SoundIndicator composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_LivestreamTest_snapshot Livestream Player Overlay composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_LivestreamTest_snapshot Livestream Player Overlay composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_LivestreamTest_snapshot Livestream Player composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_LivestreamTest_snapshot Livestream Player composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants1 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants1 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants2 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants2 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants3 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants3 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants4 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants4 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants5 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants5 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants6 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeParticipants6 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeScreenSharingContent for myself composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeScreenSharingContent for myself composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeScreenSharingContent for other participant composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot LandscapeScreenSharingContent for other participant composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot ParticipantsRow composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantLandscapeTest_snapshot ParticipantsRow composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipant a local call composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipant a local call composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipant a remote call composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipant a remote call composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsInfoAppBar composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsInfoAppBar composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsInfoOptions composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsInfoOptions composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsList composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot CallParticipantsList composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot InviteUserList composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot InviteUserList composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot LocalVideoContent composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot LocalVideoContent composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantAvatars composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantAvatars composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantInformation composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantInformation composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantVideo composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantVideo composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantsColumn composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot ParticipantsColumn composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants1 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants1 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants2 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants2 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants3 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants3 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants4 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants4 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants5 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants5 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants6 composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitParticipants6 composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitScreenSharingContent for myself composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitScreenSharingContent for myself composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitScreenSharingContent for other participant composable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-compose/src/test/snapshots/images/io.getstream.video.android.compose_ParticipantsPortraitTest_snapshot PortraitScreenSharingContent for other participant composable.png -------------------------------------------------------------------------------- /stream-video-android-ui-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /stream-video-android-ui-core/src/main/baseline-prof.txt: -------------------------------------------------------------------------------- 1 | Lio/getstream/video/android/ui/common/R$array; 2 | Lio/getstream/video/android/ui/common/R$color; 3 | Lio/getstream/video/android/ui/common/R$dimen; 4 | Lio/getstream/video/android/ui/common/R$drawable; 5 | PLio/getstream/video/android/ui/common/renderer/StreamVideoTextureViewRenderer;->(Landroid/content/Context;)V 6 | PLio/getstream/video/android/ui/common/renderer/StreamVideoTextureViewRenderer;->getLogger()Lio/getstream/log/TaggedLogger; 7 | PLio/getstream/video/android/ui/common/renderer/StreamVideoTextureViewRenderer;->onDetachedFromWindow()V 8 | PLio/getstream/video/android/ui/common/renderer/StreamVideoTextureViewRenderer;->onLayout(ZIIII)V 9 | PLio/getstream/video/android/ui/common/renderer/StreamVideoTextureViewRenderer;->onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V 10 | PLio/getstream/video/android/ui/common/renderer/StreamVideoTextureViewRenderer;->onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z -------------------------------------------------------------------------------- /stream-video-android-ui-core/src/main/res/drawable/stream_video_call_sample.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-core/src/main/res/drawable/stream_video_call_sample.webp -------------------------------------------------------------------------------- /stream-video-android-ui-core/src/main/res/drawable/stream_video_ic_play.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/kotlin/io/getstream/video/android/xml/font/VideoStyle.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.xml.font 18 | 19 | public class VideoStyle { 20 | public var defaultTextStyle: TextStyle? = null 21 | public fun hasDefaultFont(): Boolean = defaultTextStyle?.hasFont() == true 22 | } 23 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/kotlin/io/getstream/video/android/xml/state/CallDeviceState.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.xml.state 18 | 19 | public data class CallDeviceState( 20 | val isMicrophoneEnabled: Boolean = false, 21 | val isSpeakerphoneEnabled: Boolean = false, 22 | val isCameraEnabled: Boolean = false, 23 | ) 24 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/kotlin/io/getstream/video/android/xml/utils/Disposable.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.xml.utils 18 | 19 | /** 20 | * Disposable resource. Implementations of this interface can be disposed once their work is done or the result is 21 | * no longer necessary 22 | */ 23 | public interface Disposable { 24 | 25 | public val isDisposed: Boolean 26 | 27 | /** 28 | * Disposes the resource 29 | */ 30 | public fun dispose() 31 | } 32 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/kotlin/io/getstream/video/android/xml/viewmodel/CallViewModelFactoryProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.xml.viewmodel 18 | 19 | public interface CallViewModelFactoryProvider { 20 | 21 | /** 22 | * Allows for a custom implementation of the [CallViewModelFactory]. 23 | */ 24 | public fun getCallViewModelFactory(): CallViewModelFactory 25 | } 26 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/kotlin/io/getstream/video/android/xml/widget/avatar/AvatarShape.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.xml.widget.avatar 18 | 19 | /** 20 | * Determines the shape of the avatar image in [AvatarView]. 21 | */ 22 | public enum class AvatarShape(public val value: Int) { 23 | /** 24 | * Circle cropped image. 25 | */ 26 | CIRCLE(0), 27 | 28 | /** 29 | * Round rect cropped image. 30 | */ 31 | ROUND_RECT(1), 32 | } 33 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/kotlin/io/getstream/video/android/xml/widget/participant/CallParticipantLabelAlignment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. 3 | * 4 | * Licensed under the Stream License; 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://github.com/GetStream/stream-video-android/blob/main/LICENSE 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.getstream.video.android.xml.widget.participant 18 | 19 | /** 20 | * Used to set he call participant label alignment. 21 | */ 22 | public enum class CallParticipantLabelAlignment { 23 | TOP_LEFT, 24 | TOP_RIGHT, 25 | BOTTOM_LEFT, 26 | BOTTOM_RIGHT, 27 | } 28 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_bg_active_call_participant.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 23 | 24 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_bg_call.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-xml/src/main/res/drawable/stream_video_bg_call.jpg -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_bg_call_option.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_bg_call_participant_name.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_rect_active_speaker.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_rect_controls.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/drawable/stream_video_rect_controls_landscape.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/layout/stream_video_item_participant.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/layout/stream_video_view_control_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 26 | 27 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/values/stream_video_attrs_call_container_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/values/stream_video_attrs_picture_in_picture_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/res/values/stream_video_colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | #000000 19 | #FFFFFF 20 | #444444 21 | -------------------------------------------------------------------------------- /stream-video-android-ui-xml/src/main/startup-prof.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/stream-video-android-ui-xml/src/main/startup-prof.txt -------------------------------------------------------------------------------- /tutorials/tutorial-audio/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /tutorials/tutorial-audio/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GetStream/stream-video-android/36b96d0a29970d340cce592dbcd62e32aa599805/tutorials/tutorial-audio/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | #FFBB86FC 19 | #FF6200EE 20 | #FF3700B3 21 | #FF03DAC5 22 | #FF018786 23 | #FF000000 24 | #FFFFFFFF 25 | -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | tutorial-audio 19 | -------------------------------------------------------------------------------- /tutorials/tutorial-audio/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 |