Enforce HS disabling E2EE in DM creation too (Element Pro) (#7292)

This part was missing from the implementation of this Element Pro feature, which incorrectly only applied to rooms.
This commit is contained in:
Jorge Martin Espinosa
2026-07-29 11:17:41 +02:00
committed by GitHub
parent 00dcf48f28
commit 674354b1a6
8 changed files with 50 additions and 10 deletions
@@ -84,7 +84,7 @@ interface MatrixClient {
suspend fun ignoreUser(userId: UserId): Result<Unit>
suspend fun unignoreUser(userId: UserId): Result<Unit>
suspend fun createRoom(createRoomParams: CreateRoomParameters): Result<RoomId>
suspend fun createDM(userId: UserId): Result<RoomId>
suspend fun createDM(userId: UserId, isEncrypted: Boolean): Result<RoomId>
suspend fun getProfile(userId: UserId): Result<MatrixUser>
suspend fun searchUsers(searchTerm: String, limit: Long): Result<MatrixSearchUserResults>
suspend fun setDisplayName(displayName: String): Result<Unit>
@@ -18,6 +18,7 @@ import io.element.android.libraries.matrix.api.core.UserId
suspend fun MatrixClient.startDM(
userId: UserId,
createIfDmDoesNotExist: Boolean,
isEncryped: Boolean,
): StartDMResult {
return findDM(userId)
.fold(
@@ -25,7 +26,7 @@ suspend fun MatrixClient.startDM(
if (existingDM != null) {
StartDMResult.Success(existingDM, isNew = false)
} else if (createIfDmDoesNotExist) {
createDM(userId).fold(
createDM(userId, isEncryped).fold(
{ StartDMResult.Success(it, isNew = true) },
{ StartDMResult.Failure(it) }
)
@@ -430,10 +430,10 @@ class RustMatrixClient(
}
}
override suspend fun createDM(userId: UserId): Result<RoomId> {
override suspend fun createDM(userId: UserId, isEncrypted: Boolean): Result<RoomId> {
val createRoomParams = CreateRoomParameters(
name = null,
isEncrypted = true,
isEncrypted = isEncrypted,
isDirect = true,
visibility = RoomVisibility.Private,
preset = RoomPreset.TRUSTED_PRIVATE_CHAT,
@@ -132,7 +132,7 @@ class RustMatrixClientTest {
client = FakeFfiClient(createRoomResult = createRoomLambda)
)
client.createDM(A_USER_ID)
client.createDM(userId = A_USER_ID, isEncrypted = true)
createRoomLambda.assertions().isCalledOnce()
assertThat(createParameters?.historyVisibilityOverride).isEqualTo(RoomHistoryVisibility.Invited)
@@ -145,7 +145,7 @@ class FakeMatrixClient(
override val userProfile: StateFlow<MatrixUser> = _userProfile
var createRoomResult: (CreateRoomParameters) -> Result<RoomId> = { Result.success(A_ROOM_ID) }
private var createDmResult: Result<RoomId> = Result.success(A_ROOM_ID)
var createDmResult: (UserId, Boolean) -> Result<RoomId> = { _, _ -> Result.success(A_ROOM_ID) }
private var findDmResult: Result<RoomId?> = Result.success(A_ROOM_ID)
private val getRoomResults = mutableMapOf<RoomId, BaseRoom>()
private val searchUserResults = mutableMapOf<String, Result<MatrixSearchUserResults>>()
@@ -196,8 +196,8 @@ class FakeMatrixClient(
return createRoomResult(createRoomParams)
}
override suspend fun createDM(userId: UserId): Result<RoomId> = simulateLongTask {
return createDmResult
override suspend fun createDM(userId: UserId, isEncrypted: Boolean): Result<RoomId> = simulateLongTask {
return createDmResult(userId, isEncrypted)
}
override suspend fun getProfile(userId: UserId): Result<MatrixUser> {
@@ -301,7 +301,7 @@ class FakeMatrixClient(
}
fun givenCreateDmResult(result: Result<RoomId>) {
createDmResult = result
createDmResult = { _, _ -> result }
}
fun givenFindDmResult(result: Result<RoomId?>) {