Adapt to new DM definition changes in the SDK (#6748)
* Set `DmRoomDefinition.TwoPeople` in `ClientBuilder`. This applies the 'direct and with at most 2 non-service members' rule to what the SDK should consider a DM. * Map `RoomInfo.isDm` from the SDK * Map `NotificationData.isDm` from `NotificationInfo.roomInfo.isDm` * Remove `RoomIsDmCheck` file as its extension functions are now redundant. Move `Room.isDm` helper function to `BaseRoom`. * Map `isDm` in `SpaceRoom` from the SDK too * Replace `isDirect` with `isDm` where possible * Map `RoomMember.isServiceMember` from the SDK and use it to tell apart normal members of a room from service members (i.e. `RoomMembersState.getDirectRoomMember`)
This commit is contained in:
parent
5e5e0bbc6e
commit
11476c73cf
66 changed files with 115 additions and 232 deletions
|
|
@ -14,7 +14,6 @@ import io.element.android.libraries.core.extensions.runCatchingExceptions
|
|||
import io.element.android.libraries.matrix.api.MatrixClientProvider
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider
|
||||
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
||||
import io.element.android.services.appnavstate.api.ActiveRoomsHolder
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
|||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||
import io.element.android.libraries.matrix.api.room.CallIntentConsensus
|
||||
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.roomlist.LatestEventValue
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ package io.element.android.features.invite.api
|
|||
import android.os.Parcelable
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo
|
||||
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
|
|
|||
|
|
@ -540,7 +540,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun `present - suggestions are loaded from recent direct rooms`() = runTest {
|
||||
fun `present - suggestions are loaded from recent DM rooms`() = runTest {
|
||||
val dmRoomId = RoomId("!dm_room:server.org")
|
||||
val otherUserId = UserId("@frank:server.org")
|
||||
val matrixClient = FakeMatrixClient(sessionId = A_USER_ID).apply {
|
||||
|
|
@ -554,7 +554,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
|||
roomId = dmRoomId,
|
||||
initialRoomInfo = aRoomInfo(
|
||||
id = dmRoomId,
|
||||
isDirect = true,
|
||||
isDm = true,
|
||||
activeMembersCount = 2,
|
||||
currentUserMembership = CurrentUserMembership.JOINED,
|
||||
),
|
||||
|
|
@ -591,7 +591,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
|||
roomId = dmRoomId,
|
||||
initialRoomInfo = aRoomInfo(
|
||||
id = dmRoomId,
|
||||
isDirect = true,
|
||||
isDm = true,
|
||||
activeMembersCount = 2,
|
||||
currentUserMembership = CurrentUserMembership.JOINED,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
|||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
||||
import io.element.android.libraries.matrix.api.room.RoomMembershipDetails
|
||||
import io.element.android.libraries.matrix.api.room.RoomType
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRoom
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import io.element.android.libraries.matrix.api.MatrixClient
|
|||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.room.BaseRoom
|
||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.usersWithRole
|
||||
import io.element.android.libraries.push.api.notifications.conversations.NotificationConversationService
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ class LeaveBaseRoomPresenterTest {
|
|||
givenGetRoomResult(
|
||||
roomId = A_ROOM_ID,
|
||||
result = FakeBaseRoom().apply {
|
||||
givenRoomInfo(aRoomInfo(isDirect = true, activeMembersCount = 2))
|
||||
givenRoomInfo(aRoomInfo(isDm = true, activeMembersCount = 2))
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom
|
|||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
||||
import io.element.android.libraries.matrix.api.room.RoomMembersState
|
||||
import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
||||
import io.element.android.libraries.matrix.api.timeline.Timeline
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom
|
|||
import io.element.android.libraries.matrix.api.room.draft.ComposerDraft
|
||||
import io.element.android.libraries.matrix.api.room.draft.ComposerDraftType
|
||||
import io.element.android.libraries.matrix.api.room.getDirectRoomMember
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.use
|
||||
import io.element.android.libraries.matrix.api.timeline.TimelineException
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.toEventOrTransactionId
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ internal fun SuggestionsPickerViewPreview() {
|
|||
isIgnored = false,
|
||||
role = RoomMember.Role.User,
|
||||
membershipChangeReason = null,
|
||||
isServiceMember = false,
|
||||
)
|
||||
val anAlias = remember { RoomAlias("#room:domain.org") }
|
||||
SuggestionsPickerView(
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
|||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ import io.element.android.libraries.matrix.api.core.EventId
|
|||
import io.element.android.libraries.matrix.api.core.UniqueId
|
||||
import io.element.android.libraries.matrix.api.core.asEventId
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||
import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ class MessagesPresenterTest {
|
|||
baseRoom = FakeBaseRoom(
|
||||
roomPermissions = roomPermissions(),
|
||||
).apply {
|
||||
givenRoomInfo(aRoomInfo(isDirect = true, joinedMembersCount = 1, activeMembersCount = 1))
|
||||
givenRoomInfo(aRoomInfo(isDm = true, joinedMembersCount = 1, activeMembersCount = 1))
|
||||
},
|
||||
typingNoticeResult = { Result.success(Unit) },
|
||||
)
|
||||
|
|
@ -1112,7 +1112,7 @@ class MessagesPresenterTest {
|
|||
canRedactOwn = true,
|
||||
canPinUnpin = true,
|
||||
),
|
||||
initialRoomInfo = aRoomInfo(isDirect = true, isEncrypted = true)
|
||||
initialRoomInfo = aRoomInfo(isDm = true, isEncrypted = true)
|
||||
).apply {
|
||||
givenRoomMembersState(RoomMembersState.Ready(persistentListOf(aRoomMember(userId = A_SESSION_ID), aRoomMember(userId = A_USER_ID_2))))
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1066,7 +1066,7 @@ class MessageComposerPresenterTest {
|
|||
)
|
||||
givenRoomInfo(
|
||||
aRoomInfo(
|
||||
isDirect = true,
|
||||
isDm = true,
|
||||
activeMembersCount = 2,
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ class NotificationSettingsPresenter(
|
|||
notificationSettingsService.setDefaultRoomNotificationMode(
|
||||
isEncrypted = encryptedGroupDefaultMode != RoomNotificationMode.ALL_MESSAGES,
|
||||
mode = RoomNotificationMode.ALL_MESSAGES,
|
||||
isOneToOne = false,
|
||||
isDM = false,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -234,7 +234,7 @@ class NotificationSettingsPresenter(
|
|||
notificationSettingsService.setDefaultRoomNotificationMode(
|
||||
isEncrypted = encryptedOneToOneDefaultMode != RoomNotificationMode.ALL_MESSAGES,
|
||||
mode = RoomNotificationMode.ALL_MESSAGES,
|
||||
isOneToOne = true,
|
||||
isDM = true,
|
||||
)
|
||||
}
|
||||
}.fold(
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ class EditDefaultNotificationSettingNode(
|
|||
}
|
||||
|
||||
data class Inputs(
|
||||
val isOneToOne: Boolean
|
||||
val isDm: Boolean
|
||||
) : NodeInputs
|
||||
|
||||
private val callback: Callback = callback()
|
||||
private val inputs = inputs<Inputs>()
|
||||
private val presenter = presenterFactory.create(inputs.isOneToOne)
|
||||
private val presenter = presenterFactory.create(inputs.isDm)
|
||||
|
||||
@Composable
|
||||
override fun View(modifier: Modifier) {
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ import kotlin.time.Duration.Companion.seconds
|
|||
@AssistedInject
|
||||
class EditDefaultNotificationSettingPresenter(
|
||||
private val notificationSettingsService: NotificationSettingsService,
|
||||
@Assisted private val isOneToOne: Boolean,
|
||||
@Assisted private val isDm: Boolean,
|
||||
private val roomListService: RoomListService,
|
||||
) : Presenter<EditDefaultNotificationSettingState> {
|
||||
@AssistedFactory
|
||||
interface Factory {
|
||||
fun create(isOneToOne: Boolean): EditDefaultNotificationSettingPresenter
|
||||
fun create(isDm: Boolean): EditDefaultNotificationSettingPresenter
|
||||
}
|
||||
|
||||
private val collator = Collator.getInstance().apply {
|
||||
|
|
@ -86,7 +86,7 @@ class EditDefaultNotificationSettingPresenter(
|
|||
}
|
||||
|
||||
return EditDefaultNotificationSettingState(
|
||||
isOneToOne = isOneToOne,
|
||||
isOneToOne = isDm,
|
||||
mode = mode.value,
|
||||
roomsWithUserDefinedMode = roomsWithUserDefinedMode.value.toImmutableList(),
|
||||
changeNotificationSettingAction = changeNotificationSettingAction.value,
|
||||
|
|
@ -96,7 +96,7 @@ class EditDefaultNotificationSettingPresenter(
|
|||
}
|
||||
|
||||
private fun CoroutineScope.fetchSettings(mode: MutableState<RoomNotificationMode?>) = launch {
|
||||
mode.value = notificationSettingsService.getDefaultRoomNotificationMode(isEncrypted = true, isOneToOne = isOneToOne).getOrThrow()
|
||||
mode.value = notificationSettingsService.getDefaultRoomNotificationMode(isEncrypted = true, isOneToOne = isDm).getOrThrow()
|
||||
}
|
||||
|
||||
@OptIn(FlowPreview::class)
|
||||
|
|
@ -129,7 +129,7 @@ class EditDefaultNotificationSettingPresenter(
|
|||
val roomWithUserDefinedRules: Set<RoomId> = notificationSettingsService.getRoomsWithUserDefinedRules().getOrDefault(emptyList()).toSet()
|
||||
roomsWithUserDefinedMode.value = summaries
|
||||
.filter { roomSummary ->
|
||||
roomWithUserDefinedRules.contains(roomSummary.roomId) && roomSummary.isOneToOne == isOneToOne
|
||||
roomWithUserDefinedRules.contains(roomSummary.roomId) && roomSummary.isDm == isDm
|
||||
}
|
||||
.map { roomSummary ->
|
||||
EditNotificationSettingRoomInfo(
|
||||
|
|
@ -154,9 +154,9 @@ class EditDefaultNotificationSettingPresenter(
|
|||
private fun CoroutineScope.setDefaultNotificationMode(mode: RoomNotificationMode, action: MutableState<AsyncAction<Unit>>) = launch {
|
||||
action.runUpdatingStateNoSuccess {
|
||||
// On modern clients, we don't have different settings for encrypted and non-encrypted rooms (Legacy clients did).
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = true, mode = mode, isOneToOne = isOneToOne)
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = true, mode = mode, isDM = isDm)
|
||||
.map {
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = false, mode = mode, isOneToOne = isOneToOne)
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = false, mode = mode, isDM = isDm)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ class EditDefaultNotificationSettingsPresenterTest {
|
|||
): EditDefaultNotificationSettingPresenter {
|
||||
return EditDefaultNotificationSettingPresenter(
|
||||
notificationSettingsService = notificationSettingsService,
|
||||
isOneToOne = false,
|
||||
isDm = false,
|
||||
roomListService = roomListService,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ class NotificationSettingsPresenterTest {
|
|||
val notificationSettingsService = FakeNotificationSettingsService()
|
||||
val presenter = createNotificationSettingsPresenter(notificationSettingsService)
|
||||
presenter.test {
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = true, isOneToOne = false, mode = RoomNotificationMode.ALL_MESSAGES)
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = false, isOneToOne = false, mode = RoomNotificationMode.ALL_MESSAGES)
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = true, isDM = false, mode = RoomNotificationMode.ALL_MESSAGES)
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(isEncrypted = false, isDM = false, mode = RoomNotificationMode.ALL_MESSAGES)
|
||||
val updatedState = consumeItemsUntilPredicate {
|
||||
(it.matrixSettings as? NotificationSettingsState.MatrixSettings.Valid)
|
||||
?.defaultGroupNotificationMode == RoomNotificationMode.ALL_MESSAGES
|
||||
|
|
@ -79,12 +79,12 @@ class NotificationSettingsPresenterTest {
|
|||
presenter.test {
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(
|
||||
isEncrypted = true,
|
||||
isOneToOne = false,
|
||||
isDM = false,
|
||||
mode = RoomNotificationMode.ALL_MESSAGES
|
||||
)
|
||||
notificationSettingsService.setDefaultRoomNotificationMode(
|
||||
isEncrypted = false,
|
||||
isOneToOne = false,
|
||||
isDM = false,
|
||||
mode = RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY
|
||||
)
|
||||
val updatedState = consumeItemsUntilPredicate {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ import io.element.android.libraries.architecture.Presenter
|
|||
import io.element.android.libraries.matrix.api.notification.CallIntent
|
||||
import io.element.android.libraries.matrix.api.room.CallIntentConsensus
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.canCall
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
||||
|
||||
|
|
|
|||
|
|
@ -89,10 +89,10 @@ class RoomCallStatePresenterTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun `present - initial state - when is direct room`() = runTest {
|
||||
fun `present - initial state - when is DM room`() = runTest {
|
||||
val room = FakeJoinedRoom(
|
||||
baseRoom = FakeBaseRoom(
|
||||
initialRoomInfo = aRoomInfo(isDirect = true),
|
||||
initialRoomInfo = aRoomInfo(isDm = true),
|
||||
roomPermissions = roomPermissions(true),
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
|
|||
import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.canEditRolesAndPermissions
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
|
||||
|
|
@ -53,7 +52,6 @@ import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
|||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.services.analytics.api.AnalyticsService
|
||||
import io.element.android.services.analyticsproviders.api.trackers.captureInteraction
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
|
@ -145,7 +143,7 @@ class RoomDetailsPresenter(
|
|||
}
|
||||
RoomDetailsEvent.UnmuteNotification -> {
|
||||
scope.launch(dispatchers.io) {
|
||||
notificationSettingsService.unmuteRoom(room.roomId, isEncrypted, room.isOneToOne)
|
||||
notificationSettingsService.unmuteRoom(room.roomId, isEncrypted, room.isDm())
|
||||
}
|
||||
}
|
||||
is RoomDetailsEvent.SetFavorite -> scope.setFavorite(event.isFavorite)
|
||||
|
|
@ -184,7 +182,7 @@ class RoomDetailsPresenter(
|
|||
isFavorite = isFavorite,
|
||||
displayRolesAndPermissionsSettings = !isDm && permissions.canEditRolesAndPermissions,
|
||||
isPublic = joinRule == JoinRule.Public,
|
||||
heroes = roomInfo.heroes.toImmutableList(),
|
||||
heroes = roomInfo.heroes,
|
||||
pinnedMessagesCount = pinnedMessagesCount,
|
||||
snackbarMessage = snackbarMessage,
|
||||
canShowKnockRequests = canShowKnockRequests,
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ fun aDmRoomMember(
|
|||
isIgnored: Boolean = false,
|
||||
role: RoomMember.Role = RoomMember.Role.User,
|
||||
membershipChangeReason: String? = null,
|
||||
isServiceMember: Boolean = false,
|
||||
) = RoomMember(
|
||||
userId = userId,
|
||||
displayName = displayName,
|
||||
|
|
@ -83,7 +84,8 @@ fun aDmRoomMember(
|
|||
powerLevel = powerLevel,
|
||||
isIgnored = isIgnored,
|
||||
role = role,
|
||||
membershipChangeReason = membershipChangeReason
|
||||
membershipChangeReason = membershipChangeReason,
|
||||
isServiceMember = isServiceMember,
|
||||
)
|
||||
|
||||
fun aRoomDetailsState(
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ fun aRoomMember(
|
|||
isIgnored: Boolean = false,
|
||||
role: RoomMember.Role = RoomMember.Role.User,
|
||||
membershipChangeReason: String? = null,
|
||||
isServiceMember: Boolean = false,
|
||||
) = RoomMember(
|
||||
userId = userId,
|
||||
displayName = displayName,
|
||||
|
|
@ -138,6 +139,7 @@ fun aRoomMember(
|
|||
isIgnored = isIgnored,
|
||||
role = role,
|
||||
membershipChangeReason = membershipChangeReason,
|
||||
isServiceMember = isServiceMember,
|
||||
)
|
||||
|
||||
fun aRoomMemberList() = persistentListOf(
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ class RoomNotificationSettingsPresenter(
|
|||
suspend {
|
||||
val isEncrypted = room.info().isEncrypted ?: room.getUpdatedIsEncrypted().getOrThrow()
|
||||
pendingModeState.value = null
|
||||
notificationSettingsService.getRoomNotificationSettings(room.roomId, isEncrypted, room.isOneToOne).getOrThrow()
|
||||
notificationSettingsService.getRoomNotificationSettings(room.roomId, isEncrypted, room.isDm()).getOrThrow()
|
||||
}.runCatchingUpdatingState(roomNotificationSettings)
|
||||
}
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ class RoomNotificationSettingsPresenter(
|
|||
val isEncrypted = room.info().isEncrypted ?: room.getUpdatedIsEncrypted().getOrThrow()
|
||||
defaultRoomNotificationMode.value = notificationSettingsService.getDefaultRoomNotificationMode(
|
||||
isEncrypted,
|
||||
room.isOneToOne
|
||||
room.isDm()
|
||||
).getOrThrow()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ class RoomDetailsPresenterTest {
|
|||
givenRoomInfo(
|
||||
aRoomInfo(
|
||||
isEncrypted = true,
|
||||
isDirect = true,
|
||||
isDm = true,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -284,7 +284,7 @@ class RoomDetailsPresenterTest {
|
|||
givenRoomInfo(
|
||||
aRoomInfo(
|
||||
isEncrypted = true,
|
||||
isDirect = true,
|
||||
isDm = true,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -307,7 +307,6 @@ class RoomDetailsPresenterTest {
|
|||
val myRoomMember = aRoomMember(A_SESSION_ID)
|
||||
val otherRoomMember = aRoomMember(A_USER_ID_2)
|
||||
val room = aJoinedRoom(
|
||||
isDirect = true,
|
||||
topic = null,
|
||||
roomPermissions = roomPermissions(),
|
||||
userDisplayNameResult = { Result.success(A_USER_NAME) },
|
||||
|
|
@ -325,7 +324,7 @@ class RoomDetailsPresenterTest {
|
|||
|
||||
givenRoomInfo(
|
||||
aRoomInfo(
|
||||
isDirect = true,
|
||||
isDm = true,
|
||||
activeMembersCount = 2,
|
||||
topic = null,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import io.element.android.libraries.matrix.api.MatrixClient
|
|||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.room.recent.getRecentlyVisitedRoomInfoFlow
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class LeaveSpacePresenter(
|
|||
.orEmpty()
|
||||
.partition { it.spaceRoom.roomId == leaveSpaceHandle.id }
|
||||
// By default select all rooms that can be left
|
||||
val otherRoomsExcludingDm = otherRooms.filter { it.spaceRoom.isDirect != true }
|
||||
val otherRoomsExcludingDm = otherRooms.filter { it.spaceRoom.isDm != true }
|
||||
selectedRoomIds = otherRoomsExcludingDm
|
||||
.filter { it.isLastOwner.not() }
|
||||
.map { it.spaceRoom.roomId }
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ private fun aSpaceInfo(
|
|||
avatarUrl = null,
|
||||
isPublic = true,
|
||||
isDirect = false,
|
||||
isDm = false,
|
||||
isEncrypted = false,
|
||||
joinRule = joinRule,
|
||||
isSpace = true,
|
||||
|
|
|
|||
|
|
@ -98,13 +98,13 @@ class LeaveSpacePresenterTest {
|
|||
listOf(
|
||||
aLeaveSpaceRoom(spaceRoom = aSpace),
|
||||
aLeaveSpaceRoom(
|
||||
spaceRoom = aSpaceRoom(roomId = A_ROOM_ID, isDirect = false)
|
||||
spaceRoom = aSpaceRoom(roomId = A_ROOM_ID, isDm = false)
|
||||
),
|
||||
aLeaveSpaceRoom(
|
||||
spaceRoom = aSpaceRoom(roomId = A_ROOM_ID_2, isDirect = true)
|
||||
spaceRoom = aSpaceRoom(roomId = A_ROOM_ID_2, isDm = true)
|
||||
),
|
||||
aLeaveSpaceRoom(
|
||||
spaceRoom = aSpaceRoom(roomId = A_ROOM_ID_3, isDirect = null)
|
||||
spaceRoom = aSpaceRoom(roomId = A_ROOM_ID_3, isDm = null)
|
||||
),
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue