From e5f2a2afaced440f08eaf8b5d7a61a54ba03399e Mon Sep 17 00:00:00 2001 From: rahullohra Date: Tue, 18 Nov 2025 17:38:45 +0530 Subject: [PATCH 1/9] 1. Code gen files updated for individual ringing-call --- .../video/generated/apis/ProductvideoApi.kt | 30 +++++++ .../models/CallModerationBlurEvent.kt | 2 +- .../models/CallModerationWarningEvent.kt | 2 +- .../video/generated/models/CallRecording.kt | 3 + .../generated/models/CallStatsLocation.kt | 65 ++++++++++++++ .../models/CallStatsParticipantCounts.kt | 6 ++ .../models/CallStatsParticipantSession.kt | 32 ++++++- ...erences.kt => FeedsPreferencesResponse.kt} | 2 +- .../generated/models/MetricDescriptor.kt | 50 +++++++++++ .../video/generated/models/MetricThreshold.kt | 56 ++++++++++++ .../video/generated/models/OwnUserResponse.kt | 2 +- .../models/ParticipantSeriesPublisherStats.kt | 9 ++ .../ParticipantSeriesSubscriberStats.kt | 11 ++- .../models/ParticipantSeriesTrackMetrics.kt | 17 +++- .../models/ParticipantSeriesUserStats.kt | 11 ++- ...ferences.kt => PushPreferencesResponse.kt} | 4 +- .../models/ResolveSipInboundRequest.kt | 53 +++++++++++ .../models/ResolveSipInboundResponse.kt | 53 +++++++++++ .../video/generated/models/RingCallRequest.kt | 47 ++++++++++ .../generated/models/RingCallResponse.kt | 47 ++++++++++ .../models/SIPCallConfigsResponse.kt | 44 +++++++++ .../models/SIPCallerConfigsResponse.kt | 47 ++++++++++ .../video/generated/models/SIPChallenge.kt | 89 +++++++++++++++++++ ...SIPDirectRoutingRuleCallConfigsResponse.kt | 47 ++++++++++ ...SIPInboundRoutingRulePinConfigsResponse.kt | 56 ++++++++++++ .../models/SIPInboundRoutingRuleResponse.kt | 80 +++++++++++++++++ .../models/SIPPinProtectionConfigsResponse.kt | 53 +++++++++++ .../generated/models/SIPTrunkResponse.kt | 65 ++++++++++++++ .../generated/models/SipInboundCredentials.kt | 59 ++++++++++++ 29 files changed, 1032 insertions(+), 10 deletions(-) create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsLocation.kt rename stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/{FeedsPreferences.kt => FeedsPreferencesResponse.kt} (97%) create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricDescriptor.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricThreshold.kt rename stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/{PushPreferences.kt => PushPreferencesResponse.kt} (95%) create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundRequest.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallRequest.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallConfigsResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallerConfigsResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPChallenge.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPTrunkResponse.kt create mode 100644 stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SipInboundCredentials.kt diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/apis/ProductvideoApi.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/apis/ProductvideoApi.kt index 30e2264806..f4a83b7b6f 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/apis/ProductvideoApi.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/apis/ProductvideoApi.kt @@ -388,6 +388,27 @@ interface ProductvideoApi { @Body requestPermissionRequest: io.getstream.android.video.generated.models.RequestPermissionRequest ): io.getstream.android.video.generated.models.RequestPermissionResponse + /** + * Ring Call Users + * Sends a ring notification to the provided users who are not already in the call. All users should be members of the call + */ + @POST("/video/call/{type}/{id}/ring") + suspend fun ringCall( + @Path("type") type: kotlin.String, + @Path("id") id: kotlin.String , + @Body ringCallRequest: io.getstream.android.video.generated.models.RingCallRequest + ): io.getstream.android.video.generated.models.RingCallResponse + + /** + * Ring Call Users + * Sends a ring notification to the provided users who are not already in the call. All users should be members of the call + */ + @POST("/video/call/{type}/{id}/ring") + suspend fun ringCall( + @Path("type") type: kotlin.String, + @Path("id") id: kotlin.String + ): io.getstream.android.video.generated.models.RingCallResponse + /** * Start RTMP broadcasts * Starts RTMP broadcasts for the provided RTMP destinations @@ -778,6 +799,15 @@ interface ProductvideoApi { suspend fun videoConnect( ) + /** + * Resolve SIP Inbound Routing + * Resolve SIP inbound routing based on trunk number, caller number, and challenge authentication + */ + @POST("/video/sip/resolve") + suspend fun resolveSipInbound( + @Body resolveSipInboundRequest: io.getstream.android.video.generated.models.ResolveSipInboundRequest + ): io.getstream.android.video.generated.models.ResolveSipInboundResponse + /** * Query Aggregate call Stats * diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationBlurEvent.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationBlurEvent.kt index dddde332b6..00fed1eb55 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationBlurEvent.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationBlurEvent.kt @@ -35,7 +35,7 @@ import com.squareup.moshi.JsonWriter import com.squareup.moshi.ToJson /** - * + * This event is sent when a moderation blur action is applied to a user's video stream */ data class CallModerationBlurEvent ( diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationWarningEvent.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationWarningEvent.kt index af51d10f73..744173a55d 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationWarningEvent.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallModerationWarningEvent.kt @@ -35,7 +35,7 @@ import com.squareup.moshi.JsonWriter import com.squareup.moshi.ToJson /** - * + * This event is sent when a moderation warning is issued to a user */ data class CallModerationWarningEvent ( diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallRecording.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallRecording.kt index e1b71e6491..8d7db91a45 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallRecording.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallRecording.kt @@ -45,6 +45,9 @@ data class CallRecording ( @Json(name = "filename") val filename: kotlin.String, + @Json(name = "recording_type") + val recordingType: kotlin.String, + @Json(name = "session_id") val sessionId: kotlin.String, diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsLocation.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsLocation.kt new file mode 100644 index 0000000000..0410956761 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsLocation.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * + */ + +data class CallStatsLocation ( + @Json(name = "accuracy_radius_meters") + val accuracyRadiusMeters: kotlin.Int? = null, + + @Json(name = "city") + val city: kotlin.String? = null, + + @Json(name = "continent") + val continent: kotlin.String? = null, + + @Json(name = "country") + val country: kotlin.String? = null, + + @Json(name = "country_iso_code") + val countryIsoCode: kotlin.String? = null, + + @Json(name = "latitude") + val latitude: kotlin.Float? = null, + + @Json(name = "longitude") + val longitude: kotlin.Float? = null, + + @Json(name = "subdivision") + val subdivision: kotlin.String? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantCounts.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantCounts.kt index f4b72a5795..b3f789d52a 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantCounts.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantCounts.kt @@ -45,6 +45,12 @@ data class CallStatsParticipantCounts ( @Json(name = "participants") val participants: kotlin.Int, + @Json(name = "peak_concurrent_sessions") + val peakConcurrentSessions: kotlin.Int, + + @Json(name = "peak_concurrent_users") + val peakConcurrentUsers: kotlin.Int, + @Json(name = "publishers") val publishers: kotlin.Int, diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantSession.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantSession.kt index 0511059ed3..c83da5d350 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantSession.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/CallStatsParticipantSession.kt @@ -48,18 +48,48 @@ data class CallStatsParticipantSession ( @Json(name = "published_tracks") val publishedTracks: io.getstream.android.video.generated.models.PublishedTrackFlags, + @Json(name = "browser") + val browser: kotlin.String? = null, + + @Json(name = "browser_version") + val browserVersion: kotlin.String? = null, + @Json(name = "cq_score") val cqScore: kotlin.Int? = null, + @Json(name = "current_ip") + val currentIp: kotlin.String? = null, + + @Json(name = "current_sfu") + val currentSfu: kotlin.String? = null, + + @Json(name = "distance_to_sfu_kilometers") + val distanceToSfuKilometers: kotlin.Float? = null, + @Json(name = "ended_at") val endedAt: org.threeten.bp.OffsetDateTime? = null, + @Json(name = "os") + val os: kotlin.String? = null, + @Json(name = "publisher_type") val publisherType: kotlin.String? = null, + @Json(name = "sdk") + val sdk: kotlin.String? = null, + + @Json(name = "sdk_version") + val sdkVersion: kotlin.String? = null, + @Json(name = "started_at") val startedAt: org.threeten.bp.OffsetDateTime? = null, @Json(name = "unified_session_id") - val unifiedSessionId: kotlin.String? = null + val unifiedSessionId: kotlin.String? = null, + + @Json(name = "webrtc_version") + val webrtcVersion: kotlin.String? = null, + + @Json(name = "location") + val location: io.getstream.android.video.generated.models.CallStatsLocation? = null ) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/FeedsPreferences.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/FeedsPreferencesResponse.kt similarity index 97% rename from stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/FeedsPreferences.kt rename to stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/FeedsPreferencesResponse.kt index 000422930b..8b6e2a88e1 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/FeedsPreferences.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/FeedsPreferencesResponse.kt @@ -38,7 +38,7 @@ import com.squareup.moshi.ToJson * */ -data class FeedsPreferences ( +data class FeedsPreferencesResponse ( @Json(name = "comment") val comment: kotlin.String? = null, diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricDescriptor.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricDescriptor.kt new file mode 100644 index 0000000000..ba114a81c0 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricDescriptor.kt @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * + */ + +data class MetricDescriptor ( + @Json(name = "label") + val label: kotlin.String, + + @Json(name = "description") + val description: kotlin.String? = null, + + @Json(name = "unit") + val unit: kotlin.String? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricThreshold.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricThreshold.kt new file mode 100644 index 0000000000..6a60cea77c --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/MetricThreshold.kt @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * + */ + +data class MetricThreshold ( + @Json(name = "level") + val level: kotlin.String, + + @Json(name = "operator") + val operator: kotlin.String, + + @Json(name = "value") + val value: kotlin.Float, + + @Json(name = "value_unit") + val valueUnit: kotlin.String? = null, + + @Json(name = "window_seconds") + val windowSeconds: kotlin.Int? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/OwnUserResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/OwnUserResponse.kt index 14d4e0f92a..ce67ae18eb 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/OwnUserResponse.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/OwnUserResponse.kt @@ -88,7 +88,7 @@ data class OwnUserResponse ( val blockedUserIds: kotlin.collections.List? = emptyList(), @Json(name = "push_preferences") - val pushPreferences: io.getstream.android.video.generated.models.PushPreferences? = null, + val pushPreferences: io.getstream.android.video.generated.models.PushPreferencesResponse? = null, @Json(name = "teams_role") val teamsRole: kotlin.collections.Map? = emptyMap() diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesPublisherStats.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesPublisherStats.kt index 697a2b43e1..0844b90167 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesPublisherStats.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesPublisherStats.kt @@ -39,9 +39,18 @@ import com.squareup.moshi.ToJson */ data class ParticipantSeriesPublisherStats ( + @Json(name = "global_metrics_order") + val globalMetricsOrder: kotlin.collections.List? = emptyList(), + @Json(name = "global") val global: kotlin.collections.Map>>? = emptyMap(), + @Json(name = "global_meta") + val globalMeta: kotlin.collections.Map? = emptyMap(), + + @Json(name = "global_thresholds") + val globalThresholds: kotlin.collections.Map>? = emptyMap(), + @Json(name = "tracks") val tracks: kotlin.collections.Map>? = emptyMap() ) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats.kt index 671d845e96..c825f6179a 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats.kt @@ -39,9 +39,18 @@ import com.squareup.moshi.ToJson */ data class ParticipantSeriesSubscriberStats ( + @Json(name = "global_metrics_order") + val globalMetricsOrder: kotlin.collections.List? = emptyList(), + @Json(name = "subscriptions") val subscriptions: kotlin.collections.List? = emptyList(), @Json(name = "global") - val global: kotlin.collections.Map>>? = emptyMap() + val global: kotlin.collections.Map>>? = emptyMap(), + + @Json(name = "global_meta") + val globalMeta: kotlin.collections.Map? = emptyMap(), + + @Json(name = "global_thresholds") + val globalThresholds: kotlin.collections.Map>? = emptyMap() ) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics.kt index 4270745694..c95063be5c 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics.kt @@ -42,12 +42,27 @@ data class ParticipantSeriesTrackMetrics ( @Json(name = "track_id") val trackId: kotlin.String, + @Json(name = "codec") + val codec: kotlin.String? = null, + @Json(name = "label") val label: kotlin.String? = null, + @Json(name = "rid") + val rid: kotlin.String? = null, + @Json(name = "track_type") val trackType: kotlin.String? = null, + @Json(name = "metrics_order") + val metricsOrder: kotlin.collections.List? = emptyList(), + @Json(name = "metrics") - val metrics: kotlin.collections.Map>>? = emptyMap() + val metrics: kotlin.collections.Map>>? = emptyMap(), + + @Json(name = "metrics_meta") + val metricsMeta: kotlin.collections.Map? = emptyMap(), + + @Json(name = "thresholds") + val thresholds: kotlin.collections.Map>? = emptyMap() ) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesUserStats.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesUserStats.kt index 0bac4fb1ef..1a276663ee 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesUserStats.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ParticipantSeriesUserStats.kt @@ -39,6 +39,15 @@ import com.squareup.moshi.ToJson */ data class ParticipantSeriesUserStats ( + @Json(name = "metrics_order") + val metricsOrder: kotlin.collections.List? = emptyList(), + @Json(name = "metrics") - val metrics: kotlin.collections.Map>>? = emptyMap() + val metrics: kotlin.collections.Map>>? = emptyMap(), + + @Json(name = "metrics_meta") + val metricsMeta: kotlin.collections.Map? = emptyMap(), + + @Json(name = "thresholds") + val thresholds: kotlin.collections.Map>? = emptyMap() ) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/PushPreferences.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/PushPreferencesResponse.kt similarity index 95% rename from stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/PushPreferences.kt rename to stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/PushPreferencesResponse.kt index e3a4a16193..24c7d8ddbf 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/PushPreferences.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/PushPreferencesResponse.kt @@ -38,7 +38,7 @@ import com.squareup.moshi.ToJson * */ -data class PushPreferences ( +data class PushPreferencesResponse ( @Json(name = "call_level") val callLevel: kotlin.String? = null, @@ -52,5 +52,5 @@ data class PushPreferences ( val feedsLevel: kotlin.String? = null, @Json(name = "feeds_preferences") - val feedsPreferences: io.getstream.android.video.generated.models.FeedsPreferences? = null + val feedsPreferences: io.getstream.android.video.generated.models.FeedsPreferencesResponse? = null ) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundRequest.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundRequest.kt new file mode 100644 index 0000000000..65f3020df1 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundRequest.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * Request to resolve SIP inbound routing using challenge authentication + */ + +data class ResolveSipInboundRequest ( + @Json(name = "sip_caller_number") + val sipCallerNumber: kotlin.String, + + @Json(name = "sip_trunk_number") + val sipTrunkNumber: kotlin.String, + + @Json(name = "challenge") + val challenge: io.getstream.android.video.generated.models.SIPChallenge, + + @Json(name = "sip_headers") + val sipHeaders: kotlin.collections.Map? = emptyMap() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundResponse.kt new file mode 100644 index 0000000000..940829c483 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/ResolveSipInboundResponse.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * Response containing resolved SIP inbound routing information + */ + +data class ResolveSipInboundResponse ( + @Json(name = "duration") + val duration: kotlin.String, + + @Json(name = "credentials") + val credentials: io.getstream.android.video.generated.models.SipInboundCredentials, + + @Json(name = "sip_routing_rule") + val sipRoutingRule: io.getstream.android.video.generated.models.SIPInboundRoutingRuleResponse? = null, + + @Json(name = "sip_trunk") + val sipTrunk: io.getstream.android.video.generated.models.SIPTrunkResponse? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallRequest.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallRequest.kt new file mode 100644 index 0000000000..826991c17d --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallRequest.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * + */ + +data class RingCallRequest ( + @Json(name = "video") + val video: kotlin.Boolean? = null, + + @Json(name = "members_ids") + val membersIds: kotlin.collections.List? = emptyList() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallResponse.kt new file mode 100644 index 0000000000..e3dc6b2715 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/RingCallResponse.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * + */ + +data class RingCallResponse ( + @Json(name = "duration") + val duration: kotlin.String, + + @Json(name = "members_ids") + val membersIds: kotlin.collections.List = emptyList() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallConfigsResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallConfigsResponse.kt new file mode 100644 index 0000000000..af714e0299 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallConfigsResponse.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * SIP call configuration response + */ + +data class SIPCallConfigsResponse ( + @Json(name = "custom_data") + val customData: kotlin.collections.Map = emptyMap() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallerConfigsResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallerConfigsResponse.kt new file mode 100644 index 0000000000..df822a7ccc --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPCallerConfigsResponse.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * SIP caller configuration response + */ + +data class SIPCallerConfigsResponse ( + @Json(name = "id") + val id: kotlin.String, + + @Json(name = "custom_data") + val customData: kotlin.collections.Map = emptyMap() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPChallenge.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPChallenge.kt new file mode 100644 index 0000000000..a5519d4c60 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPChallenge.kt @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * + */ + +data class SIPChallenge ( + @Json(name = "a1") + val a1: kotlin.String? = null, + + @Json(name = "algorithm") + val algorithm: kotlin.String? = null, + + @Json(name = "charset") + val charset: kotlin.String? = null, + + @Json(name = "cnonce") + val cnonce: kotlin.String? = null, + + @Json(name = "method") + val method: kotlin.String? = null, + + @Json(name = "nc") + val nc: kotlin.String? = null, + + @Json(name = "nonce") + val nonce: kotlin.String? = null, + + @Json(name = "opaque") + val opaque: kotlin.String? = null, + + @Json(name = "realm") + val realm: kotlin.String? = null, + + @Json(name = "response") + val response: kotlin.String? = null, + + @Json(name = "stale") + val stale: kotlin.Boolean? = null, + + @Json(name = "uri") + val uri: kotlin.String? = null, + + @Json(name = "userhash") + val userhash: kotlin.Boolean? = null, + + @Json(name = "username") + val username: kotlin.String? = null, + + @Json(name = "domain") + val domain: kotlin.collections.List? = emptyList(), + + @Json(name = "qop") + val qop: kotlin.collections.List? = emptyList() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse.kt new file mode 100644 index 0000000000..a8181850cd --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * Direct routing rule call configuration response + */ + +data class SIPDirectRoutingRuleCallConfigsResponse ( + @Json(name = "call_id") + val callId: kotlin.String, + + @Json(name = "call_type") + val callType: kotlin.String +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse.kt new file mode 100644 index 0000000000..54c16e629b --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse.kt @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * PIN routing rule call configuration response + */ + +data class SIPInboundRoutingRulePinConfigsResponse ( + @Json(name = "custom_webhook_url") + val customWebhookUrl: kotlin.String? = null, + + @Json(name = "pin_failed_attempt_prompt") + val pinFailedAttemptPrompt: kotlin.String? = null, + + @Json(name = "pin_hangup_prompt") + val pinHangupPrompt: kotlin.String? = null, + + @Json(name = "pin_prompt") + val pinPrompt: kotlin.String? = null, + + @Json(name = "pin_success_prompt") + val pinSuccessPrompt: kotlin.String? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse.kt new file mode 100644 index 0000000000..9fdd44be50 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse.kt @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * SIP Inbound Routing Rule response + */ + +data class SIPInboundRoutingRuleResponse ( + @Json(name = "created_at") + val createdAt: org.threeten.bp.OffsetDateTime, + + @Json(name = "duration") + val duration: kotlin.String, + + @Json(name = "id") + val id: kotlin.String, + + @Json(name = "name") + val name: kotlin.String, + + @Json(name = "updated_at") + val updatedAt: org.threeten.bp.OffsetDateTime, + + @Json(name = "called_numbers") + val calledNumbers: kotlin.collections.List = emptyList(), + + @Json(name = "trunk_ids") + val trunkIds: kotlin.collections.List = emptyList(), + + @Json(name = "caller_numbers") + val callerNumbers: kotlin.collections.List? = emptyList(), + + @Json(name = "call_configs") + val callConfigs: io.getstream.android.video.generated.models.SIPCallConfigsResponse? = null, + + @Json(name = "caller_configs") + val callerConfigs: io.getstream.android.video.generated.models.SIPCallerConfigsResponse? = null, + + @Json(name = "direct_routing_configs") + val directRoutingConfigs: io.getstream.android.video.generated.models.SIPDirectRoutingRuleCallConfigsResponse? = null, + + @Json(name = "pin_protection_configs") + val pinProtectionConfigs: io.getstream.android.video.generated.models.SIPPinProtectionConfigsResponse? = null, + + @Json(name = "pin_routing_configs") + val pinRoutingConfigs: io.getstream.android.video.generated.models.SIPInboundRoutingRulePinConfigsResponse? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse.kt new file mode 100644 index 0000000000..4baa3306c0 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * PIN protection configuration response + */ + +data class SIPPinProtectionConfigsResponse ( + @Json(name = "enabled") + val enabled: kotlin.Boolean, + + @Json(name = "default_pin") + val defaultPin: kotlin.String? = null, + + @Json(name = "max_attempts") + val maxAttempts: kotlin.Int? = null, + + @Json(name = "required_pin_digits") + val requiredPinDigits: kotlin.Int? = null +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPTrunkResponse.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPTrunkResponse.kt new file mode 100644 index 0000000000..2c0cc2fa24 --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SIPTrunkResponse.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * SIP trunk information + */ + +data class SIPTrunkResponse ( + @Json(name = "created_at") + val createdAt: org.threeten.bp.OffsetDateTime, + + @Json(name = "id") + val id: kotlin.String, + + @Json(name = "name") + val name: kotlin.String, + + @Json(name = "password") + val password: kotlin.String, + + @Json(name = "updated_at") + val updatedAt: org.threeten.bp.OffsetDateTime, + + @Json(name = "uri") + val uri: kotlin.String, + + @Json(name = "username") + val username: kotlin.String, + + @Json(name = "numbers") + val numbers: kotlin.collections.List = emptyList() +) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SipInboundCredentials.kt b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SipInboundCredentials.kt new file mode 100644 index 0000000000..11cda9c76a --- /dev/null +++ b/stream-video-android-core/src/main/kotlin/io/getstream/android/video/generated/models/SipInboundCredentials.kt @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014-2024 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-video-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress( + "ArrayInDataClass", + "EnumEntryName", + "RemoveRedundantQualifierName", + "UnusedImport" +) + +package io.getstream.android.video.generated.models + +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.* +import kotlin.io.* +import com.squareup.moshi.FromJson +import com.squareup.moshi.Json +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson + +/** + * Credentials for SIP inbound call authentication + */ + +data class SipInboundCredentials ( + @Json(name = "call_id") + val callId: kotlin.String, + + @Json(name = "call_type") + val callType: kotlin.String, + + @Json(name = "token") + val token: kotlin.String, + + @Json(name = "user_id") + val userId: kotlin.String, + + @Json(name = "call_custom_data") + val callCustomData: kotlin.collections.Map = emptyMap(), + + @Json(name = "user_custom_data") + val userCustomData: kotlin.collections.Map = emptyMap() +) From bdb60b416337c8d9db2bbf7fbdcaf1a590b384ab Mon Sep 17 00:00:00 2001 From: rahullohra Date: Tue, 18 Nov 2025 17:39:51 +0530 Subject: [PATCH 2/9] 1. update api files --- .../api/stream-video-android-core.api | 495 ++++++++++++++++-- 1 file changed, 443 insertions(+), 52 deletions(-) diff --git a/stream-video-android-core/api/stream-video-android-core.api b/stream-video-android-core/api/stream-video-android-core.api index 6fb319c751..a661227422 100644 --- a/stream-video-android-core/api/stream-video-android-core.api +++ b/stream-video-android-core/api/stream-video-android-core.api @@ -51,6 +51,9 @@ public abstract interface class io/getstream/android/video/generated/apis/Produc public abstract fun rejectCall (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/RejectCallRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun rejectCall (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun requestPermission (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/RequestPermissionRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun resolveSipInbound (Lio/getstream/android/video/generated/models/ResolveSipInboundRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun ringCall (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/RingCallRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun ringCall (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun sendCallEvent (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/SendCallEventRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun sendCallEvent (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun sendVideoReaction (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/SendReactionRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -1107,17 +1110,19 @@ public final class io/getstream/android/video/generated/models/CallReactionEvent } public final class io/getstream/android/video/generated/models/CallRecording { - public fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;)V + public fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;)V public final fun component1 ()Lorg/threeten/bp/OffsetDateTime; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Ljava/lang/String; - public final fun component4 ()Lorg/threeten/bp/OffsetDateTime; - public final fun component5 ()Ljava/lang/String; - public final fun copy (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;)Lio/getstream/android/video/generated/models/CallRecording; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallRecording;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallRecording; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component6 ()Ljava/lang/String; + public final fun copy (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;)Lio/getstream/android/video/generated/models/CallRecording; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallRecording;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallRecording; public fun equals (Ljava/lang/Object;)Z public final fun getEndTime ()Lorg/threeten/bp/OffsetDateTime; public final fun getFilename ()Ljava/lang/String; + public final fun getRecordingType ()Ljava/lang/String; public final fun getSessionId ()Ljava/lang/String; public final fun getStartTime ()Lorg/threeten/bp/OffsetDateTime; public final fun getUrl ()Ljava/lang/String; @@ -1653,6 +1658,33 @@ public final class io/getstream/android/video/generated/models/CallStateResponse public fun toString ()Ljava/lang/String; } +public final class io/getstream/android/video/generated/models/CallStatsLocation { + public fun ()V + public fun (Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Integer; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/Float; + public final fun component7 ()Ljava/lang/Float; + public final fun component8 ()Ljava/lang/String; + public final fun copy (Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/String;)Lio/getstream/android/video/generated/models/CallStatsLocation; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallStatsLocation;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallStatsLocation; + public fun equals (Ljava/lang/Object;)Z + public final fun getAccuracyRadiusMeters ()Ljava/lang/Integer; + public final fun getCity ()Ljava/lang/String; + public final fun getContinent ()Ljava/lang/String; + public final fun getCountry ()Ljava/lang/String; + public final fun getCountryIsoCode ()Ljava/lang/String; + public final fun getLatitude ()Ljava/lang/Float; + public final fun getLongitude ()Ljava/lang/Float; + public final fun getSubdivision ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class io/getstream/android/video/generated/models/CallStatsParticipant { public fun (Ljava/lang/String;Ljava/util/List;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/util/List;)V public synthetic fun (Ljava/lang/String;Ljava/util/List;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -1674,16 +1706,20 @@ public final class io/getstream/android/video/generated/models/CallStatsParticip } public final class io/getstream/android/video/generated/models/CallStatsParticipantCounts { - public fun (IIII)V + public fun (IIIIII)V public final fun component1 ()I public final fun component2 ()I public final fun component3 ()I public final fun component4 ()I - public final fun copy (IIII)Lio/getstream/android/video/generated/models/CallStatsParticipantCounts; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallStatsParticipantCounts;IIIIILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallStatsParticipantCounts; + public final fun component5 ()I + public final fun component6 ()I + public final fun copy (IIIIII)Lio/getstream/android/video/generated/models/CallStatsParticipantCounts; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallStatsParticipantCounts;IIIIIIILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallStatsParticipantCounts; public fun equals (Ljava/lang/Object;)Z public final fun getLiveSessions ()I public final fun getParticipants ()I + public final fun getPeakConcurrentSessions ()I + public final fun getPeakConcurrentUsers ()I public final fun getPublishers ()I public final fun getSessions ()I public fun hashCode ()I @@ -1691,26 +1727,46 @@ public final class io/getstream/android/video/generated/models/CallStatsParticip } public final class io/getstream/android/video/generated/models/CallStatsParticipantSession { - public fun (ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;)V - public synthetic fun (ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/CallStatsLocation;)V + public synthetic fun (ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/CallStatsLocation;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Z + public final fun component10 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component11 ()Ljava/lang/String; + public final fun component12 ()Ljava/lang/String; + public final fun component13 ()Ljava/lang/String; + public final fun component14 ()Ljava/lang/String; + public final fun component15 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component16 ()Ljava/lang/String; + public final fun component17 ()Ljava/lang/String; + public final fun component18 ()Lio/getstream/android/video/generated/models/CallStatsLocation; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Lio/getstream/android/video/generated/models/PublishedTrackFlags; - public final fun component4 ()Ljava/lang/Integer; - public final fun component5 ()Lorg/threeten/bp/OffsetDateTime; - public final fun component6 ()Ljava/lang/String; - public final fun component7 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/Integer; + public final fun component7 ()Ljava/lang/String; public final fun component8 ()Ljava/lang/String; - public final fun copy (ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;)Lio/getstream/android/video/generated/models/CallStatsParticipantSession; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallStatsParticipantSession;ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallStatsParticipantSession; + public final fun component9 ()Ljava/lang/Float; + public final fun copy (ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/CallStatsLocation;)Lio/getstream/android/video/generated/models/CallStatsParticipantSession; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/CallStatsParticipantSession;ZLjava/lang/String;Lio/getstream/android/video/generated/models/PublishedTrackFlags;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Float;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/CallStatsLocation;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/CallStatsParticipantSession; public fun equals (Ljava/lang/Object;)Z + public final fun getBrowser ()Ljava/lang/String; + public final fun getBrowserVersion ()Ljava/lang/String; public final fun getCqScore ()Ljava/lang/Integer; + public final fun getCurrentIp ()Ljava/lang/String; + public final fun getCurrentSfu ()Ljava/lang/String; + public final fun getDistanceToSfuKilometers ()Ljava/lang/Float; public final fun getEndedAt ()Lorg/threeten/bp/OffsetDateTime; + public final fun getLocation ()Lio/getstream/android/video/generated/models/CallStatsLocation; + public final fun getOs ()Ljava/lang/String; public final fun getPublishedTracks ()Lio/getstream/android/video/generated/models/PublishedTrackFlags; public final fun getPublisherType ()Ljava/lang/String; + public final fun getSdk ()Ljava/lang/String; + public final fun getSdkVersion ()Ljava/lang/String; public final fun getStartedAt ()Lorg/threeten/bp/OffsetDateTime; public final fun getUnifiedSessionId ()Ljava/lang/String; public final fun getUserSessionId ()Ljava/lang/String; + public final fun getWebrtcVersion ()Ljava/lang/String; public fun hashCode ()I public final fun isLive ()Z public fun toString ()Ljava/lang/String; @@ -2482,7 +2538,7 @@ public final class io/getstream/android/video/generated/models/EndCallResponse { public fun toString ()Ljava/lang/String; } -public final class io/getstream/android/video/generated/models/FeedsPreferences { +public final class io/getstream/android/video/generated/models/FeedsPreferencesResponse { public fun ()V public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -2492,8 +2548,8 @@ public final class io/getstream/android/video/generated/models/FeedsPreferences public final fun component4 ()Ljava/lang/String; public final fun component5 ()Ljava/lang/String; public final fun component6 ()Ljava/util/Map; - public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lio/getstream/android/video/generated/models/FeedsPreferences; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/FeedsPreferences;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/FeedsPreferences; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lio/getstream/android/video/generated/models/FeedsPreferencesResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/FeedsPreferencesResponse;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/FeedsPreferencesResponse; public fun equals (Ljava/lang/Object;)Z public final fun getComment ()Ljava/lang/String; public final fun getCommentReaction ()Ljava/lang/String; @@ -3571,6 +3627,42 @@ public final class io/getstream/android/video/generated/models/MessageStatsRespo public fun toString ()Ljava/lang/String; } +public final class io/getstream/android/video/generated/models/MetricDescriptor { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/android/video/generated/models/MetricDescriptor; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/MetricDescriptor;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/MetricDescriptor; + public fun equals (Ljava/lang/Object;)Z + public final fun getDescription ()Ljava/lang/String; + public final fun getLabel ()Ljava/lang/String; + public final fun getUnit ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/MetricThreshold { + public fun (Ljava/lang/String;Ljava/lang/String;FLjava/lang/String;Ljava/lang/Integer;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;FLjava/lang/String;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()F + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/Integer; + public final fun copy (Ljava/lang/String;Ljava/lang/String;FLjava/lang/String;Ljava/lang/Integer;)Lio/getstream/android/video/generated/models/MetricThreshold; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/MetricThreshold;Ljava/lang/String;Ljava/lang/String;FLjava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/MetricThreshold; + public fun equals (Ljava/lang/Object;)Z + public final fun getLevel ()Ljava/lang/String; + public final fun getOperator ()Ljava/lang/String; + public final fun getValue ()F + public final fun getValueUnit ()Ljava/lang/String; + public final fun getWindowSeconds ()Ljava/lang/Integer; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class io/getstream/android/video/generated/models/MuteUsersRequest { public fun ()V public fun (Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;)V @@ -3836,8 +3928,8 @@ public final class io/getstream/android/video/generated/models/OwnCapability$Upd } public final class io/getstream/android/video/generated/models/OwnUserResponse { - public fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferences;Ljava/util/Map;)V - public synthetic fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferences;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferencesResponse;Ljava/util/Map;)V + public synthetic fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferencesResponse;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lorg/threeten/bp/OffsetDateTime; public final fun component10 ()Lorg/threeten/bp/OffsetDateTime; public final fun component11 ()Lorg/threeten/bp/OffsetDateTime; @@ -3846,7 +3938,7 @@ public final class io/getstream/android/video/generated/models/OwnUserResponse { public final fun component14 ()Ljava/lang/String; public final fun component15 ()Lorg/threeten/bp/OffsetDateTime; public final fun component16 ()Ljava/util/List; - public final fun component17 ()Lio/getstream/android/video/generated/models/PushPreferences; + public final fun component17 ()Lio/getstream/android/video/generated/models/PushPreferencesResponse; public final fun component18 ()Ljava/util/Map; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Ljava/lang/String; @@ -3856,8 +3948,8 @@ public final class io/getstream/android/video/generated/models/OwnUserResponse { public final fun component7 ()Ljava/util/List; public final fun component8 ()Ljava/util/Map; public final fun component9 ()Ljava/lang/Integer; - public final fun copy (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferences;Ljava/util/Map;)Lio/getstream/android/video/generated/models/OwnUserResponse; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/OwnUserResponse;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferences;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/OwnUserResponse; + public final fun copy (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferencesResponse;Ljava/util/Map;)Lio/getstream/android/video/generated/models/OwnUserResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/OwnUserResponse;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/lang/Integer;Lorg/threeten/bp/OffsetDateTime;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Lio/getstream/android/video/generated/models/PushPreferencesResponse;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/OwnUserResponse; public fun equals (Ljava/lang/Object;)Z public final fun getAvgResponseTime ()Ljava/lang/Integer; public final fun getBlockedUserIds ()Ljava/util/List; @@ -3871,7 +3963,7 @@ public final class io/getstream/android/video/generated/models/OwnUserResponse { public final fun getLanguage ()Ljava/lang/String; public final fun getLastActive ()Lorg/threeten/bp/OffsetDateTime; public final fun getName ()Ljava/lang/String; - public final fun getPushPreferences ()Lio/getstream/android/video/generated/models/PushPreferences; + public final fun getPushPreferences ()Lio/getstream/android/video/generated/models/PushPreferencesResponse; public final fun getRevokeTokensIssuedBefore ()Lorg/threeten/bp/OffsetDateTime; public final fun getRole ()Ljava/lang/String; public final fun getTeams ()Ljava/util/List; @@ -3945,14 +4037,20 @@ public final class io/getstream/android/video/generated/models/ParticipantReport public final class io/getstream/android/video/generated/models/ParticipantSeriesPublisherStats { public fun ()V - public fun (Ljava/util/Map;Ljava/util/Map;)V - public synthetic fun (Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Ljava/util/Map; + public fun (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V + public synthetic fun (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; public final fun component2 ()Ljava/util/Map; - public final fun copy (Ljava/util/Map;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesPublisherStats; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesPublisherStats;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesPublisherStats; + public final fun component3 ()Ljava/util/Map; + public final fun component4 ()Ljava/util/Map; + public final fun component5 ()Ljava/util/Map; + public final fun copy (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesPublisherStats; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesPublisherStats;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesPublisherStats; public fun equals (Ljava/lang/Object;)Z public final fun getGlobal ()Ljava/util/Map; + public final fun getGlobalMeta ()Ljava/util/Map; + public final fun getGlobalMetricsOrder ()Ljava/util/List; + public final fun getGlobalThresholds ()Ljava/util/Map; public final fun getTracks ()Ljava/util/Map; public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -3960,14 +4058,20 @@ public final class io/getstream/android/video/generated/models/ParticipantSeries public final class io/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats { public fun ()V - public fun (Ljava/util/List;Ljava/util/Map;)V - public synthetic fun (Ljava/util/List;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V + public synthetic fun (Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/util/List; - public final fun component2 ()Ljava/util/Map; - public final fun copy (Ljava/util/List;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats;Ljava/util/List;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Ljava/util/Map; + public final fun component4 ()Ljava/util/Map; + public final fun component5 ()Ljava/util/Map; + public final fun copy (Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesSubscriberStats; public fun equals (Ljava/lang/Object;)Z public final fun getGlobal ()Ljava/util/Map; + public final fun getGlobalMeta ()Ljava/util/Map; + public final fun getGlobalMetricsOrder ()Ljava/util/List; + public final fun getGlobalThresholds ()Ljava/util/Map; public final fun getSubscriptions ()Ljava/util/List; public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -4009,17 +4113,27 @@ public final class io/getstream/android/video/generated/models/ParticipantSeries } public final class io/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Ljava/lang/String; - public final fun component4 ()Ljava/util/Map; - public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/util/List; + public final fun component7 ()Ljava/util/Map; + public final fun component8 ()Ljava/util/Map; + public final fun component9 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesTrackMetrics; public fun equals (Ljava/lang/Object;)Z + public final fun getCodec ()Ljava/lang/String; public final fun getLabel ()Ljava/lang/String; public final fun getMetrics ()Ljava/util/Map; + public final fun getMetricsMeta ()Ljava/util/Map; + public final fun getMetricsOrder ()Ljava/util/List; + public final fun getRid ()Ljava/lang/String; + public final fun getThresholds ()Ljava/util/Map; public final fun getTrackId ()Ljava/lang/String; public final fun getTrackType ()Ljava/lang/String; public fun hashCode ()I @@ -4028,13 +4142,19 @@ public final class io/getstream/android/video/generated/models/ParticipantSeries public final class io/getstream/android/video/generated/models/ParticipantSeriesUserStats { public fun ()V - public fun (Ljava/util/Map;)V - public synthetic fun (Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Ljava/util/Map; - public final fun copy (Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesUserStats; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesUserStats;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesUserStats; + public fun (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V + public synthetic fun (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ljava/util/Map; + public final fun component3 ()Ljava/util/Map; + public final fun component4 ()Ljava/util/Map; + public final fun copy (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ParticipantSeriesUserStats; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ParticipantSeriesUserStats;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ParticipantSeriesUserStats; public fun equals (Ljava/lang/Object;)Z public final fun getMetrics ()Ljava/util/Map; + public final fun getMetricsMeta ()Ljava/util/Map; + public final fun getMetricsOrder ()Ljava/util/List; + public final fun getThresholds ()Ljava/util/Map; public fun hashCode ()I public fun toString ()Ljava/lang/String; } @@ -4149,23 +4269,23 @@ public final class io/getstream/android/video/generated/models/PublisherStatsRes public fun toString ()Ljava/lang/String; } -public final class io/getstream/android/video/generated/models/PushPreferences { +public final class io/getstream/android/video/generated/models/PushPreferencesResponse { public fun ()V - public fun (Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferences;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferences;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferencesResponse;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferencesResponse;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Lorg/threeten/bp/OffsetDateTime; public final fun component4 ()Ljava/lang/String; - public final fun component5 ()Lio/getstream/android/video/generated/models/FeedsPreferences; - public final fun copy (Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferences;)Lio/getstream/android/video/generated/models/PushPreferences; - public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/PushPreferences;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferences;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/PushPreferences; + public final fun component5 ()Lio/getstream/android/video/generated/models/FeedsPreferencesResponse; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferencesResponse;)Lio/getstream/android/video/generated/models/PushPreferencesResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/PushPreferencesResponse;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Lio/getstream/android/video/generated/models/FeedsPreferencesResponse;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/PushPreferencesResponse; public fun equals (Ljava/lang/Object;)Z public final fun getCallLevel ()Ljava/lang/String; public final fun getChatLevel ()Ljava/lang/String; public final fun getDisabledUntil ()Lorg/threeten/bp/OffsetDateTime; public final fun getFeedsLevel ()Ljava/lang/String; - public final fun getFeedsPreferences ()Lio/getstream/android/video/generated/models/FeedsPreferences; + public final fun getFeedsPreferences ()Lio/getstream/android/video/generated/models/FeedsPreferencesResponse; public fun hashCode ()I public fun toString ()Ljava/lang/String; } @@ -4908,6 +5028,42 @@ public final class io/getstream/android/video/generated/models/RequestPermission public fun toString ()Ljava/lang/String; } +public final class io/getstream/android/video/generated/models/ResolveSipInboundRequest { + public fun (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/SIPChallenge;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/SIPChallenge;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Lio/getstream/android/video/generated/models/SIPChallenge; + public final fun component4 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/SIPChallenge;Ljava/util/Map;)Lio/getstream/android/video/generated/models/ResolveSipInboundRequest; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ResolveSipInboundRequest;Ljava/lang/String;Ljava/lang/String;Lio/getstream/android/video/generated/models/SIPChallenge;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ResolveSipInboundRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getChallenge ()Lio/getstream/android/video/generated/models/SIPChallenge; + public final fun getSipCallerNumber ()Ljava/lang/String; + public final fun getSipHeaders ()Ljava/util/Map; + public final fun getSipTrunkNumber ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/ResolveSipInboundResponse { + public fun (Ljava/lang/String;Lio/getstream/android/video/generated/models/SipInboundCredentials;Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse;Lio/getstream/android/video/generated/models/SIPTrunkResponse;)V + public synthetic fun (Ljava/lang/String;Lio/getstream/android/video/generated/models/SipInboundCredentials;Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse;Lio/getstream/android/video/generated/models/SIPTrunkResponse;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Lio/getstream/android/video/generated/models/SipInboundCredentials; + public final fun component3 ()Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse; + public final fun component4 ()Lio/getstream/android/video/generated/models/SIPTrunkResponse; + public final fun copy (Ljava/lang/String;Lio/getstream/android/video/generated/models/SipInboundCredentials;Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse;Lio/getstream/android/video/generated/models/SIPTrunkResponse;)Lio/getstream/android/video/generated/models/ResolveSipInboundResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/ResolveSipInboundResponse;Ljava/lang/String;Lio/getstream/android/video/generated/models/SipInboundCredentials;Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse;Lio/getstream/android/video/generated/models/SIPTrunkResponse;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/ResolveSipInboundResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCredentials ()Lio/getstream/android/video/generated/models/SipInboundCredentials; + public final fun getDuration ()Ljava/lang/String; + public final fun getSipRoutingRule ()Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse; + public final fun getSipTrunk ()Lio/getstream/android/video/generated/models/SIPTrunkResponse; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class io/getstream/android/video/generated/models/Response { public fun (Ljava/lang/String;)V public final fun component1 ()Ljava/lang/String; @@ -4919,6 +5075,35 @@ public final class io/getstream/android/video/generated/models/Response { public fun toString ()Ljava/lang/String; } +public final class io/getstream/android/video/generated/models/RingCallRequest { + public fun ()V + public fun (Ljava/lang/Boolean;Ljava/util/List;)V + public synthetic fun (Ljava/lang/Boolean;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/Boolean; + public final fun component2 ()Ljava/util/List; + public final fun copy (Ljava/lang/Boolean;Ljava/util/List;)Lio/getstream/android/video/generated/models/RingCallRequest; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/RingCallRequest;Ljava/lang/Boolean;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/RingCallRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getMembersIds ()Ljava/util/List; + public final fun getVideo ()Ljava/lang/Boolean; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/RingCallResponse { + public fun (Ljava/lang/String;Ljava/util/List;)V + public synthetic fun (Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/util/List; + public final fun copy (Ljava/lang/String;Ljava/util/List;)Lio/getstream/android/video/generated/models/RingCallResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/RingCallResponse;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/RingCallResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getDuration ()Ljava/lang/String; + public final fun getMembersIds ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class io/getstream/android/video/generated/models/RingSettingsRequest { public fun (IILjava/lang/Integer;)V public synthetic fun (IILjava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -4991,6 +5176,190 @@ public final class io/getstream/android/video/generated/models/SFUResponse { public fun toString ()Ljava/lang/String; } +public final class io/getstream/android/video/generated/models/SIPCallConfigsResponse { + public fun ()V + public fun (Ljava/util/Map;)V + public synthetic fun (Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/Map; + public final fun copy (Ljava/util/Map;)Lio/getstream/android/video/generated/models/SIPCallConfigsResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPCallConfigsResponse;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPCallConfigsResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCustomData ()Ljava/util/Map; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPCallerConfigsResponse { + public fun (Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/util/Map;)Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCustomData ()Ljava/util/Map; + public final fun getId ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPChallenge { + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/Boolean; + public final fun component12 ()Ljava/lang/String; + public final fun component13 ()Ljava/lang/Boolean; + public final fun component14 ()Ljava/lang/String; + public final fun component15 ()Ljava/util/List; + public final fun component16 ()Ljava/util/List; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Ljava/lang/String; + public final fun component8 ()Ljava/lang/String; + public final fun component9 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Lio/getstream/android/video/generated/models/SIPChallenge; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPChallenge;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPChallenge; + public fun equals (Ljava/lang/Object;)Z + public final fun getA1 ()Ljava/lang/String; + public final fun getAlgorithm ()Ljava/lang/String; + public final fun getCharset ()Ljava/lang/String; + public final fun getCnonce ()Ljava/lang/String; + public final fun getDomain ()Ljava/util/List; + public final fun getMethod ()Ljava/lang/String; + public final fun getNc ()Ljava/lang/String; + public final fun getNonce ()Ljava/lang/String; + public final fun getOpaque ()Ljava/lang/String; + public final fun getQop ()Ljava/util/List; + public final fun getRealm ()Ljava/lang/String; + public final fun getResponse ()Ljava/lang/String; + public final fun getStale ()Ljava/lang/Boolean; + public final fun getUri ()Ljava/lang/String; + public final fun getUserhash ()Ljava/lang/Boolean; + public final fun getUsername ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse { + public fun (Ljava/lang/String;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCallId ()Ljava/lang/String; + public final fun getCallType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse { + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCustomWebhookUrl ()Ljava/lang/String; + public final fun getPinFailedAttemptPrompt ()Ljava/lang/String; + public final fun getPinHangupPrompt ()Ljava/lang/String; + public final fun getPinPrompt ()Ljava/lang/String; + public final fun getPinSuccessPrompt ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse { + public fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lio/getstream/android/video/generated/models/SIPCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse;Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse;Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse;)V + public synthetic fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lio/getstream/android/video/generated/models/SIPCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse;Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse;Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component10 ()Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse; + public final fun component11 ()Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse; + public final fun component12 ()Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse; + public final fun component13 ()Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component6 ()Ljava/util/List; + public final fun component7 ()Ljava/util/List; + public final fun component8 ()Ljava/util/List; + public final fun component9 ()Lio/getstream/android/video/generated/models/SIPCallConfigsResponse; + public final fun copy (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lio/getstream/android/video/generated/models/SIPCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse;Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse;Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse;)Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lio/getstream/android/video/generated/models/SIPCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse;Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse;Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse;Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPInboundRoutingRuleResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCallConfigs ()Lio/getstream/android/video/generated/models/SIPCallConfigsResponse; + public final fun getCalledNumbers ()Ljava/util/List; + public final fun getCallerConfigs ()Lio/getstream/android/video/generated/models/SIPCallerConfigsResponse; + public final fun getCallerNumbers ()Ljava/util/List; + public final fun getCreatedAt ()Lorg/threeten/bp/OffsetDateTime; + public final fun getDirectRoutingConfigs ()Lio/getstream/android/video/generated/models/SIPDirectRoutingRuleCallConfigsResponse; + public final fun getDuration ()Ljava/lang/String; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public final fun getPinProtectionConfigs ()Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse; + public final fun getPinRoutingConfigs ()Lio/getstream/android/video/generated/models/SIPInboundRoutingRulePinConfigsResponse; + public final fun getTrunkIds ()Ljava/util/List; + public final fun getUpdatedAt ()Lorg/threeten/bp/OffsetDateTime; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse { + public fun (ZLjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V + public synthetic fun (ZLjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Z + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/Integer; + public final fun component4 ()Ljava/lang/Integer; + public final fun copy (ZLjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse;ZLjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPPinProtectionConfigsResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefaultPin ()Ljava/lang/String; + public final fun getEnabled ()Z + public final fun getMaxAttempts ()Ljava/lang/Integer; + public final fun getRequiredPinDigits ()Ljava/lang/Integer; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/getstream/android/video/generated/models/SIPTrunkResponse { + public fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V + public synthetic fun (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Lorg/threeten/bp/OffsetDateTime; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Ljava/lang/String; + public final fun component8 ()Ljava/util/List; + public final fun copy (Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Lio/getstream/android/video/generated/models/SIPTrunkResponse; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SIPTrunkResponse;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/threeten/bp/OffsetDateTime;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SIPTrunkResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getCreatedAt ()Lorg/threeten/bp/OffsetDateTime; + public final fun getId ()Ljava/lang/String; + public final fun getName ()Ljava/lang/String; + public final fun getNumbers ()Ljava/util/List; + public final fun getPassword ()Ljava/lang/String; + public final fun getUpdatedAt ()Lorg/threeten/bp/OffsetDateTime; + public final fun getUri ()Ljava/lang/String; + public final fun getUsername ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class io/getstream/android/video/generated/models/SRTIngress { public fun (Ljava/lang/String;)V public final fun component1 ()Ljava/lang/String; @@ -5110,6 +5479,28 @@ public final class io/getstream/android/video/generated/models/SessionSettingsRe public fun toString ()Ljava/lang/String; } +public final class io/getstream/android/video/generated/models/SipInboundCredentials { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/util/Map; + public final fun component6 ()Ljava/util/Map; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/android/video/generated/models/SipInboundCredentials; + public static synthetic fun copy$default (Lio/getstream/android/video/generated/models/SipInboundCredentials;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/android/video/generated/models/SipInboundCredentials; + public fun equals (Ljava/lang/Object;)Z + public final fun getCallCustomData ()Ljava/util/Map; + public final fun getCallId ()Ljava/lang/String; + public final fun getCallType ()Ljava/lang/String; + public final fun getToken ()Ljava/lang/String; + public final fun getUserCustomData ()Ljava/util/Map; + public final fun getUserId ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class io/getstream/android/video/generated/models/SortParamRequest { public fun ()V public fun (Ljava/lang/Integer;Ljava/lang/String;)V From 29ade28754378ab9fe4501cd1a8aa079e32e8208 Mon Sep 17 00:00:00 2001 From: rahullohra Date: Thu, 20 Nov 2025 15:25:01 +0530 Subject: [PATCH 3/9] 1.first commit --- demo-app/build.gradle.kts | 1 + .../getstream/video/android/CallActivity.kt | 233 +++++++++++++++++- .../android/ui/call/ParticipantsDialog.kt | 15 ++ .../api/stream-video-android-core.api | 3 + .../io/getstream/video/android/core/Call.kt | 24 ++ .../video/android/core/StreamVideoClient.kt | 8 + 6 files changed, 276 insertions(+), 8 deletions(-) diff --git a/demo-app/build.gradle.kts b/demo-app/build.gradle.kts index 21a9e23cef..928391c19f 100644 --- a/demo-app/build.gradle.kts +++ b/demo-app/build.gradle.kts @@ -259,6 +259,7 @@ dependencies { implementation(libs.accompanist.permission) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.coil.compose) + implementation(libs.androidx.compose.material3) // QR code implementation(libs.androidx.camera.core) diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt index 579945c38f..91edb1ea91 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt @@ -19,28 +19,69 @@ package io.getstream.video.android import android.content.Intent import android.os.Bundle import android.os.PersistableBundle +import android.util.Log +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Call +import androidx.compose.material.icons.filled.MoreHoriz +import androidx.compose.material.icons.filled.People +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle +import io.getstream.android.video.generated.models.RingCallRequest import io.getstream.chat.android.client.ChatClient import io.getstream.chat.android.models.Filters import io.getstream.chat.android.models.querysort.QuerySortByField import io.getstream.result.onSuccessSuspend +import io.getstream.video.android.compose.theme.VideoTheme import io.getstream.video.android.compose.ui.ComposeStreamCallActivity import io.getstream.video.android.compose.ui.StreamCallActivityComposeDelegate +import io.getstream.video.android.compose.ui.components.avatar.UserAvatar import io.getstream.video.android.compose.ui.components.call.activecall.AudioOnlyCallContent import io.getstream.video.android.core.Call import io.getstream.video.android.core.StreamVideo import io.getstream.video.android.datastore.delegate.StreamUserDataStore import io.getstream.video.android.ui.call.CallScreen +import io.getstream.video.android.ui.call.CallState +import io.getstream.video.android.ui.call.PeopleUiState import io.getstream.video.android.ui.common.StreamActivityUiDelegate import io.getstream.video.android.ui.common.StreamCallActivity import io.getstream.video.android.ui.common.StreamCallActivityConfiguration import io.getstream.video.android.ui.common.util.StreamCallActivityDelicateApi import io.getstream.video.android.util.FullScreenCircleProgressBar import io.getstream.video.android.util.StreamVideoInitHelper +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @OptIn(StreamCallActivityDelicateApi::class) @@ -118,14 +159,15 @@ class CallActivity : ComposeStreamCallActivity() { @Composable override fun StreamCallActivity.AudioCallContent(call: Call) { - val micEnabled by call.microphone.isEnabled.collectAsStateWithLifecycle() - - AudioOnlyCallContent( - call = call, - isMicrophoneEnabled = micEnabled, - onCallAction = { onCallAction(call, it) }, - onBackPressed = { onBackPressed(call) }, - ) + AudioRootContent(call) { + val micEnabled by call.microphone.isEnabled.collectAsStateWithLifecycle() + AudioOnlyCallContent( + call = call, + isMicrophoneEnabled = micEnabled, + onCallAction = { onCallAction(call, it) }, + onBackPressed = { onBackPressed(call) }, + ) + } } private fun StreamCallActivity.goBackToMainScreen() { @@ -139,3 +181,178 @@ class CallActivity : ComposeStreamCallActivity() { } } } + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AudioRootContent(call: Call, bodyContent: @Composable () -> Unit) { + Box { + bodyContent() + var showBottomPopUp by rememberSaveable { mutableStateOf(false) } + + Icon( + imageVector = Icons.Default.People, + tint = VideoTheme.colors.iconDefault, + contentDescription = null, + modifier = Modifier + .padding(16.dp) + .background( + color = VideoTheme.colors.baseSenary, // choose your color + shape = CircleShape, + ) + .padding(12.dp) + .align(Alignment.TopEnd) + .clickable { + showBottomPopUp = !showBottomPopUp + }, + ) + + if (showBottomPopUp) { + ModalBottomSheet(onDismissRequest = { + showBottomPopUp = !showBottomPopUp + }, containerColor = Color.Black) { + MemberListRowContent(call) + } + } + } +} + +@Composable +private fun MemberListRowContent(call: Call) { + val members by call.state.members.collectAsStateWithLifecycle() + val participants by call.state.participants.collectAsStateWithLifecycle() + val localCallingList = remember { mutableListOf() } + val memberIds = members.map { it.user.id + "_" + it.user.name } + .joinToString(",") + Log.d("Noob", "[MemberListRowContent] memberIds:$memberIds") + val peopleNotInCallList = arrayListOf() + peopleNotInCallList.addAll( + members.filter { it.user.id !== StreamVideo.instance().userId }.map { + PeopleUiState( + it.user.userNameOrId, + CallState.NOT_IN_CALL, + false, + false, + it.user.image ?: "", + it.user.id, + ) + }, + ) + + val peopleInCallList = arrayListOf() + participants.forEach { participant -> + val personInCall = peopleNotInCallList.filter { it.userId == participant.userId.value } + if (personInCall.isNotEmpty()) { + peopleNotInCallList.remove(personInCall.first()) + peopleInCallList.add(personInCall.first().copy(callState = CallState.IN_CALL)) + } + } + val peopleList = remember { mutableStateListOf() } + peopleList.addAll(peopleNotInCallList) + peopleList.addAll(peopleInCallList) + peopleList.removeIf { it.userId == StreamVideo.instance().userId } + + localCallingList.forEach { localCalling -> + peopleList.forEachIndexed { index, people -> + if (localCalling.userId == people.userId) { + peopleList[index] = people.copy(callState = CallState.CALLING) + } + } + } + + LazyColumn { + items(count = peopleList.size, key = { index -> peopleList[index].userId }) { index -> + val people = peopleList[index] + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = VideoTheme.dimens.spacingM), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + val userName = people.name + val userImage = people.image + + UserAvatar( + modifier = Modifier + .size(VideoTheme.dimens.genericXxl) + .testTag("Stream_ParticipantsListUserAvatar"), + userImage = userImage, + userName = userName, + isShowingOnlineIndicator = false, + ) + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + Text( + modifier = Modifier + .padding(start = 8.dp) + .testTag("Stream_ParticipantsListUserName"), + text = userName, + style = VideoTheme.typography.bodyM, + color = VideoTheme.colors.basePrimary, + fontSize = 16.sp, + maxLines = 1, + ) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + when (people.callState) { + CallState.NOT_IN_CALL -> { + val scope = rememberCoroutineScope() + Icon( + modifier = Modifier.clickable { + scope.launch { + call.ring( + RingCallRequest( + call.isVideoEnabled(), + listOf(people.userId), + ), + ) + localCallingList.add(people) + } + }, + tint = VideoTheme.colors.basePrimary, + imageVector = Icons.Default.Call, + contentDescription = null, + ) + } + CallState.CALLING -> { + Icon( + modifier = Modifier, + tint = VideoTheme.colors.basePrimary, + imageVector = Icons.Default.MoreHoriz, + contentDescription = null, + ) + } + CallState.IN_CALL -> {} + } + } + } + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + } + } +} + +@Preview +@Composable +fun DemoList1() { + VideoTheme { + Box { + Icon( + imageVector = Icons.Default.People, + tint = VideoTheme.colors.iconDefault, + contentDescription = null, + modifier = Modifier + .padding(12.dp) + .background( + color = VideoTheme.colors.baseSenary, // choose your color + shape = CircleShape, + ) + .padding(12.dp) + .align(Alignment.TopEnd), + ) + } + } +} diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt index d4cba8b28c..c69456b903 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt @@ -217,3 +217,18 @@ private fun ParticipantsDialogPreview() { ParticipantsListContent(call = previewCall, participants = previewParticipantsList) } } + +internal data class PeopleUiState( + val name: String, + val callState: CallState, + val videoEnabled: Boolean, + val audioEnabled: Boolean, + val image: String, + val userId: String, +) + +internal enum class CallState { + NOT_IN_CALL, + IN_CALL, + CALLING, +} diff --git a/stream-video-android-core/api/stream-video-android-core.api b/stream-video-android-core/api/stream-video-android-core.api index a661227422..4756f8e498 100644 --- a/stream-video-android-core/api/stream-video-android-core.api +++ b/stream-video-android-core/api/stream-video-android-core.api @@ -7604,6 +7604,8 @@ public final class io/getstream/video/android/core/Call { public final fun isVideoEnabled ()Z public final fun join (ZLio/getstream/video/android/core/CreateCallOptions;ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun join$default (Lio/getstream/video/android/core/Call;ZLio/getstream/video/android/core/CreateCallOptions;ZZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun joinAndRing (Ljava/lang/String;Ljava/util/List;Lio/getstream/video/android/core/CreateCallOptions;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun joinAndRing$default (Lio/getstream/video/android/core/Call;Ljava/lang/String;Ljava/util/List;Lio/getstream/video/android/core/CreateCallOptions;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun kickUser (Ljava/lang/String;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun kickUser$default (Lio/getstream/video/android/core/Call;Ljava/lang/String;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun leave ()V @@ -7628,6 +7630,7 @@ public final class io/getstream/video/android/core/Call { public final fun removeMembers (Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun requestPermissions ([Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun revokePermissions (Ljava/lang/String;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun ring (Lio/getstream/android/video/generated/models/RingCallRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun ring (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun sendCustomEvent (Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun sendReaction (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt index 7cb71bad3f..9f9a34c2bd 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt @@ -39,6 +39,8 @@ import io.getstream.android.video.generated.models.MuteUsersResponse import io.getstream.android.video.generated.models.OwnCapability import io.getstream.android.video.generated.models.PinResponse import io.getstream.android.video.generated.models.RejectCallResponse +import io.getstream.android.video.generated.models.RingCallRequest +import io.getstream.android.video.generated.models.RingCallResponse import io.getstream.android.video.generated.models.SendCallEventResponse import io.getstream.android.video.generated.models.SendReactionResponse import io.getstream.android.video.generated.models.StartTranscriptionResponse @@ -95,6 +97,7 @@ import io.getstream.webrtc.android.ui.VideoTextureViewRenderer import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -556,6 +559,21 @@ public class Call( return Failure(value = Error.GenericError(errorMessage)) } + suspend fun joinAndRing( + callId: String, + members: List, + createOptions: CreateCallOptions? = CreateCallOptions(members), + video: Boolean = isVideoEnabled(), + ): Result { + val joinResult = join(create = false, ring = false, createOptions = createOptions) + + return if (joinResult.isSuccess) { + ring(RingCallRequest(isVideoEnabled(), members)) + } else { + Result.Failure(Error.GenericError("Unable to join call_id: $callId")) + } + } + internal fun isPermanentError(error: Any): Boolean { if (error is Error.ThrowableError) { if (error.message.contains("Unable to resolve host")) { @@ -1434,6 +1452,7 @@ public class Call( supervisorJob.children.forEach { it.join() } supervisorJob.cancel() } + scope.cancel() } suspend fun ring(): Result { @@ -1441,6 +1460,11 @@ public class Call( return clientImpl.ring(type, id) } + suspend fun ring(ringCallRequest: RingCallRequest): Result { + logger.d { "[ring] #ringing ringCallRequest: $ringCallRequest" } + return clientImpl.ring(type, id, ringCallRequest) + } + suspend fun notify(): Result { logger.d { "[notify] #ringing; no args" } return clientImpl.notify(type, id) diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoClient.kt b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoClient.kt index 8413d696f9..eb536dde76 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoClient.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoClient.kt @@ -50,6 +50,8 @@ import io.getstream.android.video.generated.models.QueryCallsRequest import io.getstream.android.video.generated.models.RejectCallRequest import io.getstream.android.video.generated.models.RejectCallResponse import io.getstream.android.video.generated.models.RequestPermissionRequest +import io.getstream.android.video.generated.models.RingCallRequest +import io.getstream.android.video.generated.models.RingCallResponse import io.getstream.android.video.generated.models.SendCallEventRequest import io.getstream.android.video.generated.models.SendCallEventResponse import io.getstream.android.video.generated.models.SendReactionRequest @@ -1173,6 +1175,12 @@ internal class StreamVideoClient internal constructor( } } + internal suspend fun ring(type: String, id: String, ringCallRequest: RingCallRequest): Result { + return apiCall { + coordinatorConnectionModule.api.ringCall(type = type, id = id, ringCallRequest) + } + } + suspend fun startTranscription( type: String, id: String, From 5326ec883d1208a64d7adff03d383081179c8946 Mon Sep 17 00:00:00 2001 From: rahullohra Date: Thu, 20 Nov 2025 15:28:43 +0530 Subject: [PATCH 4/9] 1.second commit --- .../io/getstream/video/android/CallActivity.kt | 17 +++++++++++++++-- .../video/android/ui/call/ParticipantsDialog.kt | 15 --------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt index 91edb1ea91..aed4c43eb7 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt @@ -72,8 +72,6 @@ import io.getstream.video.android.core.Call import io.getstream.video.android.core.StreamVideo import io.getstream.video.android.datastore.delegate.StreamUserDataStore import io.getstream.video.android.ui.call.CallScreen -import io.getstream.video.android.ui.call.CallState -import io.getstream.video.android.ui.call.PeopleUiState import io.getstream.video.android.ui.common.StreamActivityUiDelegate import io.getstream.video.android.ui.common.StreamCallActivity import io.getstream.video.android.ui.common.StreamCallActivityConfiguration @@ -356,3 +354,18 @@ fun DemoList1() { } } } + +internal data class PeopleUiState( + val name: String, + val callState: CallState, + val videoEnabled: Boolean, + val audioEnabled: Boolean, + val image: String, + val userId: String, +) + +internal enum class CallState { + NOT_IN_CALL, + IN_CALL, + CALLING, +} diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt index c69456b903..d4cba8b28c 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt @@ -217,18 +217,3 @@ private fun ParticipantsDialogPreview() { ParticipantsListContent(call = previewCall, participants = previewParticipantsList) } } - -internal data class PeopleUiState( - val name: String, - val callState: CallState, - val videoEnabled: Boolean, - val audioEnabled: Boolean, - val image: String, - val userId: String, -) - -internal enum class CallState { - NOT_IN_CALL, - IN_CALL, - CALLING, -} From c6a55876967cb2d6e9e61a44a3ed8f53ac5d2003 Mon Sep 17 00:00:00 2001 From: rahullohra Date: Thu, 20 Nov 2025 16:00:38 +0530 Subject: [PATCH 5/9] 1.third commit --- .../getstream/video/android/CallActivity.kt | 52 ++-- .../video/android/ui/DogfoodingNavHost.kt | 2 +- .../android/ui/call/ParticipantsDialog.kt | 230 ++++++++++++++++++ .../ui/outgoing/DirectCallJoinScreen.kt | 24 +- .../android/ui/common/StreamCallActivity.kt | 26 +- 5 files changed, 283 insertions(+), 51 deletions(-) diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt index aed4c43eb7..4bced419e5 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt @@ -19,7 +19,6 @@ package io.getstream.video.android import android.content.Intent import android.os.Bundle import android.os.PersistableBundle -import android.util.Log import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -54,7 +53,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -157,7 +155,7 @@ class CallActivity : ComposeStreamCallActivity() { @Composable override fun StreamCallActivity.AudioCallContent(call: Call) { - AudioRootContent(call) { + RingingRootContent(call) { val micEnabled by call.microphone.isEnabled.collectAsStateWithLifecycle() AudioOnlyCallContent( call = call, @@ -182,7 +180,7 @@ class CallActivity : ComposeStreamCallActivity() { @OptIn(ExperimentalMaterial3Api::class) @Composable -fun AudioRootContent(call: Call, bodyContent: @Composable () -> Unit) { +fun RingingRootContent(call: Call, bodyContent: @Composable () -> Unit) { Box { bodyContent() var showBottomPopUp by rememberSaveable { mutableStateOf(false) } @@ -219,15 +217,13 @@ private fun MemberListRowContent(call: Call) { val members by call.state.members.collectAsStateWithLifecycle() val participants by call.state.participants.collectAsStateWithLifecycle() val localCallingList = remember { mutableListOf() } - val memberIds = members.map { it.user.id + "_" + it.user.name } - .joinToString(",") - Log.d("Noob", "[MemberListRowContent] memberIds:$memberIds") + val peopleNotInCallList = arrayListOf() peopleNotInCallList.addAll( members.filter { it.user.id !== StreamVideo.instance().userId }.map { PeopleUiState( it.user.userNameOrId, - CallState.NOT_IN_CALL, + PeopleUiCallState.NOT_IN_CALL, false, false, it.user.image ?: "", @@ -241,7 +237,9 @@ private fun MemberListRowContent(call: Call) { val personInCall = peopleNotInCallList.filter { it.userId == participant.userId.value } if (personInCall.isNotEmpty()) { peopleNotInCallList.remove(personInCall.first()) - peopleInCallList.add(personInCall.first().copy(callState = CallState.IN_CALL)) + peopleInCallList.add( + personInCall.first().copy(peopleUiCallState = PeopleUiCallState.IN_CALL), + ) } } val peopleList = remember { mutableStateListOf() } @@ -252,7 +250,7 @@ private fun MemberListRowContent(call: Call) { localCallingList.forEach { localCalling -> peopleList.forEachIndexed { index, people -> if (localCalling.userId == people.userId) { - peopleList[index] = people.copy(callState = CallState.CALLING) + peopleList[index] = people.copy(peopleUiCallState = PeopleUiCallState.CALLING) } } } @@ -296,8 +294,8 @@ private fun MemberListRowContent(call: Call) { verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, ) { - when (people.callState) { - CallState.NOT_IN_CALL -> { + when (people.peopleUiCallState) { + PeopleUiCallState.NOT_IN_CALL -> { val scope = rememberCoroutineScope() Icon( modifier = Modifier.clickable { @@ -316,7 +314,7 @@ private fun MemberListRowContent(call: Call) { contentDescription = null, ) } - CallState.CALLING -> { + PeopleUiCallState.CALLING -> { Icon( modifier = Modifier, tint = VideoTheme.colors.basePrimary, @@ -324,7 +322,7 @@ private fun MemberListRowContent(call: Call) { contentDescription = null, ) } - CallState.IN_CALL -> {} + PeopleUiCallState.IN_CALL -> {} } } } @@ -333,38 +331,16 @@ private fun MemberListRowContent(call: Call) { } } -@Preview -@Composable -fun DemoList1() { - VideoTheme { - Box { - Icon( - imageVector = Icons.Default.People, - tint = VideoTheme.colors.iconDefault, - contentDescription = null, - modifier = Modifier - .padding(12.dp) - .background( - color = VideoTheme.colors.baseSenary, // choose your color - shape = CircleShape, - ) - .padding(12.dp) - .align(Alignment.TopEnd), - ) - } - } -} - internal data class PeopleUiState( val name: String, - val callState: CallState, + val peopleUiCallState: PeopleUiCallState, val videoEnabled: Boolean, val audioEnabled: Boolean, val image: String, val userId: String, ) -internal enum class CallState { +internal enum class PeopleUiCallState { NOT_IN_CALL, IN_CALL, CALLING, diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt index b57f12de1a..54db4c204a 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt @@ -91,7 +91,7 @@ fun AppNavHost( composable(AppScreens.DirectCallJoin.route) { val context = LocalContext.current DirectCallJoinScreen( - navigateToDirectCall = { cid, members -> + navigateToDirectCall = { cid, members, joinAndRing -> context.startActivity( StreamCallActivity.callIntent( action = NotificationHandler.ACTION_OUTGOING_CALL, diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt index d4cba8b28c..c8c87b990c 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt @@ -19,6 +19,7 @@ package io.getstream.video.android.ui.call import android.content.ClipboardManager import android.content.Context import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -29,18 +30,23 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.Text import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Mic import androidx.compose.material.icons.filled.MicOff +import androidx.compose.material.icons.filled.MoreHoriz import androidx.compose.material.icons.filled.Videocam import androidx.compose.material.icons.filled.VideocamOff import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -53,6 +59,9 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle +import io.getstream.android.video.generated.models.RingCallRequest +import io.getstream.video.android.PeopleUiCallState +import io.getstream.video.android.PeopleUiState import io.getstream.video.android.compose.theme.VideoTheme import io.getstream.video.android.compose.ui.components.avatar.UserAvatar import io.getstream.video.android.core.Call @@ -61,6 +70,7 @@ import io.getstream.video.android.mock.StreamPreviewDataUtils import io.getstream.video.android.mock.previewCall import io.getstream.video.android.mock.previewParticipantsList import io.getstream.video.android.util.config.AppConfig +import kotlinx.coroutines.launch @Composable public fun ParticipantsDialog(call: Call, onDismiss: () -> Unit) { @@ -209,6 +219,226 @@ fun ParticipantsListContent( } } +@Composable +private fun LazyListScope.ParticipantListRowContent(participants: List) { + items(count = participants.size, key = { index -> participants[index].sessionId }) { + val participant = participants[it] + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = VideoTheme.dimens.spacingM), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + val userName by participant.userNameOrId.collectAsStateWithLifecycle() + val userImage by participant.image.collectAsStateWithLifecycle() + UserAvatar( + modifier = Modifier + .size(VideoTheme.dimens.genericXxl) + .testTag("Stream_ParticipantsListUserAvatar"), + userImage = userImage, + userName = userName, + isShowingOnlineIndicator = false, + ) + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + Text( + modifier = Modifier + .padding(start = 8.dp) + .testTag("Stream_ParticipantsListUserName"), + text = userName, + style = VideoTheme.typography.bodyM, + color = VideoTheme.colors.basePrimary, + fontSize = 16.sp, + maxLines = 1, + ) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + val audioEnabled by participant.audioEnabled.collectAsStateWithLifecycle() + val iconAudio = if (audioEnabled) { + Icons.Default.Mic + } else { + Icons.Default.MicOff + } + Spacer(modifier = Modifier.width(8.dp)) + Icon( + modifier = Modifier + .testTag("Stream_ParticipantsListUserMicrophone_Enabled_$audioEnabled"), + tint = VideoTheme.colors.basePrimary, + imageVector = iconAudio, + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + + val videoEnabled by participant.videoEnabled.collectAsStateWithLifecycle() + val iconVideo = if (videoEnabled) { + Icons.Default.Videocam + } else { + Icons.Default.VideocamOff + } + Icon( + modifier = Modifier + .testTag("Stream_ParticipantsListUserCamera_Enabled_$videoEnabled"), + tint = VideoTheme.colors.basePrimary, + imageVector = iconVideo, + contentDescription = null, + ) + } + } + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + } +} + +@Composable +private fun LazyListScope.MemberListRowContent(call: Call, participants: List) { + val members by call.state.members.collectAsStateWithLifecycle() + val localCallingList = remember { mutableListOf() } + + val peopleNotInCallList = arrayListOf() + peopleNotInCallList.addAll( + members.map { + PeopleUiState( + it.user.userNameOrId, + PeopleUiCallState.NOT_IN_CALL, + false, + false, + it.user.image ?: "", + it.user.userNameOrId, + ) + }, + ) + + val peopleInCallList = arrayListOf() + participants.forEach { participant -> + val personInCall = peopleNotInCallList.filter { it.userId == participant.userId.value } + if (personInCall.isNotEmpty()) { + peopleNotInCallList.remove(personInCall.first()) + peopleInCallList.add( + personInCall.first().copy(peopleUiCallState = PeopleUiCallState.IN_CALL), + ) + } + } + val peopleList = remember { mutableStateListOf() } + peopleList.addAll(peopleNotInCallList) + peopleList.addAll(peopleInCallList) + localCallingList.forEach { localCalling -> + peopleList.forEachIndexed { index, people -> + if (localCalling.userId == people.userId) { + peopleList[index] = people.copy(peopleUiCallState = PeopleUiCallState.CALLING) + } + } + } + + items(count = peopleList.size, key = { index -> peopleList[index].userId }) { index -> + val people = peopleList[index] + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = VideoTheme.dimens.spacingM), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + val userName = people.name + val userImage = people.image + + UserAvatar( + modifier = Modifier + .size(VideoTheme.dimens.genericXxl) + .testTag("Stream_ParticipantsListUserAvatar"), + userImage = userImage, + userName = userName, + isShowingOnlineIndicator = false, + ) + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + Text( + modifier = Modifier + .padding(start = 8.dp) + .testTag("Stream_ParticipantsListUserName"), + text = userName, + style = VideoTheme.typography.bodyM, + color = VideoTheme.colors.basePrimary, + fontSize = 16.sp, + maxLines = 1, + ) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + when (people.peopleUiCallState) { + PeopleUiCallState.NOT_IN_CALL -> { + val scope = rememberCoroutineScope() + Icon( + modifier = Modifier.clickable { + scope.launch { + call.ring( + RingCallRequest( + call.isVideoEnabled(), + listOf(people.userId), + ), + ) + localCallingList.add(people) + } + }, + tint = VideoTheme.colors.basePrimary, + imageVector = Icons.Default.Call, + contentDescription = null, + ) + } + PeopleUiCallState.CALLING -> { + Icon( + modifier = Modifier, + tint = VideoTheme.colors.basePrimary, + imageVector = Icons.Default.MoreHoriz, + contentDescription = null, + ) + } + PeopleUiCallState.IN_CALL -> { + val audioEnabled = people.audioEnabled + val iconAudio = if (audioEnabled) { + Icons.Default.Mic + } else { + Icons.Default.MicOff + } + Spacer(modifier = Modifier.width(8.dp)) + Icon( + modifier = Modifier + .testTag( + "Stream_ParticipantsListUserMicrophone_Enabled_$audioEnabled", + ), + tint = VideoTheme.colors.basePrimary, + imageVector = iconAudio, + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + + val videoEnabled = people.videoEnabled + val iconVideo = if (videoEnabled) { + Icons.Default.Videocam + } else { + Icons.Default.VideocamOff + } + Icon( + modifier = Modifier + .testTag("Stream_ParticipantsListUserCamera_Enabled_$videoEnabled"), + tint = VideoTheme.colors.basePrimary, + imageVector = iconVideo, + contentDescription = null, + ) + } + } + } + } + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + } +} + @Preview @Composable private fun ParticipantsDialogPreview() { diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt index f41b65fea9..2873518067 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material.Checkbox import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.RadioButton import androidx.compose.material.RadioButtonDefaults @@ -40,6 +41,9 @@ import androidx.compose.material.icons.filled.VideoCall import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -62,7 +66,7 @@ import java.util.UUID @Composable fun DirectCallJoinScreen( viewModel: DirectCallJoinViewModel = hiltViewModel(), - navigateToDirectCall: (cid: StreamCallId, memberList: String) -> Unit, + navigateToDirectCall: (cid: StreamCallId, memberList: String, joinAndRing: Boolean) -> Unit, ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -128,8 +132,10 @@ private fun Header(user: User?) { private fun Body( uiState: DirectCallUiState, toggleUserSelection: (Int) -> Unit, - onStartCallClick: (cid: StreamCallId, membersList: String) -> Unit, + onStartCallClick: (cid: StreamCallId, membersList: String, joinAndRing: Boolean) -> Unit, ) { + var callerJoinsFirst by rememberSaveable { mutableStateOf(false) } + Box( modifier = Modifier .fillMaxSize() @@ -145,7 +151,8 @@ private fun Body( } else { uiState.otherUsers?.let { users -> Column( - modifier = Modifier.align(Alignment.TopStart) + modifier = Modifier + .align(Alignment.TopStart) .padding(bottom = 80.dp), ) { UserList( @@ -153,7 +160,12 @@ private fun Body( onUserClick = { clickedIndex -> toggleUserSelection(clickedIndex) }, ) } - + Row { + Text("Join First") + Checkbox(callerJoinsFirst, onCheckedChange = { + callerJoinsFirst = !callerJoinsFirst + }) + } Row( Modifier .fillMaxWidth() @@ -178,6 +190,7 @@ private fun Body( users .filter { it.isSelected } .joinToString(separator = ",") { it.user.id ?: "" }, + callerJoinsFirst, ) }, ) @@ -198,6 +211,7 @@ private fun Body( users .filter { it.isSelected } .joinToString(separator = ",") { it.user.id ?: "" }, + callerJoinsFirst, ) }, ) @@ -294,7 +308,7 @@ private fun HeaderPreview() { }, ), toggleUserSelection = {}, - ) { _, _ -> + ) { _, _, _ -> } } } diff --git a/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt b/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt index 1f0e8a3e33..0a556f1d3f 100644 --- a/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt +++ b/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt @@ -84,6 +84,7 @@ public abstract class StreamCallActivity : ComponentActivity(), ActivityCallOper // Extra keys private const val EXTRA_LEAVE_WHEN_LAST: String = "leave_when_last" private const val EXTRA_MEMBERS_ARRAY: String = "members_extra" + private const val EXTRA_JOIN_AND_RING: String = "join_and_ring" // Extra default values private const val DEFAULT_LEAVE_WHEN_LAST: Boolean = false @@ -517,13 +518,24 @@ public abstract class StreamCallActivity : ComponentActivity(), ActivityCallOper logger.v { "[onIntentAction] #ringing; Action OUTGOING_CALL, ${call.cid}" } // Extract the members and the call ID and place the outgoing call val members = intent.getStringArrayListExtra(EXTRA_MEMBERS_ARRAY) ?: emptyList() - create( - call, - members = members, - ring = true, - onSuccess = onSuccess, - onError = onError, - ) + val joinAndRing = intent.getBooleanExtra(EXTRA_JOIN_AND_RING, false) + if (joinAndRing) { + create( + call, + members = members, + ring = false, + onSuccess = onSuccess, + onError = onError, + ) + } else { + create( + call, + members = members, + ring = true, + onSuccess = onSuccess, + onError = onError, + ) + } } else -> { From 231273405cfc32d86638fbf4059df955e3a62e0f Mon Sep 17 00:00:00 2001 From: rahullohra Date: Thu, 20 Nov 2025 16:05:28 +0530 Subject: [PATCH 6/9] 1.third commit --- .../android/ui/call/ParticipantsDialog.kt | 72 +------------------ 1 file changed, 1 insertion(+), 71 deletions(-) diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt index c8c87b990c..123bdfe61f 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt @@ -146,80 +146,10 @@ fun ParticipantsListContent( Spacer(modifier = Modifier.size(16.dp)) } - items(count = participants.size, key = { index -> participants[index].sessionId }) { - val participant = participants[it] - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = VideoTheme.dimens.spacingM), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Row(verticalAlignment = Alignment.CenterVertically) { - val userName by participant.userNameOrId.collectAsStateWithLifecycle() - val userImage by participant.image.collectAsStateWithLifecycle() - UserAvatar( - modifier = Modifier - .size(VideoTheme.dimens.genericXxl) - .testTag("Stream_ParticipantsListUserAvatar"), - userImage = userImage, - userName = userName, - isShowingOnlineIndicator = false, - ) - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - Text( - modifier = Modifier - .padding(start = 8.dp) - .testTag("Stream_ParticipantsListUserName"), - text = userName, - style = VideoTheme.typography.bodyM, - color = VideoTheme.colors.basePrimary, - fontSize = 16.sp, - maxLines = 1, - ) - } - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - val audioEnabled by participant.audioEnabled.collectAsStateWithLifecycle() - val iconAudio = if (audioEnabled) { - Icons.Default.Mic - } else { - Icons.Default.MicOff - } - Spacer(modifier = Modifier.width(8.dp)) - Icon( - modifier = Modifier - .testTag("Stream_ParticipantsListUserMicrophone_Enabled_$audioEnabled"), - tint = VideoTheme.colors.basePrimary, - imageVector = iconAudio, - contentDescription = null, - ) - Spacer(modifier = Modifier.width(8.dp)) - - val videoEnabled by participant.videoEnabled.collectAsStateWithLifecycle() - val iconVideo = if (videoEnabled) { - Icons.Default.Videocam - } else { - Icons.Default.VideocamOff - } - Icon( - modifier = Modifier - .testTag("Stream_ParticipantsListUserCamera_Enabled_$videoEnabled"), - tint = VideoTheme.colors.basePrimary, - imageVector = iconVideo, - contentDescription = null, - ) - } - } - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - } + ParticipantListRowContent(participants) } } -@Composable private fun LazyListScope.ParticipantListRowContent(participants: List) { items(count = participants.size, key = { index -> participants[index].sessionId }) { val participant = participants[it] From 9204cfa60c8ab25c8456ded3677a2513477348d6 Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 20 Nov 2025 13:15:47 +0100 Subject: [PATCH 7/9] Update ringing state for `joinAndRing` --- .../video/android/ui/DogfoodingNavHost.kt | 1 + .../ui/outgoing/DirectCallJoinScreen.kt | 19 ++++++++++----- .../io/getstream/video/android/core/Call.kt | 23 ++++++++++++------- .../getstream/video/android/core/CallState.kt | 18 ++++++++++++--- .../android/ui/common/StreamCallActivity.kt | 16 ++++++++++--- 5 files changed, 57 insertions(+), 20 deletions(-) diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt index 54db4c204a..6f340ec4c6 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/DogfoodingNavHost.kt @@ -101,6 +101,7 @@ fun AppNavHost( leaveWhenLastInCall = true, context = context, cid = cid, + joinAndRing = joinAndRing, members = members.split(","), clazz = CallActivity::class.java, ), diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt index 2873518067..dfe16f7658 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/outgoing/DirectCallJoinScreen.kt @@ -45,6 +45,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment +import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag @@ -155,17 +156,23 @@ private fun Body( .align(Alignment.TopStart) .padding(bottom = 80.dp), ) { + Row( + verticalAlignment = CenterVertically, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 10.dp), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text("Join First", color = Color.White) + Checkbox(callerJoinsFirst, onCheckedChange = { + callerJoinsFirst = !callerJoinsFirst + }) + } UserList( entries = users, onUserClick = { clickedIndex -> toggleUserSelection(clickedIndex) }, ) } - Row { - Text("Join First") - Checkbox(callerJoinsFirst, onCheckedChange = { - callerJoinsFirst = !callerJoinsFirst - }) - } Row( Modifier .fillMaxWidth() diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt index 9f9a34c2bd..b00de0108c 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt @@ -59,6 +59,7 @@ import io.getstream.result.Error import io.getstream.result.Result import io.getstream.result.Result.Failure import io.getstream.result.Result.Success +import io.getstream.result.flatMap import io.getstream.video.android.core.audio.StreamAudioDevice import io.getstream.video.android.core.call.RtcSession import io.getstream.video.android.core.call.audio.InputAudioFilter @@ -560,17 +561,23 @@ public class Call( } suspend fun joinAndRing( - callId: String, members: List, createOptions: CreateCallOptions? = CreateCallOptions(members), video: Boolean = isVideoEnabled(), - ): Result { - val joinResult = join(create = false, ring = false, createOptions = createOptions) - - return if (joinResult.isSuccess) { - ring(RingCallRequest(isVideoEnabled(), members)) - } else { - Result.Failure(Error.GenericError("Unable to join call_id: $callId")) + ): Result { + logger.d { "[joinAndRing] #ringing; #track; members: $members, video: $video" } + state.toggleRingingStateUpdates(true) + return join(ring = false, createOptions = createOptions).flatMap { rtcSession -> + logger.d { "[joinAndRing] Joined #ringing; #track; ring: $members" } + ring(RingCallRequest(isVideoEnabled(), members)).map { + logger.d { "[joinAndRing] Ringed #ringing; #track; ring: $members" } + clientImpl.state._ringingCall.value = this + rtcSession + }.onError { + logger.e { "[joinAndRing] Ring failed #ringing; #track; error: $it" } + state.toggleRingingStateUpdates(false) + leave() + } } } diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt index 478d1c136f..50dc97b312 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt @@ -941,7 +941,11 @@ public class CallState( is JoinCallResponseEvent -> { // time to update call state based on the join response updateFromJoinResponse(event) - updateRingingState() + if (!ringingStateUpdatesStopped) { + updateRingingState() + } else { + _ringingState.value = RingingState.Outgoing(acceptedByCallee = true) + } updateServerSidePins( event.callState.pins.map { PinUpdate(it.user_id, it.session_id) @@ -1163,7 +1167,7 @@ public class CallState( ) // no members - call is empty, we can join - val state: RingingState = if (hasActiveCall) { + val state: RingingState = if (hasActiveCall && !ringingStateUpdatesStopped) { cancelTimeout() RingingState.Active } else if ((rejectedBy.isNotEmpty() && rejectedBy.size >= outgoingMembersCount) || @@ -1188,6 +1192,7 @@ public class CallState( } } else if (hasRingingCall && createdBy?.id == client.userId) { // The call is created by us + logger.d { "acceptedBy: $acceptedBy, userIsParticipant: $userIsParticipant" } if (acceptedBy.isEmpty()) { // no one accepted the call RingingState.Outgoing(acceptedByCallee = false) @@ -1196,6 +1201,7 @@ public class CallState( RingingState.Outgoing(acceptedByCallee = true) } else { // call is accepted and we are already in the call + ringingStateUpdatesStopped = false cancelTimeout() RingingState.Active } @@ -1222,7 +1228,6 @@ public class CallState( // stop the call ringing timer if it's running } Log.d("RingingState", "Update: $state") - _ringingState.value = state } @@ -1277,6 +1282,7 @@ public class CallState( // double check that we are still in Outgoing call state and call is not active if (_ringingState.value is RingingState.Outgoing || _ringingState.value is RingingState.Incoming && client.state.activeCall.value == null) { + ringingStateUpdatesStopped = false call.reject(reason = RejectReason.Custom(alias = REJECT_REASON_TIMEOUT)) call.leave() } @@ -1525,6 +1531,12 @@ public class CallState( _broadcasting.value = true } + private var ringingStateUpdatesStopped = false + + internal fun toggleRingingStateUpdates(stopped: Boolean) { + ringingStateUpdatesStopped = stopped + } + /** * Update participants visibility on the UI. * diff --git a/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt b/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt index 0a556f1d3f..95b803025c 100644 --- a/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt +++ b/stream-video-android-ui-core/src/main/kotlin/io/getstream/video/android/ui/common/StreamCallActivity.kt @@ -110,6 +110,7 @@ public abstract class StreamCallActivity : ComponentActivity(), ActivityCallOper action: String? = null, clazz: Class, configuration: StreamCallActivityConfiguration = StreamCallActivityConfiguration(), + joinAndRing: Boolean = false, extraData: Bundle? = null, ): Intent { return Intent(context, clazz).apply { @@ -123,6 +124,7 @@ public abstract class StreamCallActivity : ComponentActivity(), ActivityCallOper // Add the generated call ID and other params putExtra(NotificationHandler.INTENT_EXTRA_CALL_CID, cid) putExtra(EXTRA_LEAVE_WHEN_LAST, leaveWhenLastInCall) + putExtra(EXTRA_JOIN_AND_RING, joinAndRing) // Setup the members to transfer to the new activity val membersArrayList = ArrayList() members.forEach { membersArrayList.add(it) } @@ -524,7 +526,9 @@ public abstract class StreamCallActivity : ComponentActivity(), ActivityCallOper call, members = members, ring = false, - onSuccess = onSuccess, + onSuccess = { + join(call, onSuccess = onSuccess, onError = onError) + }, onError = onError, ) } else { @@ -836,9 +840,15 @@ public abstract class StreamCallActivity : ComponentActivity(), ActivityCallOper onSuccess: (suspend (Call) -> Unit)?, onError: (suspend (Exception) -> Unit)?, ) { - acceptOrJoinNewCall(call, onSuccess, onError) { + acceptOrJoinNewCall(call, onSuccess, onError) { availableCall -> logger.d { "Join call, ${call.cid}" } - it.join() + val joinAndRing = intent.getBooleanExtra(EXTRA_JOIN_AND_RING, false) + if (joinAndRing) { + logger.d { "[joinAndRing] Join and ring call, ${call.cid}" } + availableCall.joinAndRing(call.state.members.value.map { it.user.id }) + } else { + availableCall.join() + } } } From 787499c5e67e5bc209b83cc4c36b4f1fb0be4caf Mon Sep 17 00:00:00 2001 From: Aleksandar Apostolov Date: Thu, 20 Nov 2025 14:58:19 +0100 Subject: [PATCH 8/9] ApiDump --- stream-video-android-core/api/stream-video-android-core.api | 4 ++-- .../api/stream-video-android-ui-core.api | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/stream-video-android-core/api/stream-video-android-core.api b/stream-video-android-core/api/stream-video-android-core.api index 4756f8e498..f1dde612f8 100644 --- a/stream-video-android-core/api/stream-video-android-core.api +++ b/stream-video-android-core/api/stream-video-android-core.api @@ -7604,8 +7604,8 @@ public final class io/getstream/video/android/core/Call { public final fun isVideoEnabled ()Z public final fun join (ZLio/getstream/video/android/core/CreateCallOptions;ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun join$default (Lio/getstream/video/android/core/Call;ZLio/getstream/video/android/core/CreateCallOptions;ZZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; - public final fun joinAndRing (Ljava/lang/String;Ljava/util/List;Lio/getstream/video/android/core/CreateCallOptions;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static synthetic fun joinAndRing$default (Lio/getstream/video/android/core/Call;Ljava/lang/String;Ljava/util/List;Lio/getstream/video/android/core/CreateCallOptions;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun joinAndRing (Ljava/util/List;Lio/getstream/video/android/core/CreateCallOptions;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun joinAndRing$default (Lio/getstream/video/android/core/Call;Ljava/util/List;Lio/getstream/video/android/core/CreateCallOptions;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun kickUser (Ljava/lang/String;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun kickUser$default (Lio/getstream/video/android/core/Call;Ljava/lang/String;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun leave ()V diff --git a/stream-video-android-ui-core/api/stream-video-android-ui-core.api b/stream-video-android-ui-core/api/stream-video-android-ui-core.api index fb32a36d16..fe9c34be7e 100644 --- a/stream-video-android-ui-core/api/stream-video-android-ui-core.api +++ b/stream-video-android-ui-core/api/stream-video-android-ui-core.api @@ -137,8 +137,8 @@ public abstract class io/getstream/video/android/ui/common/StreamCallActivity : } public final class io/getstream/video/android/ui/common/StreamCallActivity$Companion { - public final fun callIntent (Landroid/content/Context;Lio/getstream/video/android/model/StreamCallId;Ljava/util/List;ZLjava/lang/String;Ljava/lang/Class;Lio/getstream/video/android/ui/common/StreamCallActivityConfiguration;Landroid/os/Bundle;)Landroid/content/Intent; - public static synthetic fun callIntent$default (Lio/getstream/video/android/ui/common/StreamCallActivity$Companion;Landroid/content/Context;Lio/getstream/video/android/model/StreamCallId;Ljava/util/List;ZLjava/lang/String;Ljava/lang/Class;Lio/getstream/video/android/ui/common/StreamCallActivityConfiguration;Landroid/os/Bundle;ILjava/lang/Object;)Landroid/content/Intent; + public final fun callIntent (Landroid/content/Context;Lio/getstream/video/android/model/StreamCallId;Ljava/util/List;ZLjava/lang/String;Ljava/lang/Class;Lio/getstream/video/android/ui/common/StreamCallActivityConfiguration;ZLandroid/os/Bundle;)Landroid/content/Intent; + public static synthetic fun callIntent$default (Lio/getstream/video/android/ui/common/StreamCallActivity$Companion;Landroid/content/Context;Lio/getstream/video/android/model/StreamCallId;Ljava/util/List;ZLjava/lang/String;Ljava/lang/Class;Lio/getstream/video/android/ui/common/StreamCallActivityConfiguration;ZLandroid/os/Bundle;ILjava/lang/Object;)Landroid/content/Intent; public final fun callIntentBundle (Lio/getstream/video/android/model/StreamCallId;Ljava/util/List;ZLio/getstream/video/android/ui/common/StreamCallActivityConfiguration;Landroid/os/Bundle;)Landroid/os/Bundle; public static synthetic fun callIntentBundle$default (Lio/getstream/video/android/ui/common/StreamCallActivity$Companion;Lio/getstream/video/android/model/StreamCallId;Ljava/util/List;ZLio/getstream/video/android/ui/common/StreamCallActivityConfiguration;Landroid/os/Bundle;ILjava/lang/Object;)Landroid/os/Bundle; } From e7fdc5af5d8079c0984392a2d265e8c4c2923481 Mon Sep 17 00:00:00 2001 From: rahullohra Date: Thu, 20 Nov 2025 20:11:15 +0530 Subject: [PATCH 9/9] 1. remove unnecessary code --- demo-app/build.gradle.kts | 1 - .../getstream/video/android/CallActivity.kt | 222 +------------- .../android/ui/call/ParticipantsDialog.kt | 278 ++++-------------- .../getstream/video/android/core/CallState.kt | 1 + 4 files changed, 68 insertions(+), 434 deletions(-) diff --git a/demo-app/build.gradle.kts b/demo-app/build.gradle.kts index 928391c19f..21a9e23cef 100644 --- a/demo-app/build.gradle.kts +++ b/demo-app/build.gradle.kts @@ -259,7 +259,6 @@ dependencies { implementation(libs.accompanist.permission) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.coil.compose) - implementation(libs.androidx.compose.material3) // QR code implementation(libs.androidx.camera.core) diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt index 4bced419e5..579945c38f 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/CallActivity.kt @@ -19,52 +19,17 @@ package io.getstream.video.android import android.content.Intent import android.os.Bundle import android.os.PersistableBundle -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.Icon -import androidx.compose.material.Text -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Call -import androidx.compose.material.icons.filled.MoreHoriz -import androidx.compose.material.icons.filled.People -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.ModalBottomSheet import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateListOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.testTag -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import io.getstream.android.video.generated.models.RingCallRequest import io.getstream.chat.android.client.ChatClient import io.getstream.chat.android.models.Filters import io.getstream.chat.android.models.querysort.QuerySortByField import io.getstream.result.onSuccessSuspend -import io.getstream.video.android.compose.theme.VideoTheme import io.getstream.video.android.compose.ui.ComposeStreamCallActivity import io.getstream.video.android.compose.ui.StreamCallActivityComposeDelegate -import io.getstream.video.android.compose.ui.components.avatar.UserAvatar import io.getstream.video.android.compose.ui.components.call.activecall.AudioOnlyCallContent import io.getstream.video.android.core.Call import io.getstream.video.android.core.StreamVideo @@ -76,8 +41,6 @@ import io.getstream.video.android.ui.common.StreamCallActivityConfiguration import io.getstream.video.android.ui.common.util.StreamCallActivityDelicateApi import io.getstream.video.android.util.FullScreenCircleProgressBar import io.getstream.video.android.util.StreamVideoInitHelper -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @OptIn(StreamCallActivityDelicateApi::class) @@ -155,15 +118,14 @@ class CallActivity : ComposeStreamCallActivity() { @Composable override fun StreamCallActivity.AudioCallContent(call: Call) { - RingingRootContent(call) { - val micEnabled by call.microphone.isEnabled.collectAsStateWithLifecycle() - AudioOnlyCallContent( - call = call, - isMicrophoneEnabled = micEnabled, - onCallAction = { onCallAction(call, it) }, - onBackPressed = { onBackPressed(call) }, - ) - } + val micEnabled by call.microphone.isEnabled.collectAsStateWithLifecycle() + + AudioOnlyCallContent( + call = call, + isMicrophoneEnabled = micEnabled, + onCallAction = { onCallAction(call, it) }, + onBackPressed = { onBackPressed(call) }, + ) } private fun StreamCallActivity.goBackToMainScreen() { @@ -177,171 +139,3 @@ class CallActivity : ComposeStreamCallActivity() { } } } - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun RingingRootContent(call: Call, bodyContent: @Composable () -> Unit) { - Box { - bodyContent() - var showBottomPopUp by rememberSaveable { mutableStateOf(false) } - - Icon( - imageVector = Icons.Default.People, - tint = VideoTheme.colors.iconDefault, - contentDescription = null, - modifier = Modifier - .padding(16.dp) - .background( - color = VideoTheme.colors.baseSenary, // choose your color - shape = CircleShape, - ) - .padding(12.dp) - .align(Alignment.TopEnd) - .clickable { - showBottomPopUp = !showBottomPopUp - }, - ) - - if (showBottomPopUp) { - ModalBottomSheet(onDismissRequest = { - showBottomPopUp = !showBottomPopUp - }, containerColor = Color.Black) { - MemberListRowContent(call) - } - } - } -} - -@Composable -private fun MemberListRowContent(call: Call) { - val members by call.state.members.collectAsStateWithLifecycle() - val participants by call.state.participants.collectAsStateWithLifecycle() - val localCallingList = remember { mutableListOf() } - - val peopleNotInCallList = arrayListOf() - peopleNotInCallList.addAll( - members.filter { it.user.id !== StreamVideo.instance().userId }.map { - PeopleUiState( - it.user.userNameOrId, - PeopleUiCallState.NOT_IN_CALL, - false, - false, - it.user.image ?: "", - it.user.id, - ) - }, - ) - - val peopleInCallList = arrayListOf() - participants.forEach { participant -> - val personInCall = peopleNotInCallList.filter { it.userId == participant.userId.value } - if (personInCall.isNotEmpty()) { - peopleNotInCallList.remove(personInCall.first()) - peopleInCallList.add( - personInCall.first().copy(peopleUiCallState = PeopleUiCallState.IN_CALL), - ) - } - } - val peopleList = remember { mutableStateListOf() } - peopleList.addAll(peopleNotInCallList) - peopleList.addAll(peopleInCallList) - peopleList.removeIf { it.userId == StreamVideo.instance().userId } - - localCallingList.forEach { localCalling -> - peopleList.forEachIndexed { index, people -> - if (localCalling.userId == people.userId) { - peopleList[index] = people.copy(peopleUiCallState = PeopleUiCallState.CALLING) - } - } - } - - LazyColumn { - items(count = peopleList.size, key = { index -> peopleList[index].userId }) { index -> - val people = peopleList[index] - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = VideoTheme.dimens.spacingM), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Row(verticalAlignment = Alignment.CenterVertically) { - val userName = people.name - val userImage = people.image - - UserAvatar( - modifier = Modifier - .size(VideoTheme.dimens.genericXxl) - .testTag("Stream_ParticipantsListUserAvatar"), - userImage = userImage, - userName = userName, - isShowingOnlineIndicator = false, - ) - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - Text( - modifier = Modifier - .padding(start = 8.dp) - .testTag("Stream_ParticipantsListUserName"), - text = userName, - style = VideoTheme.typography.bodyM, - color = VideoTheme.colors.basePrimary, - fontSize = 16.sp, - maxLines = 1, - ) - } - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - when (people.peopleUiCallState) { - PeopleUiCallState.NOT_IN_CALL -> { - val scope = rememberCoroutineScope() - Icon( - modifier = Modifier.clickable { - scope.launch { - call.ring( - RingCallRequest( - call.isVideoEnabled(), - listOf(people.userId), - ), - ) - localCallingList.add(people) - } - }, - tint = VideoTheme.colors.basePrimary, - imageVector = Icons.Default.Call, - contentDescription = null, - ) - } - PeopleUiCallState.CALLING -> { - Icon( - modifier = Modifier, - tint = VideoTheme.colors.basePrimary, - imageVector = Icons.Default.MoreHoriz, - contentDescription = null, - ) - } - PeopleUiCallState.IN_CALL -> {} - } - } - } - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - } - } -} - -internal data class PeopleUiState( - val name: String, - val peopleUiCallState: PeopleUiCallState, - val videoEnabled: Boolean, - val audioEnabled: Boolean, - val image: String, - val userId: String, -) - -internal enum class PeopleUiCallState { - NOT_IN_CALL, - IN_CALL, - CALLING, -} diff --git a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt index 123bdfe61f..d4cba8b28c 100644 --- a/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt +++ b/demo-app/src/main/kotlin/io/getstream/video/android/ui/call/ParticipantsDialog.kt @@ -19,7 +19,6 @@ package io.getstream.video.android.ui.call import android.content.ClipboardManager import android.content.Context import androidx.compose.foundation.background -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -30,23 +29,18 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Mic import androidx.compose.material.icons.filled.MicOff -import androidx.compose.material.icons.filled.MoreHoriz import androidx.compose.material.icons.filled.Videocam import androidx.compose.material.icons.filled.VideocamOff import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -59,9 +53,6 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle -import io.getstream.android.video.generated.models.RingCallRequest -import io.getstream.video.android.PeopleUiCallState -import io.getstream.video.android.PeopleUiState import io.getstream.video.android.compose.theme.VideoTheme import io.getstream.video.android.compose.ui.components.avatar.UserAvatar import io.getstream.video.android.core.Call @@ -70,7 +61,6 @@ import io.getstream.video.android.mock.StreamPreviewDataUtils import io.getstream.video.android.mock.previewCall import io.getstream.video.android.mock.previewParticipantsList import io.getstream.video.android.util.config.AppConfig -import kotlinx.coroutines.launch @Composable public fun ParticipantsDialog(call: Call, onDismiss: () -> Unit) { @@ -146,226 +136,76 @@ fun ParticipantsListContent( Spacer(modifier = Modifier.size(16.dp)) } - ParticipantListRowContent(participants) - } -} - -private fun LazyListScope.ParticipantListRowContent(participants: List) { - items(count = participants.size, key = { index -> participants[index].sessionId }) { - val participant = participants[it] - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = VideoTheme.dimens.spacingM), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Row(verticalAlignment = Alignment.CenterVertically) { - val userName by participant.userNameOrId.collectAsStateWithLifecycle() - val userImage by participant.image.collectAsStateWithLifecycle() - UserAvatar( - modifier = Modifier - .size(VideoTheme.dimens.genericXxl) - .testTag("Stream_ParticipantsListUserAvatar"), - userImage = userImage, - userName = userName, - isShowingOnlineIndicator = false, - ) - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - Text( - modifier = Modifier - .padding(start = 8.dp) - .testTag("Stream_ParticipantsListUserName"), - text = userName, - style = VideoTheme.typography.bodyM, - color = VideoTheme.colors.basePrimary, - fontSize = 16.sp, - maxLines = 1, - ) - } - + items(count = participants.size, key = { index -> participants[index].sessionId }) { + val participant = participants[it] Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = VideoTheme.dimens.spacingM), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, ) { - val audioEnabled by participant.audioEnabled.collectAsStateWithLifecycle() - val iconAudio = if (audioEnabled) { - Icons.Default.Mic - } else { - Icons.Default.MicOff + Row(verticalAlignment = Alignment.CenterVertically) { + val userName by participant.userNameOrId.collectAsStateWithLifecycle() + val userImage by participant.image.collectAsStateWithLifecycle() + UserAvatar( + modifier = Modifier + .size(VideoTheme.dimens.genericXxl) + .testTag("Stream_ParticipantsListUserAvatar"), + userImage = userImage, + userName = userName, + isShowingOnlineIndicator = false, + ) + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) + Text( + modifier = Modifier + .padding(start = 8.dp) + .testTag("Stream_ParticipantsListUserName"), + text = userName, + style = VideoTheme.typography.bodyM, + color = VideoTheme.colors.basePrimary, + fontSize = 16.sp, + maxLines = 1, + ) } - Spacer(modifier = Modifier.width(8.dp)) - Icon( - modifier = Modifier - .testTag("Stream_ParticipantsListUserMicrophone_Enabled_$audioEnabled"), - tint = VideoTheme.colors.basePrimary, - imageVector = iconAudio, - contentDescription = null, - ) - Spacer(modifier = Modifier.width(8.dp)) - - val videoEnabled by participant.videoEnabled.collectAsStateWithLifecycle() - val iconVideo = if (videoEnabled) { - Icons.Default.Videocam - } else { - Icons.Default.VideocamOff - } - Icon( - modifier = Modifier - .testTag("Stream_ParticipantsListUserCamera_Enabled_$videoEnabled"), - tint = VideoTheme.colors.basePrimary, - imageVector = iconVideo, - contentDescription = null, - ) - } - } - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - } -} - -@Composable -private fun LazyListScope.MemberListRowContent(call: Call, participants: List) { - val members by call.state.members.collectAsStateWithLifecycle() - val localCallingList = remember { mutableListOf() } - val peopleNotInCallList = arrayListOf() - peopleNotInCallList.addAll( - members.map { - PeopleUiState( - it.user.userNameOrId, - PeopleUiCallState.NOT_IN_CALL, - false, - false, - it.user.image ?: "", - it.user.userNameOrId, - ) - }, - ) - - val peopleInCallList = arrayListOf() - participants.forEach { participant -> - val personInCall = peopleNotInCallList.filter { it.userId == participant.userId.value } - if (personInCall.isNotEmpty()) { - peopleNotInCallList.remove(personInCall.first()) - peopleInCallList.add( - personInCall.first().copy(peopleUiCallState = PeopleUiCallState.IN_CALL), - ) - } - } - val peopleList = remember { mutableStateListOf() } - peopleList.addAll(peopleNotInCallList) - peopleList.addAll(peopleInCallList) - localCallingList.forEach { localCalling -> - peopleList.forEachIndexed { index, people -> - if (localCalling.userId == people.userId) { - peopleList[index] = people.copy(peopleUiCallState = PeopleUiCallState.CALLING) - } - } - } - - items(count = peopleList.size, key = { index -> peopleList[index].userId }) { index -> - val people = peopleList[index] - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = VideoTheme.dimens.spacingM), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Row(verticalAlignment = Alignment.CenterVertically) { - val userName = people.name - val userImage = people.image - - UserAvatar( - modifier = Modifier - .size(VideoTheme.dimens.genericXxl) - .testTag("Stream_ParticipantsListUserAvatar"), - userImage = userImage, - userName = userName, - isShowingOnlineIndicator = false, - ) - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) - Text( - modifier = Modifier - .padding(start = 8.dp) - .testTag("Stream_ParticipantsListUserName"), - text = userName, - style = VideoTheme.typography.bodyM, - color = VideoTheme.colors.basePrimary, - fontSize = 16.sp, - maxLines = 1, - ) - } - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - when (people.peopleUiCallState) { - PeopleUiCallState.NOT_IN_CALL -> { - val scope = rememberCoroutineScope() - Icon( - modifier = Modifier.clickable { - scope.launch { - call.ring( - RingCallRequest( - call.isVideoEnabled(), - listOf(people.userId), - ), - ) - localCallingList.add(people) - } - }, - tint = VideoTheme.colors.basePrimary, - imageVector = Icons.Default.Call, - contentDescription = null, - ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + val audioEnabled by participant.audioEnabled.collectAsStateWithLifecycle() + val iconAudio = if (audioEnabled) { + Icons.Default.Mic + } else { + Icons.Default.MicOff } - PeopleUiCallState.CALLING -> { - Icon( - modifier = Modifier, - tint = VideoTheme.colors.basePrimary, - imageVector = Icons.Default.MoreHoriz, - contentDescription = null, - ) - } - PeopleUiCallState.IN_CALL -> { - val audioEnabled = people.audioEnabled - val iconAudio = if (audioEnabled) { - Icons.Default.Mic - } else { - Icons.Default.MicOff - } - Spacer(modifier = Modifier.width(8.dp)) - Icon( - modifier = Modifier - .testTag( - "Stream_ParticipantsListUserMicrophone_Enabled_$audioEnabled", - ), - tint = VideoTheme.colors.basePrimary, - imageVector = iconAudio, - contentDescription = null, - ) - Spacer(modifier = Modifier.width(8.dp)) - - val videoEnabled = people.videoEnabled - val iconVideo = if (videoEnabled) { - Icons.Default.Videocam - } else { - Icons.Default.VideocamOff - } - Icon( - modifier = Modifier - .testTag("Stream_ParticipantsListUserCamera_Enabled_$videoEnabled"), - tint = VideoTheme.colors.basePrimary, - imageVector = iconVideo, - contentDescription = null, - ) + Spacer(modifier = Modifier.width(8.dp)) + Icon( + modifier = Modifier + .testTag("Stream_ParticipantsListUserMicrophone_Enabled_$audioEnabled"), + tint = VideoTheme.colors.basePrimary, + imageVector = iconAudio, + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + + val videoEnabled by participant.videoEnabled.collectAsStateWithLifecycle() + val iconVideo = if (videoEnabled) { + Icons.Default.Videocam + } else { + Icons.Default.VideocamOff } + Icon( + modifier = Modifier + .testTag("Stream_ParticipantsListUserCamera_Enabled_$videoEnabled"), + tint = VideoTheme.colors.basePrimary, + imageVector = iconVideo, + contentDescription = null, + ) } } + Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) } - Spacer(modifier = Modifier.size(VideoTheme.dimens.spacingM)) } } diff --git a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt index 50dc97b312..13d775fe57 100644 --- a/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt +++ b/stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallState.kt @@ -1228,6 +1228,7 @@ public class CallState( // stop the call ringing timer if it's running } Log.d("RingingState", "Update: $state") + _ringingState.value = state }