From 6692f34b0b99a6e49f9a44acc9db545928393365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 14 Mar 2025 00:57:59 -0400 Subject: [PATCH] linkdevice: handle addDevice errors Change-Id: I4b3e39cec92ab1ea2592ecfea1402646fe014096 --- .../viewmodel/ExportSideViewModel.kt | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/jami-android/app/src/main/java/cx/ring/linkdevice/viewmodel/ExportSideViewModel.kt b/jami-android/app/src/main/java/cx/ring/linkdevice/viewmodel/ExportSideViewModel.kt index 9a45ee21a..de1dfa611 100644 --- a/jami-android/app/src/main/java/cx/ring/linkdevice/viewmodel/ExportSideViewModel.kt +++ b/jami-android/app/src/main/java/cx/ring/linkdevice/viewmodel/ExportSideViewModel.kt @@ -55,6 +55,7 @@ class ExportSideViewModel @Inject constructor( private val _uiState = MutableStateFlow<AddDeviceExportState>(AddDeviceExportState.Init()) val uiState: StateFlow<AddDeviceExportState> = _uiState.asStateFlow() + private val accountId = accountService.currentAccount!!.accountId private var operationId: Long? = null private var compositeDisposable = CompositeDisposable() @@ -66,35 +67,39 @@ class ExportSideViewModel @Inject constructor( || (jamiAuthentication.length != 59) ) { Log.w(TAG, "Invalid input: $jamiAuthentication") - _uiState.value = - AddDeviceExportState.Init() // If state is unchanged, error is not emitted again. + // If state is unchanged, error is not emitted again. + _uiState.value = AddDeviceExportState.Init() _uiState.value = AddDeviceExportState.Init(ExportSideInputError.INVALID_INPUT) return } - operationId = accountService - .addDevice(accountService.currentAccount!!.accountId, jamiAuthentication) + val operationId = accountService.addDevice(accountId, jamiAuthentication) + if (operationId < 0) { + Log.e(TAG, "Failed to add device: $jamiAuthentication $operationId") + _uiState.value = when (operationId) { + -1L -> AddDeviceExportState.Init(ExportSideInputError.INVALID_INPUT) + else -> AddDeviceExportState.Done(AuthError.UNKNOWN) + } + return + } + this.operationId = operationId assert(compositeDisposable.size() == 0) // Should not have any subscription. accountService.authResultObservable - .filter { - it.accountId == accountService.currentAccount?.accountId - && it.operationId == operationId - } + .filter { it.accountId == accountId && it.operationId == operationId } .observeOn(mUiScheduler) - .subscribe { it: AuthResult -> - updateAuthState(it) - }.apply { compositeDisposable.add(this) } + .subscribe(this::updateAuthState) + .apply { compositeDisposable.add(this) } } fun onIdentityConfirmation() { - accountService.confirmAddDevice(accountService.currentAccount!!.accountId, operationId!!) + accountService.confirmAddDevice(accountId, operationId!!) } fun onCancel() { val operationId = operationId ?: return - accountService.cancelAddDevice(accountService.currentAccount!!.accountId, operationId) + accountService.cancelAddDevice(accountId, operationId) } // There is no token to be received in export side. @@ -103,7 +108,6 @@ class ExportSideViewModel @Inject constructor( } override fun onConnectingSignal() { - // Nothing to do here. _uiState.value = AddDeviceExportState.Connecting } -- GitLab