diff --git a/android/src/main/java/io/parity/signer/domain/backend/UniffiInteractor.kt b/android/src/main/java/io/parity/signer/domain/backend/UniffiInteractor.kt index 83d3eec11d..4f96c32685 100644 --- a/android/src/main/java/io/parity/signer/domain/backend/UniffiInteractor.kt +++ b/android/src/main/java/io/parity/signer/domain/backend/UniffiInteractor.kt @@ -18,6 +18,7 @@ import io.parity.signer.uniffi.* import kotlinx.coroutines.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.collectLatest +import java.lang.RuntimeException /** * Wrapper for uniffi calls into rust. Made for centralized handling errors @@ -373,6 +374,22 @@ fun UniffiResult.mapError(): T? { } } +/** + * Dangerous cast to non error so we can see a reason in crash logs + */ +@Deprecated("Handle error state") +fun UniffiResult.mapErrorForce(): T { + return when (this) { + is UniffiResult.Error -> { + throw RuntimeException("uniffi interaction exception $error") + } + + is UniffiResult.Success -> { + result + } + } +} + fun UniffiResult.toOperationResult(): OperationResult { return when (this) { is UniffiResult.Error -> OperationResult.Err(this.error) diff --git a/android/src/main/java/io/parity/signer/domain/usecases/AllNetworksUseCase.kt b/android/src/main/java/io/parity/signer/domain/usecases/AllNetworksUseCase.kt index 2548df3052..307c19360b 100644 --- a/android/src/main/java/io/parity/signer/domain/usecases/AllNetworksUseCase.kt +++ b/android/src/main/java/io/parity/signer/domain/usecases/AllNetworksUseCase.kt @@ -3,14 +3,15 @@ package io.parity.signer.domain.usecases import io.parity.signer.domain.NetworkModel import io.parity.signer.domain.backend.UniffiInteractor import io.parity.signer.domain.backend.mapError +import io.parity.signer.domain.backend.mapErrorForce import kotlinx.coroutines.runBlocking class AllNetworksUseCase(val uniffiInteractor: UniffiInteractor) { - private var allNetworks: List = runBlocking { getNetworks() }!! + private var allNetworks: List = runBlocking { getNetworks() } fun updateCache(): Unit { - allNetworks = runBlocking { getNetworks() }!! + allNetworks = runBlocking { getNetworks() } } fun getAllNetworks(): List = allNetworks @@ -20,7 +21,7 @@ class AllNetworksUseCase(val uniffiInteractor: UniffiInteractor) { fun getDefaultPreselectedNetworks(): List = allNetworks .filter { preselectedkeys.contains(it.title) } - private suspend fun getNetworks(): List? { - return uniffiInteractor.getAllNetworks().mapError() + private suspend fun getNetworks(): List { + return uniffiInteractor.getAllNetworks().mapErrorForce() } } diff --git a/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetBackupStepSubgraph.kt b/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetBackupStepSubgraph.kt index 724956d0bf..1fa0fa9452 100644 --- a/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetBackupStepSubgraph.kt +++ b/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetBackupStepSubgraph.kt @@ -17,7 +17,9 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import io.parity.signer.domain.backend.toOperationResult import io.parity.signer.domain.popUpToTop +import io.parity.signer.screens.error.handleErrorAppState import io.parity.signer.screens.keysets.create.backupstepscreens.NewKeySetBackupBottomSheet import io.parity.signer.screens.keysets.create.backupstepscreens.NewKeySetBackupScreen import io.parity.signer.screens.keysets.create.backupstepscreens.NewKeySetSelectNetworkScreen @@ -37,10 +39,7 @@ fun NewKeysetSubgraph( mutableStateOf("") } val seedPhrase = rememberSaveable() { - vm.createNewSeedPhrase() ?: run { - coreNavController.popBackStack() - "" - } + vm.createNewSeedPhrase().toOperationResult().handleErrorAppState(coreNavController) ?: "" } NavHost( diff --git a/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetNameViewModel.kt b/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetNameViewModel.kt index c9644611ce..980d521a8c 100644 --- a/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetNameViewModel.kt +++ b/android/src/main/java/io/parity/signer/screens/keysets/create/NewKeysetNameViewModel.kt @@ -2,7 +2,7 @@ package io.parity.signer.screens.keysets.create import androidx.lifecycle.ViewModel import io.parity.signer.dependencygraph.ServiceLocator -import io.parity.signer.domain.backend.mapError +import io.parity.signer.domain.backend.UniffiResult import kotlinx.coroutines.runBlocking @@ -13,9 +13,9 @@ class NewKeysetNameViewModel : ViewModel() { val seedNames = ServiceLocator.seedStorage.lastKnownSeedNames - fun createNewSeedPhrase(): String? { + fun createNewSeedPhrase(): UniffiResult { return runBlocking { - uniffi.createNewSeedPhrase().mapError() + uniffi.createNewSeedPhrase() } } }