Check homeserver when login using qr code (#4708)
* Login with Qr code: check homeserver validity * QrCode login, unauthorized homeserver: update copy. * Update screenshots * Add unit test on SdkQrCodeLoginData * Remove default param value. * Remember imageAnalysis --------- Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
parent
9825469912
commit
f1ca70fb9a
22 changed files with 208 additions and 30 deletions
|
|
@ -7,4 +7,6 @@
|
|||
|
||||
package io.element.android.libraries.matrix.api.auth.qrlogin
|
||||
|
||||
interface MatrixQrCodeLoginData
|
||||
interface MatrixQrCodeLoginData {
|
||||
fun serverName(): String?
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,4 +12,8 @@ import org.matrix.rustcomponents.sdk.QrCodeData as RustQrCodeData
|
|||
|
||||
class SdkQrCodeLoginData(
|
||||
internal val rustQrCodeData: RustQrCodeData,
|
||||
) : MatrixQrCodeLoginData
|
||||
) : MatrixQrCodeLoginData {
|
||||
override fun serverName(): String? {
|
||||
return rustQrCodeData.serverName()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright 2025 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.impl.auth.qrlogin
|
||||
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeQrCodeData
|
||||
import io.element.android.libraries.matrix.test.A_HOMESERVER_URL
|
||||
import org.junit.Test
|
||||
|
||||
class SdkQrCodeLoginDataTest {
|
||||
@Test
|
||||
fun `getServer reads the value from the Rust side, null case`() {
|
||||
val sut = SdkQrCodeLoginData(
|
||||
rustQrCodeData = FakeQrCodeData(
|
||||
serverNameResult = { null },
|
||||
),
|
||||
)
|
||||
assertThat(sut.serverName()).isNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getServer reads the value from the Rust side`() {
|
||||
val sut = SdkQrCodeLoginData(
|
||||
rustQrCodeData = FakeQrCodeData(
|
||||
serverNameResult = { A_HOMESERVER_URL },
|
||||
),
|
||||
)
|
||||
assertThat(sut.serverName()).isEqualTo(A_HOMESERVER_URL)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright 2025 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.impl.fixtures.fakes
|
||||
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
import org.matrix.rustcomponents.sdk.NoPointer
|
||||
import org.matrix.rustcomponents.sdk.QrCodeData
|
||||
|
||||
class FakeQrCodeData(
|
||||
private val serverNameResult: () -> String? = { lambdaError() },
|
||||
) : QrCodeData(NoPointer) {
|
||||
override fun serverName(): String? {
|
||||
return serverNameResult()
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.test.auth.qrlogin
|
|||
|
||||
import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData
|
||||
import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginDataFactory
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||
|
||||
class FakeMatrixQrCodeLoginDataFactory(
|
||||
|
|
@ -20,4 +21,8 @@ class FakeMatrixQrCodeLoginDataFactory(
|
|||
}
|
||||
}
|
||||
|
||||
class FakeMatrixQrCodeLoginData : MatrixQrCodeLoginData
|
||||
class FakeMatrixQrCodeLoginData(
|
||||
private val serverNameResult: () -> String? = { lambdaError() },
|
||||
) : MatrixQrCodeLoginData {
|
||||
override fun serverName() = serverNameResult()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,8 +44,8 @@ import kotlin.coroutines.suspendCoroutine
|
|||
@Composable
|
||||
fun QrCodeCameraView(
|
||||
onScanQrCode: (ByteArray) -> Unit,
|
||||
renderPreview: Boolean,
|
||||
modifier: Modifier = Modifier,
|
||||
renderPreview: Boolean = true,
|
||||
) {
|
||||
if (LocalInspectionMode.current) {
|
||||
Box(
|
||||
|
|
@ -62,9 +62,11 @@ fun QrCodeCameraView(
|
|||
var cameraProvider by remember { mutableStateOf<ProcessCameraProvider?>(null) }
|
||||
val previewUseCase = remember { Preview.Builder().build() }
|
||||
var lastFrame by remember { mutableStateOf<Bitmap?>(null) }
|
||||
val imageAnalysis = ImageAnalysis.Builder()
|
||||
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
|
||||
.build()
|
||||
val imageAnalysis = remember {
|
||||
ImageAnalysis.Builder()
|
||||
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
|
||||
.build()
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
cameraProvider = localContext.getCameraProvider()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue