diff --git a/app/src/main/kotlin/com/wire/android/di/accountScoped/CallsModule.kt b/app/src/main/kotlin/com/wire/android/di/accountScoped/CallsModule.kt index d43e14f78b5..516dc982bfd 100644 --- a/app/src/main/kotlin/com/wire/android/di/accountScoped/CallsModule.kt +++ b/app/src/main/kotlin/com/wire/android/di/accountScoped/CallsModule.kt @@ -76,6 +76,11 @@ class CallsModule { fun provideObserveOngoingCallsUseCase(callsScope: CallsScope) = callsScope.observeOngoingCalls + @ViewModelScoped + @Provides + fun provideObserveEstablishedCallWithSortedParticipantsUseCase(callsScope: CallsScope) = + callsScope.observeEstablishedCallWithSortedParticipants + @ViewModelScoped @Provides fun provideRejectCallUseCase(callsScope: CallsScope) = diff --git a/app/src/main/kotlin/com/wire/android/ui/calling/CallState.kt b/app/src/main/kotlin/com/wire/android/ui/calling/CallState.kt index 5fc08d9c72c..8ef37de881d 100644 --- a/app/src/main/kotlin/com/wire/android/ui/calling/CallState.kt +++ b/app/src/main/kotlin/com/wire/android/ui/calling/CallState.kt @@ -18,14 +18,15 @@ package com.wire.android.ui.calling +import androidx.compose.runtime.Stable import com.wire.android.model.ImageAsset.UserAvatarAsset -import com.wire.android.ui.calling.model.UICallParticipant import com.wire.android.ui.home.conversationslist.model.Membership import com.wire.kalium.logic.data.call.CallStatus import com.wire.kalium.logic.data.call.ConversationTypeForCall import com.wire.kalium.logic.data.conversation.Conversation import com.wire.kalium.logic.data.id.ConversationId +@Stable data class CallState( val conversationId: ConversationId, val conversationName: ConversationName? = null, @@ -33,7 +34,6 @@ data class CallState( val accentId: Int = -1, val callStatus: CallStatus = CallStatus.CLOSED, val avatarAssetId: UserAvatarAsset? = null, - val participants: List = listOf(), val isMuted: Boolean? = null, val isCameraOn: Boolean = false, val isOnFrontCamera: Boolean = true, diff --git a/app/src/main/kotlin/com/wire/android/ui/calling/SharedCallingViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/calling/SharedCallingViewModel.kt index b48b03ac7d8..975bfae950a 100644 --- a/app/src/main/kotlin/com/wire/android/ui/calling/SharedCallingViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/calling/SharedCallingViewModel.kt @@ -29,10 +29,10 @@ import com.wire.android.mapper.UICallParticipantMapper import com.wire.android.mapper.UserTypeMapper import com.wire.android.media.CallRinger import com.wire.android.model.ImageAsset +import com.wire.android.ui.calling.model.UICallParticipant import com.wire.android.util.dispatchers.DispatcherProvider import com.wire.android.util.ui.WireSessionImageLoader import com.wire.kalium.logic.data.call.Call -import com.wire.kalium.logic.data.call.CallStatus import com.wire.kalium.logic.data.call.ConversationTypeForCall import com.wire.kalium.logic.data.call.VideoState import com.wire.kalium.logic.data.conversation.Conversation @@ -41,8 +41,8 @@ import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.feature.call.usecase.EndCallUseCase import com.wire.kalium.logic.feature.call.usecase.FlipToBackCameraUseCase import com.wire.kalium.logic.feature.call.usecase.FlipToFrontCameraUseCase -import com.wire.kalium.logic.feature.call.usecase.GetAllCallsWithSortedParticipantsUseCase import com.wire.kalium.logic.feature.call.usecase.MuteCallUseCase +import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallWithSortedParticipantsUseCase import com.wire.kalium.logic.feature.call.usecase.ObserveSpeakerUseCase import com.wire.kalium.logic.feature.call.usecase.SetVideoPreviewUseCase import com.wire.kalium.logic.feature.call.usecase.TurnLoudSpeakerOffUseCase @@ -55,11 +55,12 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flowOn @@ -72,7 +73,7 @@ import kotlinx.coroutines.launch class SharedCallingViewModel @AssistedInject constructor( @Assisted val conversationId: ConversationId, private val conversationDetails: ObserveConversationDetailsUseCase, - private val allCalls: GetAllCallsWithSortedParticipantsUseCase, + private val observeEstablishedCallWithSortedParticipants: ObserveEstablishedCallWithSortedParticipantsUseCase, private val endCall: EndCallUseCase, private val muteCall: MuteCallUseCase, private val unMuteCall: UnMuteCallUseCase, @@ -92,15 +93,12 @@ class SharedCallingViewModel @AssistedInject constructor( var callState by mutableStateOf(CallState(conversationId)) + var participantsState by mutableStateOf(persistentListOf()) + init { viewModelScope.launch { - val allCallsSharedFlow = allCalls().map { - it.find { call -> - call.conversationId == conversationId && - call.status != CallStatus.CLOSED && - call.status != CallStatus.MISSED - } - }.flowOn(dispatchers.default()).shareIn(this, started = SharingStarted.Lazily) + val allCallsSharedFlow = observeEstablishedCallWithSortedParticipants(conversationId) + .flowOn(dispatchers.default()).shareIn(this, started = SharingStarted.Lazily) launch { observeConversationDetails(this) @@ -176,7 +174,7 @@ class SharedCallingViewModel @AssistedInject constructor( } private suspend fun observeParticipants(sharedFlow: SharedFlow) { - sharedFlow.distinctUntilChanged().collectLatest { call -> + sharedFlow.collectLatest { call -> call?.let { callState = callState.copy( isMuted = it.isMuted, @@ -184,12 +182,8 @@ class SharedCallingViewModel @AssistedInject constructor( isCameraOn = it.isCameraOn, isCbrEnabled = it.isCbrEnabled && call.conversationType == Conversation.Type.ONE_ON_ONE, callerName = it.callerName, - participants = it.participants.map { participant -> - uiCallParticipantMapper.toUICallParticipant( - participant - ) - } ) + participantsState = call.participants.map { uiCallParticipantMapper.toUICallParticipant(it) }.toPersistentList() } } } diff --git a/app/src/main/kotlin/com/wire/android/ui/calling/controlbuttons/CameraFlipButton.kt b/app/src/main/kotlin/com/wire/android/ui/calling/controlbuttons/CameraFlipButton.kt index 4f99b9be4ee..bc58e225943 100644 --- a/app/src/main/kotlin/com/wire/android/ui/calling/controlbuttons/CameraFlipButton.kt +++ b/app/src/main/kotlin/com/wire/android/ui/calling/controlbuttons/CameraFlipButton.kt @@ -28,10 +28,10 @@ import com.wire.android.util.ui.PreviewMultipleThemes @Composable fun CameraFlipButton( - isOnFrontCamera: Boolean = false, onCameraFlipButtonClicked: () -> Unit, - size: Dp = dimensions().defaultCallingControlsSize, modifier: Modifier = Modifier, + isOnFrontCamera: Boolean = false, + size: Dp = dimensions().defaultCallingControlsSize ) { WireCallControlButton( isSelected = !isOnFrontCamera, diff --git a/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/OngoingCallScreen.kt b/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/OngoingCallScreen.kt index a1e3397b506..3e1fcab4b81 100644 --- a/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/OngoingCallScreen.kt +++ b/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/OngoingCallScreen.kt @@ -49,7 +49,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -58,6 +57,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.compose.LocalLifecycleOwner import com.wire.android.BuildConfig import com.wire.android.R import com.wire.android.ui.LocalActivity @@ -96,6 +96,9 @@ import com.wire.kalium.logic.data.call.CallStatus import com.wire.kalium.logic.data.conversation.Conversation import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.id.QualifiedID +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList import java.util.Locale @Suppress("ParameterWrapping") @@ -127,18 +130,14 @@ fun OngoingCallScreen( } } } + val hangUpCall = remember { + { + sharedCallingViewModel.hangUpCall { activity.finishAndRemoveTask() } + } + } - OngoingCallContent( - callState = sharedCallingViewModel.callState, - shouldShowDoubleTapToast = ongoingCallViewModel.shouldShowDoubleTapToast, - toggleSpeaker = sharedCallingViewModel::toggleSpeaker, - toggleMute = sharedCallingViewModel::toggleMute, - hangUpCall = { sharedCallingViewModel.hangUpCall { activity.finishAndRemoveTask() } }, - toggleVideo = sharedCallingViewModel::toggleVideo, - flipCamera = sharedCallingViewModel::flipCamera, - setVideoPreview = sharedCallingViewModel::setVideoPreview, - clearVideoPreview = sharedCallingViewModel::clearVideoPreview, - onCollapse = { + val onCollapse = remember { + { if (shouldUsePiPMode) { (activity as OngoingCallActivity).enterPiPMode( conversationId, @@ -147,10 +146,12 @@ fun OngoingCallScreen( } else { activity.moveTaskToBack(true) } - }, - requestVideoStreams = ongoingCallViewModel::requestVideoStreams, - hideDoubleTapToast = ongoingCallViewModel::hideDoubleTapToast, - onCameraPermissionPermanentlyDenied = { + Unit + } + } + + val onCameraPermissionPermanentlyDenied = remember { + { permissionPermanentlyDeniedDialogState.show( PermissionPermanentlyDeniedDialogState.Visible( title = R.string.app_permission_dialog_title, @@ -158,6 +159,23 @@ fun OngoingCallScreen( ) ) } + } + + OngoingCallContent( + callState = sharedCallingViewModel.callState, + shouldShowDoubleTapToast = ongoingCallViewModel.shouldShowDoubleTapToast, + toggleSpeaker = sharedCallingViewModel::toggleSpeaker, + toggleMute = sharedCallingViewModel::toggleMute, + hangUpCall = hangUpCall, + toggleVideo = sharedCallingViewModel::toggleVideo, + flipCamera = sharedCallingViewModel::flipCamera, + setVideoPreview = sharedCallingViewModel::setVideoPreview, + clearVideoPreview = sharedCallingViewModel::clearVideoPreview, + onCollapse = onCollapse, + requestVideoStreams = ongoingCallViewModel::requestVideoStreams, + hideDoubleTapToast = ongoingCallViewModel::hideDoubleTapToast, + onCameraPermissionPermanentlyDenied = onCameraPermissionPermanentlyDenied, + participants = sharedCallingViewModel.participantsState ) BackHandler { @@ -264,9 +282,9 @@ private fun OngoingCallContent( onCollapse: () -> Unit, hideDoubleTapToast: () -> Unit, onCameraPermissionPermanentlyDenied: () -> Unit, - requestVideoStreams: (participants: List) -> Unit -) = with(callState) { - + requestVideoStreams: (participants: List) -> Unit, + participants: PersistentList +) { val activity = LocalActivity.current val sheetInitialValue = SheetValue.PartiallyExpanded @@ -288,16 +306,16 @@ private fun OngoingCallContent( } else { { OngoingCallTopBar( - conversationName = when (conversationName) { - is ConversationName.Known -> conversationName.name - is ConversationName.Unknown -> stringResource(id = conversationName.resourceId) + conversationName = when (callState.conversationName) { + is ConversationName.Known -> callState.conversationName.name + is ConversationName.Unknown -> stringResource(id = callState.conversationName.resourceId) else -> "" }, - isCbrEnabled = isCbrEnabled, + isCbrEnabled = callState.isCbrEnabled, onCollapse = onCollapse, - protocolInfo = protocolInfo, - mlsVerificationStatus = mlsVerificationStatus, - proteusVerificationStatus = proteusVerificationStatus + protocolInfo = callState.protocolInfo, + mlsVerificationStatus = callState.mlsVerificationStatus, + proteusVerificationStatus = callState.proteusVerificationStatus ) } }, @@ -306,11 +324,11 @@ private fun OngoingCallContent( sheetContent = { if (!activity.isInPictureInPictureMode) { CallingControls( - conversationId = conversationId, - isMuted = isMuted ?: true, - isCameraOn = isCameraOn, - isOnFrontCamera = isOnFrontCamera, - isSpeakerOn = isSpeakerOn, + conversationId = callState.conversationId, + isMuted = callState.isMuted ?: true, + isCameraOn = callState.isCameraOn, + isOnFrontCamera = callState.isOnFrontCamera, + isSpeakerOn = callState.isSpeakerOn, toggleSpeaker = toggleSpeaker, toggleMute = toggleMute, onHangUpCall = hangUpCall, @@ -374,12 +392,13 @@ private fun OngoingCallContent( }, setVideoPreview = setVideoPreview, clearVideoPreview = clearVideoPreview, + participants = participants ) } else { VerticalCallingPager( participants = participants, - isSelfUserCameraOn = isCameraOn, - isSelfUserMuted = isMuted ?: true, + isSelfUserCameraOn = callState.isCameraOn, + isSelfUserMuted = callState.isMuted ?: true, contentHeight = this@BoxWithConstraints.maxHeight, onSelfVideoPreviewCreated = setVideoPreview, onSelfClearVideoPreview = clearVideoPreview, @@ -503,7 +522,10 @@ private fun CallingControls( ) if (isCameraOn) { - CameraFlipButton(isOnFrontCamera, flipCamera) + CameraFlipButton( + isOnFrontCamera = isOnFrontCamera, + onCameraFlipButtonClicked = flipCamera + ) } HangUpButton( @@ -517,12 +539,11 @@ private fun CallingControls( } @Composable -fun PreviewOngoingCallContent(participants: List) { +fun PreviewOngoingCallContent(participants: PersistentList) { OngoingCallContent( callState = CallState( conversationId = ConversationId("conversationId", "domain"), conversationName = ConversationName.Known("Conversation Name"), - participants = participants, isMuted = false, isCameraOn = false, isOnFrontCamera = false, @@ -544,13 +565,14 @@ fun PreviewOngoingCallContent(participants: List) { hideDoubleTapToast = {}, onCameraPermissionPermanentlyDenied = {}, requestVideoStreams = {}, + participants = participants ) } @PreviewMultipleThemes @Composable fun PreviewOngoingCallScreenConnecting() = WireTheme { - PreviewOngoingCallContent(participants = emptyList()) + PreviewOngoingCallContent(participants = persistentListOf()) } @PreviewMultipleThemes @@ -589,4 +611,4 @@ fun buildPreviewParticipantsList(count: Int = 10) = buildList { ) ) } -} +}.toPersistentList() diff --git a/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/fullscreen/FullScreenTile.kt b/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/fullscreen/FullScreenTile.kt index 304eb8aa5f1..79a1025aa3e 100644 --- a/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/fullscreen/FullScreenTile.kt +++ b/app/src/main/kotlin/com/wire/android/ui/calling/ongoing/fullscreen/FullScreenTile.kt @@ -40,6 +40,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.wire.android.R import com.wire.android.ui.calling.CallState +import com.wire.android.ui.calling.model.UICallParticipant import com.wire.android.ui.calling.ongoing.OngoingCallViewModel.Companion.DOUBLE_TAP_TOAST_DISPLAY_TIME import com.wire.android.ui.calling.ongoing.buildPreviewParticipantsList import com.wire.android.ui.calling.ongoing.participantsview.ParticipantTile @@ -47,11 +48,13 @@ import com.wire.android.ui.common.dimensions import com.wire.android.ui.theme.WireTheme import com.wire.android.util.ui.PreviewMultipleThemes import com.wire.kalium.logic.data.id.ConversationId +import kotlinx.collections.immutable.PersistentList import kotlinx.coroutines.delay @Composable fun FullScreenTile( callState: CallState, + participants: PersistentList, selectedParticipant: SelectedParticipant, height: Dp, closeFullScreen: (offset: Offset) -> Unit, @@ -67,7 +70,7 @@ fun FullScreenTile( onBackButtonClicked() } - callState.participants.find { + participants.find { it.id == selectedParticipant.userId && it.clientId == selectedParticipant.clientId }?.let { Box(modifier = modifier) { @@ -125,7 +128,6 @@ fun PreviewFullScreenTile() = WireTheme { FullScreenTile( callState = CallState( conversationId = ConversationId("id", "domain"), - participants = participants, ), selectedParticipant = SelectedParticipant( userId = participants.first().id, @@ -137,5 +139,6 @@ fun PreviewFullScreenTile() = WireTheme { onBackButtonClicked = {}, setVideoPreview = {}, clearVideoPreview = {}, + participants = participants, ) } diff --git a/app/src/test/kotlin/com/wire/android/notification/CallNotificationManagerTest.kt b/app/src/test/kotlin/com/wire/android/notification/CallNotificationManagerTest.kt index a3aa662c09b..a21a1dbafdc 100644 --- a/app/src/test/kotlin/com/wire/android/notification/CallNotificationManagerTest.kt +++ b/app/src/test/kotlin/com/wire/android/notification/CallNotificationManagerTest.kt @@ -282,7 +282,7 @@ class CallNotificationManagerTest { ) = Call( conversationId = conversationId, status = status, - callerId = UserId("caller", "domain").toString(), + callerId = UserId("caller", "domain"), participants = listOf(), isMuted = true, isCameraOn = false, diff --git a/app/src/test/kotlin/com/wire/android/notification/WireNotificationManagerTest.kt b/app/src/test/kotlin/com/wire/android/notification/WireNotificationManagerTest.kt index 6ef49a2f7d0..366357fd63c 100644 --- a/app/src/test/kotlin/com/wire/android/notification/WireNotificationManagerTest.kt +++ b/app/src/test/kotlin/com/wire/android/notification/WireNotificationManagerTest.kt @@ -1217,7 +1217,7 @@ class WireNotificationManagerTest { private fun provideCall(id: ConversationId = ConversationId("conversation_value", "conversation_domain")) = Call( conversationId = id, status = CallStatus.INCOMING, - callerId = "caller_id", + callerId = UserId("caller", "domain"), participants = listOf(), isMuted = false, isCameraOn = false, diff --git a/app/src/test/kotlin/com/wire/android/ui/WireActivityViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/WireActivityViewModelTest.kt index f04bb10bedd..5161dba9942 100644 --- a/app/src/test/kotlin/com/wire/android/ui/WireActivityViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/WireActivityViewModelTest.kt @@ -849,7 +849,7 @@ class WireActivityViewModelTest { isMuted = true, isCameraOn = false, isCbrEnabled = false, - callerId = "caller-id", + callerId = UserId("caller", "domain"), conversationName = "ONE_ON_ONE Name", conversationType = Conversation.Type.ONE_ON_ONE, callerName = "otherUsername", diff --git a/app/src/test/kotlin/com/wire/android/ui/calling/OngoingCallViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/calling/OngoingCallViewModelTest.kt index af96ecb747c..79e3abce3cb 100644 --- a/app/src/test/kotlin/com/wire/android/ui/calling/OngoingCallViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/calling/OngoingCallViewModelTest.kt @@ -278,7 +278,7 @@ class OngoingCallViewModelTest { ) = Call( conversationId = id, status = CallStatus.ESTABLISHED, - callerId = "caller_id", + callerId = UserId("caller", "domain"), participants = listOf(), isMuted = false, isCameraOn = false, diff --git a/app/src/test/kotlin/com/wire/android/ui/calling/SharedCallingViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/calling/SharedCallingViewModelTest.kt index 62d4b1b08a4..6eaceb90506 100644 --- a/app/src/test/kotlin/com/wire/android/ui/calling/SharedCallingViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/calling/SharedCallingViewModelTest.kt @@ -31,8 +31,8 @@ import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.feature.call.usecase.EndCallUseCase import com.wire.kalium.logic.feature.call.usecase.FlipToBackCameraUseCase import com.wire.kalium.logic.feature.call.usecase.FlipToFrontCameraUseCase -import com.wire.kalium.logic.feature.call.usecase.GetAllCallsWithSortedParticipantsUseCase import com.wire.kalium.logic.feature.call.usecase.MuteCallUseCase +import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallWithSortedParticipantsUseCase import com.wire.kalium.logic.feature.call.usecase.ObserveSpeakerUseCase import com.wire.kalium.logic.feature.call.usecase.SetVideoPreviewUseCase import com.wire.kalium.logic.feature.call.usecase.TurnLoudSpeakerOffUseCase @@ -59,7 +59,7 @@ import org.junit.jupiter.api.extension.ExtendWith class SharedCallingViewModelTest { @MockK - private lateinit var allCalls: GetAllCallsWithSortedParticipantsUseCase + private lateinit var establishedCall: ObserveEstablishedCallWithSortedParticipantsUseCase @MockK private lateinit var endCall: EndCallUseCase @@ -121,14 +121,14 @@ class SharedCallingViewModelTest { @BeforeEach fun setup() { MockKAnnotations.init(this) - coEvery { allCalls.invoke() } returns emptyFlow() + coEvery { establishedCall.invoke(any()) } returns emptyFlow() coEvery { observeConversationDetails.invoke(any()) } returns emptyFlow() coEvery { observeSpeaker.invoke() } returns emptyFlow() sharedCallingViewModel = SharedCallingViewModel( conversationId = conversationId, conversationDetails = observeConversationDetails, - allCalls = allCalls, + observeEstablishedCallWithSortedParticipants = establishedCall, endCall = endCall, muteCall = muteCall, flipToFrontCamera = flipToFrontCamera, diff --git a/app/src/test/kotlin/com/wire/android/ui/calling/incoming/IncomingCallViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/calling/incoming/IncomingCallViewModelTest.kt index b3c1672334e..c21d955259d 100644 --- a/app/src/test/kotlin/com/wire/android/ui/calling/incoming/IncomingCallViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/calling/incoming/IncomingCallViewModelTest.kt @@ -25,6 +25,7 @@ import com.wire.kalium.logic.data.call.Call import com.wire.kalium.logic.data.call.CallStatus import com.wire.kalium.logic.data.conversation.Conversation import com.wire.kalium.logic.data.id.ConversationId +import com.wire.kalium.logic.data.user.UserId import com.wire.kalium.logic.feature.call.usecase.AnswerCallUseCase import com.wire.kalium.logic.feature.call.usecase.EndCallUseCase import com.wire.kalium.logic.feature.call.usecase.GetIncomingCallsUseCase @@ -254,7 +255,7 @@ class IncomingCallViewModelTest { private fun provideCall(id: ConversationId = dummyConversationId, status: CallStatus = CallStatus.INCOMING) = Call( conversationId = id, status = status, - callerId = "caller_id", + callerId = UserId("caller", "domain"), participants = listOf(), isMuted = false, isCameraOn = false, diff --git a/app/src/test/kotlin/com/wire/android/ui/calling/outgoing/OutgoingCallViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/calling/outgoing/OutgoingCallViewModelTest.kt index cc14c35abfa..20ee910d5a7 100644 --- a/app/src/test/kotlin/com/wire/android/ui/calling/outgoing/OutgoingCallViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/calling/outgoing/OutgoingCallViewModelTest.kt @@ -174,7 +174,7 @@ class OutgoingCallViewModelTest { val call = Call( conversationId = ConversationId("caller", "domain"), status = CallStatus.STARTED, - callerId = UserId("caller", "domain").toString(), + callerId = UserId("caller", "domain"), participants = listOf(), isMuted = true, isCameraOn = false, diff --git a/app/src/test/kotlin/com/wire/android/ui/common/topappbar/CommonTopAppBarViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/common/topappbar/CommonTopAppBarViewModelTest.kt index bf6b050f019..7aa65761c53 100644 --- a/app/src/test/kotlin/com/wire/android/ui/common/topappbar/CommonTopAppBarViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/common/topappbar/CommonTopAppBarViewModelTest.kt @@ -375,7 +375,7 @@ class CommonTopAppBarViewModelTest { true, false, false, - "caller-id", + UserId("caller", "domain"), "ONE_ON_ONE Name", Conversation.Type.ONE_ON_ONE, "otherUsername", diff --git a/app/src/test/kotlin/com/wire/android/ui/home/messagecomposer/recordaudio/RecordAudioViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/home/messagecomposer/recordaudio/RecordAudioViewModelTest.kt index a420175b209..7b2a88c1a92 100644 --- a/app/src/test/kotlin/com/wire/android/ui/home/messagecomposer/recordaudio/RecordAudioViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/home/messagecomposer/recordaudio/RecordAudioViewModelTest.kt @@ -32,6 +32,7 @@ import com.wire.kalium.logic.data.call.Call import com.wire.kalium.logic.data.call.CallStatus import com.wire.kalium.logic.data.conversation.Conversation import com.wire.kalium.logic.data.id.ConversationId +import com.wire.kalium.logic.data.user.UserId import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCaseImpl import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallsUseCase @@ -429,7 +430,7 @@ class RecordAudioViewModelTest { domain = "conversationDomain" ), status = CallStatus.CLOSED, - callerId = "callerId@domain", + callerId = UserId("caller", "domain"), participants = listOf(), isMuted = true, isCameraOn = false, diff --git a/app/src/test/kotlin/com/wire/android/util/DeepLinkProcessorTest.kt b/app/src/test/kotlin/com/wire/android/util/DeepLinkProcessorTest.kt index ca951032401..11f9207ceca 100644 --- a/app/src/test/kotlin/com/wire/android/util/DeepLinkProcessorTest.kt +++ b/app/src/test/kotlin/com/wire/android/util/DeepLinkProcessorTest.kt @@ -350,7 +350,7 @@ class DeepLinkProcessorTest { isMuted = true, isCameraOn = false, isCbrEnabled = false, - callerId = "caller-id", + callerId = UserId("caller", "domain"), conversationName = "ONE_ON_ONE Name", conversationType = Conversation.Type.ONE_ON_ONE, callerName = "otherUsername", diff --git a/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/KotlinAndroidConfiguration.kt b/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/KotlinAndroidConfiguration.kt index 08d5c8ec33b..312875f0f7e 100644 --- a/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/KotlinAndroidConfiguration.kt +++ b/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/KotlinAndroidConfiguration.kt @@ -73,6 +73,10 @@ private fun Project.configureKotlin() { "-opt-in=kotlinx.coroutines.FlowPreview", ) } + compilerOptions.freeCompilerArgs.addAll( + "-P", + "plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true", + ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6ebe1701e9c..4cf6e28543a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -48,7 +48,7 @@ compose-qr = "1.0.1" # Compose composeBom = "2024.09.01" compose-activity = "1.9.2" -compose-compiler = "1.5.11" +compose-compiler = "1.5.13" compose-constraint = "1.0.1" compose-navigation = "2.7.7" # adjusted to work with compose-destinations "1.9.54" compose-destinations = "1.10.2" @@ -62,7 +62,7 @@ hilt-work = "1.2.0" accompanist = "0.32.0" # adjusted to work with compose-destinations "1.9.54" material = "1.12.0" material3 = "1.3.0" -coil = "2.6.0" +coil = "2.7.0" commonmark = "0.22.0" # Countly diff --git a/kalium b/kalium index 2b6e0ac33d3..c9ca0724f98 160000 --- a/kalium +++ b/kalium @@ -1 +1 @@ -Subproject commit 2b6e0ac33d391f2ea1b6e5d704fbe4732562c59c +Subproject commit c9ca0724f9835254308bc93c723df62e9b0c4249