Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.wire.kalium.logic.feature.call.usecase.ObserveConferenceCallingEnable
import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallWithSortedParticipantsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveInCallReactionsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveJoinableCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveLastActiveCallWithSortedParticipantsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveOngoingCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveOutgoingCallUseCase
Expand Down Expand Up @@ -83,6 +84,10 @@ class CallsModule {
fun provideObserveOngoingCallsUseCase(callsScope: CallsScope): ObserveOngoingCallsUseCase =
callsScope.observeOngoingCalls

@Provides
fun provideObserveJoinableCallsUseCase(callsScope: CallsScope): ObserveJoinableCallsUseCase =
callsScope.observeJoinableCalls

@Provides
fun provideObserveEstablishedCallWithSortedParticipantsUseCase(
callsScope: CallsScope
Expand Down
18 changes: 13 additions & 5 deletions app/src/main/kotlin/com/wire/android/mapper/ConversationMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.wire.android.ui.home.conversationslist.model.ConversationItem.Group.C
import com.wire.android.ui.home.conversationslist.model.ConversationItem.Group.Regular
import com.wire.android.ui.home.conversationslist.model.ConversationItem.PrivateConversation
import com.wire.android.util.ui.UiTextResolver
import com.wire.kalium.logic.data.call.Call
import com.wire.kalium.logic.data.conversation.ConversationDetails
import com.wire.kalium.logic.data.conversation.ConversationDetails.Connection
import com.wire.kalium.logic.data.conversation.ConversationDetails.Group
Expand All @@ -38,6 +39,7 @@ import com.wire.kalium.logic.data.conversation.ConversationDetails.Self
import com.wire.kalium.logic.data.conversation.ConversationDetailsWithEvents
import com.wire.kalium.logic.data.conversation.MutedConversationStatus
import com.wire.kalium.logic.data.conversation.UnreadEventCount
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.id.TeamId
import com.wire.kalium.logic.data.message.UnreadEventType
import com.wire.kalium.logic.data.user.ConnectionState
Expand All @@ -47,9 +49,11 @@ import com.wire.kalium.logic.data.user.UserAvailabilityStatus
fun ConversationDetailsWithEvents.toConversationItem(
userTypeMapper: UserTypeMapper,
uiTextResolver: UiTextResolver,
selfUserTeamId: TeamId?
selfUserTeamId: TeamId?,
joinableCallsByConversationId: Map<ConversationId, Call> = emptyMap()
): ConversationItem = when (val conversationDetails = this.conversationDetails) {
is Group.Regular -> {
val hasJoinableCall = conversationDetails.hasJoinableCall(joinableCallsByConversationId)
Regular(
groupName = conversationDetails.conversation.name.orEmpty(),
conversationId = conversationDetails.conversation.id,
Expand All @@ -60,21 +64,22 @@ fun ConversationDetailsWithEvents.toConversationItem(
mutedStatus = conversationDetails.conversation.mutedStatus,
unreadEventCount = unreadEventCount
),
hasOnGoingCall = conversationDetails.hasOngoingCall && conversationDetails.isSelfUserMember,
hasOnGoingCall = hasJoinableCall,
isFromTheSameTeam = conversationDetails.conversation.teamId == selfUserTeamId,
isSelfUserMember = conversationDetails.isSelfUserMember,
teamId = conversationDetails.conversation.teamId,
selfMemberRole = conversationDetails.selfRole,
isArchived = conversationDetails.conversation.archived,
mlsVerificationStatus = conversationDetails.conversation.mlsVerificationStatus,
proteusVerificationStatus = conversationDetails.conversation.proteusVerificationStatus,
hasNewActivitiesToShow = hasNewActivitiesToShow,
hasNewActivitiesToShow = hasNewActivitiesToShow || hasJoinableCall,
isFavorite = conversationDetails.isFavorite,
folder = conversationDetails.folder
)
}

is Group.Channel -> {
val hasJoinableCall = conversationDetails.hasJoinableCall(joinableCallsByConversationId)
Channel(
groupName = conversationDetails.conversation.name.orEmpty(),
conversationId = conversationDetails.conversation.id,
Expand All @@ -85,15 +90,15 @@ fun ConversationDetailsWithEvents.toConversationItem(
mutedStatus = conversationDetails.conversation.mutedStatus,
unreadEventCount = unreadEventCount
),
hasOnGoingCall = conversationDetails.hasOngoingCall && conversationDetails.isSelfUserMember,
hasOnGoingCall = hasJoinableCall,
isFromTheSameTeam = conversationDetails.conversation.teamId == selfUserTeamId,
isSelfUserMember = conversationDetails.isSelfUserMember,
teamId = conversationDetails.conversation.teamId,
selfMemberRole = conversationDetails.selfRole,
isArchived = conversationDetails.conversation.archived,
mlsVerificationStatus = conversationDetails.conversation.mlsVerificationStatus,
proteusVerificationStatus = conversationDetails.conversation.proteusVerificationStatus,
hasNewActivitiesToShow = hasNewActivitiesToShow,
hasNewActivitiesToShow = hasNewActivitiesToShow || hasJoinableCall,
isFavorite = conversationDetails.isFavorite,
folder = conversationDetails.folder,
isPrivate = conversationDetails.access == Group.Channel.ChannelAccess.PRIVATE
Expand Down Expand Up @@ -170,6 +175,9 @@ fun ConversationDetailsWithEvents.toConversationItem(
}
}

private fun Group.hasJoinableCall(joinableCallsByConversationId: Map<ConversationId, Call>): Boolean =
joinableCallsByConversationId.containsKey(conversation.id) && isSelfUserMember

private fun parseConnectionEventType(connectionState: ConnectionState) =
if (connectionState == ConnectionState.SENT) {
BadgeEventType.SentConnectRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ import com.wire.kalium.logic.feature.call.usecase.ObserveCallQualityDataUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveConferenceCallingEnabledUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveInCallReactionsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveJoinableCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveLastActiveCallWithSortedParticipantsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveOngoingCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveOutgoingCallUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveSpeakerUseCase
import com.wire.kalium.logic.feature.call.usecase.RejectCallUseCase
Expand Down Expand Up @@ -132,7 +132,7 @@ class CallingViewModelFactory @Inject constructor(
private val flipToBackCamera: FlipToBackCameraUseCase,
private val observeSpeaker: ObserveSpeakerUseCase,
private val userTypeMapper: UserTypeMapper,
private val observeOngoingCalls: ObserveOngoingCallsUseCase,
private val observeJoinableCalls: ObserveJoinableCallsUseCase,
private val observeParticipantsForConversation: ObserveParticipantsForConversationUseCase,
private val observeSyncState: ObserveSyncStateUseCase,
private val isConferenceCallingEnabled: IsEligibleToStartCallUseCase,
Expand Down Expand Up @@ -219,7 +219,7 @@ class CallingViewModelFactory @Inject constructor(
fun conversationCallViewModel(savedStateHandle: SavedStateHandle) = ConversationCallViewModel(
savedStateHandle = savedStateHandle,
currentAccount = currentAccount,
observeOngoingCalls = observeOngoingCalls,
observeJoinableCalls = observeJoinableCalls,
observeEstablishedCalls = observeEstablishedCalls,
observeParticipantsForConversation = observeParticipantsForConversation,
answerCall = answerCall,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.wire.android.util.ui.UiTextResolver
import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.channels.ObserveChannelsCreationPermissionUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveJoinableCallsUseCase
import com.wire.kalium.logic.feature.client.IsWireCellsEnabledUseCase
import com.wire.kalium.logic.feature.client.NeedsToRegisterClientUseCase
import com.wire.kalium.logic.feature.conversation.ObserveArchivedUnreadConversationsCountUseCase
Expand Down Expand Up @@ -77,6 +78,7 @@ class HomeViewModelFactory @Inject constructor(
private val disableAppLockUseCase: Lazy<DisableAppLockUseCase>,
private val getConversationsPaginated: GetConversationsFromSearchUseCase,
private val observeConversationListDetailsWithEvents: ObserveConversationListDetailsWithEventsUseCase,
private val observeJoinableCalls: ObserveJoinableCallsUseCase,
private val refreshUsersWithoutMetadata: RefreshUsersWithoutMetadataUseCase,
private val refreshConversationsWithoutMetadata: RefreshConversationsWithoutMetadataUseCase,
private val observeLegalHoldStateForSelfUser: ObserveLegalHoldStateForSelfUserUseCase,
Expand Down Expand Up @@ -140,6 +142,7 @@ class HomeViewModelFactory @Inject constructor(
userTypeMapper = userTypeMapper,
getSelfTeamId = getSelfTeamId,
uiTextResolver = uiTextResolver,
observeJoinableCalls = observeJoinableCalls,
)

fun newConversationViewModel() = NewConversationViewModel(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import com.wire.kalium.logic.feature.call.usecase.EndCallUseCase
import com.wire.kalium.logic.feature.call.usecase.IsEligibleToStartCallUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveConferenceCallingEnabledUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveOngoingCallsUseCase
import com.wire.kalium.logic.feature.call.usecase.ObserveJoinableCallsUseCase
import com.wire.kalium.logic.feature.conversation.ObserveConversationDetailsUseCase
import com.wire.kalium.logic.feature.conversation.ObserveDegradedConversationNotifiedUseCase
import com.wire.kalium.logic.feature.conversation.SetUserInformedAboutVerificationUseCase
Expand All @@ -51,7 +51,7 @@ import kotlinx.coroutines.launch
class ConversationCallViewModel(
val savedStateHandle: SavedStateHandle,
currentAccount: UserId,
private val observeOngoingCalls: ObserveOngoingCallsUseCase,
private val observeJoinableCalls: ObserveJoinableCallsUseCase,
private val observeEstablishedCalls: ObserveEstablishedCallsUseCase,
private val observeParticipantsForConversation: ObserveParticipantsForConversationUseCase,
private val answerCall: AnswerCallUseCase,
Expand Down Expand Up @@ -107,8 +107,8 @@ class ConversationCallViewModel(
}

private fun listenOngoingCall() = viewModelScope.launch {
combine(observeOngoingCalls(), observeConversationDetails(conversationId)) { calls, conversationDetailsResult ->
val hasOngoingCall = calls.any { call -> call.conversationId == conversationId }
combine(observeJoinableCalls(), observeConversationDetails(conversationId)) { callsByConversationId, conversationDetailsResult ->
val hasOngoingCall = callsByConversationId.containsKey(conversationId)
Comment thread
MohamadJaara marked this conversation as resolved.
// valid conversation is a conversation where the user is a member and it's not deleted
val validConversation = when (conversationDetailsResult) {
is ObserveConversationDetailsUseCase.Result.Success -> {
Expand Down
Loading
Loading