diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt index 153b751d08..c494443f1b 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt @@ -99,7 +99,7 @@ class EditRoomAddressPresenter @AssistedInject constructor( suspend { val savedCanonicalAlias = room.canonicalAlias val savedAliasFromHomeserver = room.firstAliasMatching(serverName) - val newRoomAlias = client.roomAliasFromName(newRoomAddress).getOrThrow() + val newRoomAlias = client.roomAliasFromName(newRoomAddress) ?: throw IllegalArgumentException("Invalid room address") // First publish the new alias in the room directory room.publishRoomAliasInRoomDirectory(newRoomAlias).getOrThrow() diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index cae7ee1bad..a6cf5e5e70 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -7,7 +7,9 @@ package io.element.android.libraries.matrix.api +import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.matrix.api.core.DeviceId +import io.element.android.libraries.matrix.api.core.MatrixPatterns import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId @@ -172,11 +174,12 @@ fun MatrixClient.getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow { - return runCatching { - RoomAlias("#$name:${userIdServerName()}") - } +fun MatrixClient.roomAliasFromName(name: String): RoomAlias? { + return name.takeIf { it.isNotEmpty() } + ?.let { "#$it:${userIdServerName()}" } + ?.takeIf { MatrixPatterns.isRoomAlias(it) } + ?.let { tryOrNull { RoomAlias(it) } } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressValidityEffect.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressValidityEffect.kt index 73c14c50df..e6ef9de2d3 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressValidityEffect.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressValidityEffect.kt @@ -32,7 +32,7 @@ fun RoomAddressValidityEffect( } // debounce the room address validation delay(300) - val roomAlias = client.roomAliasFromName(newRoomAddress).getOrNull() + val roomAlias = client.roomAliasFromName(newRoomAddress) if (roomAlias == null || !roomAliasHelper.isRoomAliasValid(roomAlias)) { onChange(RoomAddressValidity.InvalidSymbols) } else {