diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt index 8a5f77a81e..b272660a28 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt @@ -119,7 +119,8 @@ class QrCodeLoginFlowNode( is QrLoginException.Cancelled -> { backstack.replace(NavTarget.Error(QrCodeErrorScreenType.Cancelled)) } - is QrLoginException.Expired -> { + is QrLoginException.Expired, + is QrLoginException.NotFound -> { backstack.replace(NavTarget.Error(QrCodeErrorScreenType.Expired)) } is QrLoginException.Declined -> { @@ -138,7 +139,9 @@ class QrCodeLoginFlowNode( Timber.e(error, "OIDC metadata is invalid") backstack.replace(NavTarget.Error(QrCodeErrorScreenType.UnknownError)) } - else -> { + QrLoginException.CheckCodeAlreadySent, + QrLoginException.CheckCodeCannotBeSent, + QrLoginException.Unknown -> { Timber.e(error, "Unknown error found") backstack.replace(NavTarget.Error(QrCodeErrorScreenType.UnknownError)) } diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt index 32ebe668ef..9d2628005c 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt @@ -61,6 +61,9 @@ class QrCodeLoginFlowNodeTest { qrCodeLoginManager.currentLoginStep.value = QrCodeLoginStep.Failed(QrLoginException.Expired) assertThat(flowNode.currentNavTarget()).isEqualTo(QrCodeLoginFlowNode.NavTarget.Error(QrCodeErrorScreenType.Expired)) + qrCodeLoginManager.currentLoginStep.value = QrCodeLoginStep.Failed(QrLoginException.NotFound) + assertThat(flowNode.currentNavTarget()).isEqualTo(QrCodeLoginFlowNode.NavTarget.Error(QrCodeErrorScreenType.Expired)) + qrCodeLoginManager.currentLoginStep.value = QrCodeLoginStep.Failed(QrLoginException.Declined) assertThat(flowNode.currentNavTarget()).isEqualTo(QrCodeLoginFlowNode.NavTarget.Error(QrCodeErrorScreenType.Declined)) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/QrLoginException.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/QrLoginException.kt index c81437eff0..5445c7e7fe 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/QrLoginException.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/QrLoginException.kt @@ -13,6 +13,7 @@ sealed class QrLoginException : Exception() { data object ConnectionInsecure : QrLoginException() data object Declined : QrLoginException() data object Expired : QrLoginException() + data object NotFound : QrLoginException() data object LinkingNotSupported : QrLoginException() data object OidcMetadataInvalid : QrLoginException() data object SlidingSyncNotAvailable : QrLoginException() @@ -20,5 +21,4 @@ sealed class QrLoginException : Exception() { data object CheckCodeAlreadySent : QrLoginException() data object CheckCodeCannotBeSent : QrLoginException() data object Unknown : QrLoginException() - data object NotFound : QrLoginException() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/QrErrorMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/QrErrorMapper.kt index 65e15b5f2b..701d1a0bbb 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/QrErrorMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/QrErrorMapper.kt @@ -38,6 +38,7 @@ object QrErrorMapper { is RustHumanQrLoginException.ConnectionInsecure -> QrLoginException.ConnectionInsecure is RustHumanQrLoginException.Declined -> QrLoginException.Declined is RustHumanQrLoginException.Expired -> QrLoginException.Expired + is RustHumanQrLoginException.NotFound -> QrLoginException.NotFound is RustHumanQrLoginException.OtherDeviceNotSignedIn -> QrLoginException.OtherDeviceNotSignedIn is RustHumanQrLoginException.LinkingNotSupported -> QrLoginException.LinkingNotSupported is RustHumanQrLoginException.Unknown -> QrLoginException.Unknown @@ -45,6 +46,5 @@ object QrErrorMapper { is RustHumanQrLoginException.SlidingSyncNotAvailable -> QrLoginException.SlidingSyncNotAvailable is RustHumanQrLoginException.CheckCodeAlreadySent -> QrLoginException.CheckCodeAlreadySent is RustHumanQrLoginException.CheckCodeCannotBeSent -> QrLoginException.CheckCodeCannotBeSent - is RustHumanQrLoginException.NotFound -> QrLoginException.NotFound } }