Skip to content

Commit 5ebaa44

Browse files
committed
temp
1 parent f099b98 commit 5ebaa44

File tree

14 files changed

+286
-160
lines changed

14 files changed

+286
-160
lines changed

demo-app/src/main/kotlin/io/getstream/video/android/util/StreamVideoInitHelper.kt

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ import io.getstream.video.android.core.StreamVideo
3232
import io.getstream.video.android.core.StreamVideoBuilder
3333
import io.getstream.video.android.core.logging.LoggingLevel
3434
import io.getstream.video.android.core.notifications.NotificationConfig
35-
import io.getstream.video.android.core.notifications.internal.service.livestreamGuestCallServiceConfig
36-
import io.getstream.video.android.core.notifications.internal.service.update
35+
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfigBuilder
36+
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfigRegistry
37+
import io.getstream.video.android.core.notifications.internal.service.CallType
38+
import io.getstream.video.android.core.notifications.internal.service.DefaultCallConfigurations
3739
import io.getstream.video.android.core.socket.common.token.TokenProvider
3840
import io.getstream.video.android.data.services.stream.GetAuthDataResponse
3941
import io.getstream.video.android.data.services.stream.StreamService
@@ -191,6 +193,34 @@ object StreamVideoInitHelper {
191193
token: String,
192194
loggingLevel: LoggingLevel,
193195
): StreamVideo {
196+
197+
val callServiceConfigRegistry = CallServiceConfigRegistry()
198+
// with(callServiceConfigRegistry){
199+
// register("",{})
200+
// register("",{})
201+
// }
202+
203+
callServiceConfigRegistry.createConfigRegistry {
204+
205+
register(DefaultCallConfigurations.getLivestreamGuestCallServiceConfig())
206+
207+
register(CallType.Default.name) {
208+
setAudioUsage(AudioAttributes.USAGE_MEDIA)
209+
setRunCallServiceInForeground(true)
210+
}
211+
212+
update(CallType.Default.name) {
213+
CallServiceConfigBuilder()
214+
.setAudioUsage(AudioAttributes.USAGE_MEDIA)
215+
.setRunCallServiceInForeground(true)
216+
}
217+
218+
update(CallType.Livestream.name) {
219+
CallServiceConfigBuilder()
220+
.setRunCallServiceInForeground(true)
221+
}
222+
}
223+
194224
return StreamVideoBuilder(
195225
context = context,
196226
apiKey = apiKey,
@@ -215,16 +245,7 @@ object StreamVideoInitHelper {
215245
},
216246
appName = "Stream Video Demo App",
217247
audioProcessing = NoiseCancellation(context),
218-
callServiceConfig = livestreamGuestCallServiceConfig()
219-
.update(
220-
callType = "default",
221-
runCallServiceInForeground = true,
222-
audioUsage = AudioAttributes.USAGE_MEDIA,
223-
)
224-
.update(
225-
callType = "livestream",
226-
runCallServiceInForeground = true,
227-
),
248+
callServiceConfigRegistry = callServiceConfigRegistry
228249
).build()
229250
}
230251
}

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/Call.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import io.getstream.video.android.core.model.SortField
4646
import io.getstream.video.android.core.model.UpdateUserPermissionsData
4747
import io.getstream.video.android.core.model.VideoTrack
4848
import io.getstream.video.android.core.model.toIceServer
49-
import io.getstream.video.android.core.notifications.internal.service.resolveAudioUsage
5049
import io.getstream.video.android.core.utils.RampValueUpAndDownHelper
5150
import io.getstream.video.android.core.utils.safeCall
5251
import io.getstream.video.android.core.utils.safeCallWithDefault
@@ -213,7 +212,7 @@ public class Call(
213212
internal var peerConnectionFactory: StreamPeerConnectionFactory = StreamPeerConnectionFactory(
214213
context = clientImpl.context,
215214
audioProcessing = clientImpl.audioProcessing,
216-
audioUsage = clientImpl.callServiceConfig.resolveAudioUsage(type),
215+
audioUsage = clientImpl.callServiceConfigRegistry.get(type).audioUsage,
217216
)
218217

219218
internal val mediaManager by lazy {
@@ -225,7 +224,7 @@ public class Call(
225224
this,
226225
scope,
227226
peerConnectionFactory.eglBase.eglBaseContext,
228-
clientImpl.callServiceConfig.resolveAudioUsage(type),
227+
clientImpl.callServiceConfigRegistry.get(type).audioUsage,
229228
)
230229
}
231230
}

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/ClientState.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import androidx.core.content.ContextCompat
2121
import io.getstream.log.taggedLogger
2222
import io.getstream.result.Error
2323
import io.getstream.video.android.core.notifications.internal.service.CallService
24-
import io.getstream.video.android.core.notifications.internal.service.resolveRunCallServiceInForeground
2524
import io.getstream.video.android.core.socket.coordinator.state.VideoSocketState
2625
import io.getstream.video.android.core.utils.safeCallWithDefault
2726
import io.getstream.video.android.model.StreamCallId
@@ -177,13 +176,14 @@ class ClientState(private val client: StreamVideo) {
177176
* This depends on the flag in [StreamVideoBuilder] called `runForegroundServiceForCalls`
178177
*/
179178
internal fun maybeStartForegroundService(call: Call, trigger: String) {
180-
if (streamVideoClient.callServiceConfig.resolveRunCallServiceInForeground(call.type)) {
179+
val callConfig = streamVideoClient.callServiceConfigRegistry.get(call.type)
180+
if (callConfig.runCallServiceInForeground) {
181181
val context = streamVideoClient.context
182182
val serviceIntent = CallService.buildStartIntent(
183183
context,
184184
StreamCallId.fromCallCid(call.cid),
185185
trigger,
186-
callServiceConfiguration = streamVideoClient.callServiceConfig,
186+
callServiceConfiguration = callConfig,
187187
)
188188
ContextCompat.startForegroundService(context, serviceIntent)
189189
}
@@ -193,12 +193,12 @@ class ClientState(private val client: StreamVideo) {
193193
* Stop the foreground service that manages the call even when the UI is gone.
194194
*/
195195
internal fun maybeStopForegroundService(call: Call) {
196-
if (streamVideoClient.callServiceConfig.resolveRunCallServiceInForeground(call.type)) {
196+
val callConfig = streamVideoClient.callServiceConfigRegistry.get(call.type)
197+
if (callConfig.runCallServiceInForeground) {
197198
val context = streamVideoClient.context
198199
val serviceIntent = CallService.buildStopIntent(
199200
context,
200-
call.type,
201-
callServiceConfiguration = streamVideoClient.callServiceConfig,
201+
callConfig,
202202
)
203203
context.stopService(serviceIntent)
204204
}

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/MediaManager.kt

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -654,39 +654,44 @@ public class CameraManager(
654654
* Capture is called whenever you call enable()
655655
*/
656656
internal fun startCapture() = synchronized(this) {
657-
if (isCapturingVideo) {
658-
stopCapture()
659-
}
657+
safeCall {
658+
if (isCapturingVideo) {
659+
stopCapture()
660+
}
660661

661-
val selectedDevice = _selectedDevice.value ?: return
662-
val selectedResolution = resolution.value ?: return
662+
val selectedDevice = _selectedDevice.value ?: return
663+
val selectedResolution = resolution.value ?: return
663664

664-
// setup the camera 2 capturer
665-
videoCapturer = Camera2Capturer(mediaManager.context, selectedDevice.id, null)
665+
// setup the camera 2 capturer
666+
videoCapturer = Camera2Capturer(mediaManager.context, selectedDevice.id, null)
666667

667-
// initialize it
668-
videoCapturer.initialize(
669-
surfaceTextureHelper,
670-
mediaManager.context,
671-
mediaManager.videoSource.capturerObserver,
672-
)
668+
// initialize it
669+
videoCapturer.initialize(
670+
surfaceTextureHelper,
671+
mediaManager.context,
672+
mediaManager.videoSource.capturerObserver,
673+
)
674+
675+
// and start capture
676+
videoCapturer.startCapture(
677+
selectedResolution.width,
678+
selectedResolution.height,
679+
selectedResolution.framerate.max,
680+
)
681+
isCapturingVideo = true
682+
}
673683

674-
// and start capture
675-
videoCapturer.startCapture(
676-
selectedResolution.width,
677-
selectedResolution.height,
678-
selectedResolution.framerate.max,
679-
)
680-
isCapturingVideo = true
681684
}
682685

683686
/**
684687
* Stops capture if it's running
685688
*/
686689
internal fun stopCapture() = synchronized(this) {
687-
if (isCapturingVideo) {
688-
videoCapturer.stopCapture()
689-
isCapturingVideo = false
690+
safeCall {
691+
if (isCapturingVideo) {
692+
videoCapturer.stopCapture()
693+
isCapturingVideo = false
694+
}
690695
}
691696
}
692697

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoBuilder.kt

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ import io.getstream.video.android.core.notifications.NotificationConfig
2929
import io.getstream.video.android.core.notifications.internal.StreamNotificationManager
3030
import io.getstream.video.android.core.notifications.internal.service.ANY_MARKER
3131
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfig
32-
import io.getstream.video.android.core.notifications.internal.service.callServiceConfig
33-
import io.getstream.video.android.core.notifications.internal.service.update
32+
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfigBuilder
33+
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfigRegistry
34+
import io.getstream.video.android.core.notifications.internal.service.CallType
35+
import io.getstream.video.android.core.notifications.internal.service.DefaultCallConfigurations
3436
import io.getstream.video.android.core.notifications.internal.storage.DeviceTokenStorage
3537
import io.getstream.video.android.core.permission.android.DefaultStreamPermissionCheck
3638
import io.getstream.video.android.core.permission.android.StreamPermissionCheck
@@ -109,8 +111,11 @@ public class StreamVideoBuilder @JvmOverloads constructor(
109111
private val connectionTimeoutInMs: Long = 10000,
110112
private var ensureSingleInstance: Boolean = true,
111113
private val videoDomain: String = "video.stream-io-api.com",
114+
@Deprecated("Use CallServiceConfigRegistry")
112115
private val runForegroundServiceForCalls: Boolean = true,
116+
@Deprecated("Use CallServiceConfigRegistry")
113117
private val callServiceConfig: CallServiceConfig? = null,
118+
private val callServiceConfigRegistry: CallServiceConfigRegistry = CallServiceConfigRegistry(),
114119
private val localSfuAddress: String? = null,
115120
private val sounds: Sounds = defaultResourcesRingingConfig(context).toSounds(),
116121
private val crashOnMissingPermission: Boolean = false,
@@ -123,7 +128,7 @@ public class StreamVideoBuilder @JvmOverloads constructor(
123128
private val appName: String? = null,
124129
private val audioProcessing: ManagedAudioProcessingFactory? = null,
125130
private val leaveAfterDisconnectSeconds: Long = 30,
126-
) {
131+
) {
127132
private val context: Context = context.applicationContext
128133
private val scope = UserScope(ClientScope())
129134

@@ -199,6 +204,12 @@ public class StreamVideoBuilder @JvmOverloads constructor(
199204
deviceTokenStorage = deviceTokenStorage,
200205
)
201206

207+
//Set default call configuration
208+
callServiceConfigRegistry.createConfigRegistry {
209+
register(CallType.AnyMarker.name, DefaultCallConfigurations.default
210+
.copy(runCallServiceInForeground = runForegroundServiceForCalls, audioUsage = defaultAudioUsage))
211+
}
212+
202213
// Create the client
203214
val client = StreamVideoClient(
204215
context = context,
@@ -211,12 +222,9 @@ public class StreamVideoBuilder @JvmOverloads constructor(
211222
lifecycle = lifecycle,
212223
coordinatorConnectionModule = coordinatorConnectionModule,
213224
streamNotificationManager = streamNotificationManager,
214-
callServiceConfig = callServiceConfig
215-
?: callServiceConfig().update(
216-
callType = ANY_MARKER,
217-
runCallServiceInForeground = runForegroundServiceForCalls,
218-
audioUsage = defaultAudioUsage,
219-
),
225+
// callServiceConfig = callServiceConfig
226+
// ?: callServiceConfigRegistry.get(CallType.AnyMarker.name),
227+
callServiceConfigRegistry = callServiceConfigRegistry,
220228
testSfuAddress = localSfuAddress,
221229
sounds = sounds,
222230
permissionCheck = permissionCheck,

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoClient.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ import io.getstream.video.android.core.notifications.internal.StreamNotification
4444
import io.getstream.video.android.core.notifications.internal.service.ANY_MARKER
4545
import io.getstream.video.android.core.notifications.internal.service.CallService
4646
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfig
47-
import io.getstream.video.android.core.notifications.internal.service.callServiceConfig
48-
import io.getstream.video.android.core.notifications.internal.service.resolveRunCallServiceInForeground
47+
import io.getstream.video.android.core.notifications.internal.service.CallServiceConfigRegistry
4948
import io.getstream.video.android.core.permission.android.DefaultStreamPermissionCheck
5049
import io.getstream.video.android.core.permission.android.StreamPermissionCheck
5150
import io.getstream.video.android.core.socket.ErrorResponse
@@ -152,7 +151,7 @@ internal class StreamVideoClient internal constructor(
152151
internal val coordinatorConnectionModule: CoordinatorConnectionModule,
153152
internal val tokenProvider: TokenProvider = ConstantTokenProvider(token),
154153
internal val streamNotificationManager: StreamNotificationManager,
155-
internal val callServiceConfig: CallServiceConfig = callServiceConfig(),
154+
internal val callServiceConfigRegistry: CallServiceConfigRegistry = CallServiceConfigRegistry(),
156155
internal val testSfuAddress: String? = null,
157156
internal val sounds: Sounds,
158157
internal val permissionCheck: StreamPermissionCheck = DefaultStreamPermissionCheck(),
@@ -197,12 +196,14 @@ internal class StreamVideoClient internal constructor(
197196
// call cleanup on the active call
198197
val activeCall = state.activeCall.value
199198
// Stop the call service if it was running
200-
if (callServiceConfig.resolveRunCallServiceInForeground(activeCall?.type ?: ANY_MARKER)) {
199+
200+
val callConfig = callServiceConfigRegistry.get(activeCall?.type ?: ANY_MARKER)
201+
val runCallServiceInForeground = callConfig.runCallServiceInForeground
202+
if (runCallServiceInForeground) {
201203
safeCall {
202204
val serviceIntent = CallService.buildStopIntent(
203205
context = context,
204-
callType = activeCall?.type ?: ANY_MARKER,
205-
callServiceConfiguration = callServiceConfig,
206+
callServiceConfiguration = callConfig,
206207
)
207208
context.stopService(serviceIntent)
208209
}

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/notifications/internal/service/CallService.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,9 @@ internal open class CallService : Service() {
115115
callId: StreamCallId,
116116
trigger: String,
117117
callDisplayName: String? = null,
118-
callServiceConfiguration: CallServiceConfig = callServiceConfig(),
118+
callServiceConfiguration: CallServiceConfig = DefaultCallConfigurations.default,
119119
): Intent {
120-
val serviceClass = callServiceConfiguration.resolveServiceClass(callId.type)
120+
val serviceClass = callServiceConfiguration.serviceClass
121121
StreamLog.i(TAG) { "Resolved service class: $serviceClass" }
122122
val serviceIntent = Intent(context, serviceClass)
123123
serviceIntent.putExtra(INTENT_EXTRA_CALL_CID, callId)
@@ -156,26 +156,22 @@ internal open class CallService : Service() {
156156
*/
157157
fun buildStopIntent(
158158
context: Context,
159-
callType: String,
160-
callServiceConfiguration: CallServiceConfig = callServiceConfig(),
159+
callServiceConfiguration: CallServiceConfig = DefaultCallConfigurations.default,
161160
) = safeCallWithDefault(Intent(context, CallService::class.java)) {
162-
val intent = callServiceConfiguration.configs.firstNotNullOfOrNull {
163-
val serviceClass = callServiceConfiguration.resolveServiceClass(callType)
161+
val serviceClass = callServiceConfiguration.serviceClass
164162

165163
if (isServiceRunning(context, serviceClass)) {
166164
Intent(context, serviceClass)
167165
} else {
168-
null
166+
Intent(context, CallService::class.java)
169167
}
170-
}
171-
intent ?: Intent(context, CallService::class.java)
172168
}
173169

174170
fun showIncomingCall(
175171
context: Context,
176172
callId: StreamCallId,
177173
callDisplayName: String?,
178-
callServiceConfiguration: CallServiceConfig = callServiceConfig(),
174+
callServiceConfiguration: CallServiceConfig = DefaultCallConfigurations.default,
179175
notification: Notification?,
180176
) {
181177
val hasActiveCall = StreamVideo.instanceOrNull()?.state?.activeCall?.value != null
@@ -223,7 +219,7 @@ internal open class CallService : Service() {
223219
fun removeIncomingCall(
224220
context: Context,
225221
callId: StreamCallId,
226-
config: CallServiceConfig = callServiceConfig(),
222+
config: CallServiceConfig = DefaultCallConfigurations.default,
227223
) {
228224
safeCallWithResult {
229225
context.startService(

0 commit comments

Comments
 (0)