diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 523496e317..a31f50ad8d 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -8,8 +8,7 @@
-
-
+
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
index 6e6eec1148..79ee123c2b 100644
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -1,6 +1,5 @@
-
\ No newline at end of file
diff --git a/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt b/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt
index 0d71813c7f..c66fb59a0b 100755
--- a/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt
+++ b/matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto/RustCryptoService.kt
@@ -196,9 +196,7 @@ internal class RustCryptoService @Inject constructor(
override suspend fun fetchDevicesList(): List {
val devicesList: List
withContext(coroutineDispatchers.io) {
- devicesList = tryOrNull {
- getDevicesTask.execute(Unit).devices
- }.orEmpty()
+ devicesList = getDevicesTask.execute(Unit).devices.orEmpty()
cryptoStore.saveMyDevicesInfo(devicesList)
}
return devicesList
@@ -247,7 +245,7 @@ internal class RustCryptoService @Inject constructor(
cryptoCoroutineScope.launch(coroutineDispatchers.io) {
cryptoStore.open()
// Just update
- fetchDevicesList()
+ tryOrNull { fetchDevicesList() }
cryptoStore.tidyUpDataBase()
}
}
diff --git a/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt
index 76b7d0e61c..28016f109f 100644
--- a/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt
@@ -40,6 +40,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.extensions.orFalse
+import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
import org.matrix.android.sdk.api.session.getUserOrDefault
@@ -101,7 +102,7 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
session.flow().liveUserCryptoDevices(session.myUserId),
session.flow().liveMyDevicesInfo(),
session.flow().liveCrossSigningPrivateKeys(),
- ) { cryptoList, infoList, pInfo ->
+ ) { cryptoList, infoList, pInfo ->
Timber.v("## Detector trigger ${cryptoList.map { "${it.deviceId} ${it.trustLevel}" }}")
Timber.v("## Detector trigger canCrossSign ${pInfo.get().selfSigned != null}")
@@ -146,13 +147,13 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
.sample(5_000)
.onEach {
// If we have a new crypto device change, we might want to trigger refresh of device info
- session.cryptoService().fetchDevicesList()
+ tryOrNull { session.cryptoService().fetchDevicesList() }
}
.launchIn(viewModelScope)
// trigger a refresh of lastSeen / last Ip
viewModelScope.launch {
- session.cryptoService().fetchDevicesList()
+ tryOrNull { session.cryptoService().fetchDevicesList() }
}
}
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt
index d9bd315de7..312fc0fa29 100644
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt
@@ -76,6 +76,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import me.gujun.android.span.span
import org.matrix.android.sdk.api.extensions.getFingerprintHumanReadable
+import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.api.session.crypto.crosssigning.isVerified
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
@@ -646,9 +647,11 @@ class VectorSettingsSecurityPrivacyFragment :
}
}
// TODO Move to a ViewModel...
- val devicesList = session.cryptoService().fetchDevicesList()
- withContext(Dispatchers.Main) {
- refreshCryptographyPreference(devicesList)
+ val devicesList = tryOrNull { session.cryptoService().fetchDevicesList() }
+ devicesList?.let {
+ withContext(Dispatchers.Main) {
+ refreshCryptographyPreference(it)
+ }
}
}
}
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt
index 25f18e8519..526a6006e1 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt
@@ -52,6 +52,7 @@ import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
import org.matrix.android.sdk.api.auth.registration.RegistrationFlowResponse
import org.matrix.android.sdk.api.auth.registration.nextUncompletedStage
import org.matrix.android.sdk.api.extensions.orFalse
+import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
@@ -190,7 +191,7 @@ class DevicesViewModel @AssistedInject constructor(
.sample(5_000)
.onEach {
// If we have a new crypto device change, we might want to trigger refresh of device info
- session.cryptoService().fetchDevicesList()
+ tryOrNull { session.cryptoService().fetchDevicesList() }
}
.launchIn(viewModelScope)
@@ -203,7 +204,7 @@ class DevicesViewModel @AssistedInject constructor(
refreshSource.stream().throttleFirst(4_000)
.onEach {
- session.cryptoService().fetchDevicesList()
+ tryOrNull { session.cryptoService().fetchDevicesList() }
session.cryptoService().downloadKeysIfNeeded(listOf(session.myUserId), true)
}
.launchIn(viewModelScope)
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesOnCryptoDevicesChangeUseCase.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesOnCryptoDevicesChangeUseCase.kt
index c837c21b85..6ca7cf9a12 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesOnCryptoDevicesChangeUseCase.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesOnCryptoDevicesChangeUseCase.kt
@@ -22,6 +22,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
+import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.flow.flow
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
@@ -40,7 +41,7 @@ class RefreshDevicesOnCryptoDevicesChangeUseCase @Inject constructor(
.sample(samplingPeriodMs)
.onEach {
// If we have a new crypto device change, we might want to trigger refresh of device info
- session.cryptoService().fetchDevicesList()
+ tryOrNull { session.cryptoService().fetchDevicesList() }
}
.collect()
}
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesUseCase.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesUseCase.kt
index 06f63d172a..aff681bf84 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesUseCase.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/RefreshDevicesUseCase.kt
@@ -17,6 +17,7 @@
package im.vector.app.features.settings.devices.v2
import im.vector.app.core.di.ActiveSessionHolder
+import org.matrix.android.sdk.api.extensions.tryOrNull
import javax.inject.Inject
class RefreshDevicesUseCase @Inject constructor(
@@ -24,7 +25,7 @@ class RefreshDevicesUseCase @Inject constructor(
) {
suspend fun execute() {
activeSessionHolder.getSafeActiveSession()?.let { session ->
- session.cryptoService().fetchDevicesList()
+ tryOrNull { session.cryptoService().fetchDevicesList() }
session.cryptoService().downloadKeysIfNeeded(listOf(session.myUserId), true)
}
}