From 8dde688e12d673bf8f8df8e6b673c37e9dae9acf Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Thu, 2 Nov 2023 19:44:34 +0200 Subject: [PATCH] Change qr logic --- .../verify/VerifySessionDialogFragment.kt | 6 ++-- .../verify/VerifySessionViewModel.kt | 33 ++++++++----------- .../org/futo/circles/auth/model/QrState.kt | 6 ++-- auth/src/main/res/values/strings.xml | 2 +- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionDialogFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionDialogFragment.kt index 50e0b5ff9..57502b486 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionDialogFragment.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionDialogFragment.kt @@ -65,7 +65,7 @@ class VerifySessionDialogFragment : view?.postDelayed({ onBackPressed() }, CLOSE_DELAY) } - is QrLoading -> handelQrLoading(qrState.deviceId) + is QrLoading -> handelQrLoading() is QrReady -> handelQrReady(qrState.qrText) is QrSuccess -> { showSuccess(getString(R.string.session_verified)) @@ -85,12 +85,12 @@ class VerifySessionDialogFragment : } } - private fun handelQrLoading(deviceId: String) { + private fun handelQrLoading() { with(binding) { vLoading.visible() ivQr.visibility = View.INVISIBLE btnVerify.isEnabled = false - tvMessage.text = getString(R.string.waiting_for_verification_format, deviceId) + tvMessage.text = getString(R.string.waiting_for_other_device_verification) } } diff --git a/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionViewModel.kt b/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionViewModel.kt index cdf4768c2..ff3a6a62b 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionViewModel.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/active_sessions/verify/VerifySessionViewModel.kt @@ -38,9 +38,8 @@ class VerifySessionViewModel @Inject constructor( VerificationMethod.QR_CODE_SCAN ) - val qrStateLiveData: MutableLiveData<QrState> = MutableLiveData(QrLoading(deviceId)) - - private var qrTransaction: QrCodeVerificationTransaction? = null + val qrStateLiveData: MutableLiveData<QrState> = MutableLiveData(QrLoading) + private var qrTransactionId: String = "" init { session.cryptoService().verificationService().requestEventFlow() @@ -48,8 +47,10 @@ class VerifySessionViewModel @Inject constructor( .onEach { when (it) { is VerificationEvent.RequestAdded -> confirmIncomingRequest(it.request) - is VerificationEvent.RequestUpdated -> confirmIncomingRequest(it.request) - + is VerificationEvent.RequestUpdated -> { + qrTransactionId = it.transactionId + it.request.qrCodeText?.let { qrStateLiveData.postValue(QrReady(it)) } + } is VerificationEvent.TransactionAdded -> transactionUpdated(it.transaction) is VerificationEvent.TransactionUpdated -> transactionUpdated(it.transaction) } @@ -62,35 +63,29 @@ class VerifySessionViewModel @Inject constructor( private fun transactionUpdated(tx: VerificationTransaction) { val transaction = (tx as? QrCodeVerificationTransaction) ?: return when (transaction.state()) { - QRCodeVerificationState.Reciprocated -> launchBg { qrTransaction?.otherUserScannedMyQrCode() } QRCodeVerificationState.Done -> qrStateLiveData.postValue(QrSuccess) QRCodeVerificationState.Cancelled -> qrStateLiveData.postValue(QrCanceled) - else -> { - qrTransaction = transaction - qrTransaction?.qrCodeText?.let { qrStateLiveData.postValue(QrReady(it)) } - } + else -> launchBg { transaction.otherUserScannedMyQrCode() } } } - override fun onCleared() { - qrTransaction = null - super.onCleared() - } - fun onQrScanned(data: String) { launchBg { session.cryptoService().verificationService().reciprocateQRVerification( - qrTransaction?.otherUserId ?: "", - qrTransaction?.transactionId ?: "", - data + session.myUserId, qrTransactionId, data ) } } private fun initVerification() { launchBg { - if (session.cryptoService().crossSigningService().isCrossSigningVerified()) + if (session.cryptoService().crossSigningService().isCrossSigningVerified()) { requestKeyVerification() + } else { + val request = session.cryptoService().verificationService() + .getExistingVerificationRequests(session.myUserId).lastOrNull { it.isIncoming } + request?.let { confirmIncomingRequest(it) } + } } } diff --git a/auth/src/main/java/org/futo/circles/auth/model/QrState.kt b/auth/src/main/java/org/futo/circles/auth/model/QrState.kt index 10914fa7b..882e78756 100644 --- a/auth/src/main/java/org/futo/circles/auth/model/QrState.kt +++ b/auth/src/main/java/org/futo/circles/auth/model/QrState.kt @@ -2,11 +2,9 @@ package org.futo.circles.auth.model sealed class QrState -data class QrLoading(val deviceId: String) : QrState() +data object QrLoading : QrState() -data class QrReady( - val qrText: String -) : QrState() +data class QrReady(val qrText: String) : QrState() data object QrSuccess : QrState() diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml index 26b6a9577..70e3c137c 100644 --- a/auth/src/main/res/values/strings.xml +++ b/auth/src/main/res/values/strings.xml @@ -111,7 +111,7 @@ <string name="invalid_auth">Invalid auth</string> <string name="scan_with_one_of_devices_message">Scan QR code with one of your devices to finish verification</string> <string name="cross_signed">cross signed</string> - <string name="waiting_for_verification_format">Waiting for %s to start verification</string> + <string name="waiting_for_other_device_verification">Waiting for other device to start verification</string> <string name="session_verified">Session verified</string> <string name="verification_canceled">Verification canceled</string> <string name="active_login_sessions">Active login sessions</string> -- GitLab