From 7a2454d816a5ca108cf6b8db5f18f8d86dd3acaa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 12 Aug 2020 15:19:03 +0200 Subject: [PATCH] Fix refreshing of sessions list when another session is logged out Rx: use distinctUntilChanged() instead of distinct() --- CHANGES.md | 1 + .../crypto/model/rest/UploadSignatureQueryBuilder.kt | 7 ++----- .../crypto/recover/BootstrapAccountPasswordFragment.kt | 2 +- .../im/vector/app/features/home/ShortcutsHandler.kt | 2 +- .../home/UnknownDeviceDetectorSharedViewModel.kt | 5 +++-- .../app/features/settings/devices/DevicesViewModel.kt | 10 ++++++---- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index da1858c378..5c1685508c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ Bugfix 🐛: - Fix invisible toolbar (Status.im theme) (#1746) - Fix relative date time formatting (#822) - Fix crash reported by RageShake + - Fix refreshing of sessions list when another session is logged out Translations 🗣: - Add PlayStore description resources in the Triple-T format, to let Weblate handle them diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt index d2300be114..dbb2822cdd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt @@ -39,11 +39,8 @@ internal data class UploadSignatureQueryBuilder( fun build(): Map> { val map = HashMap>() - val usersList = ( - deviceInfoList.map { it.userId } - + signingKeyInfoList - .map { it.userId } - ).distinct() + val usersList = (deviceInfoList.map { it.userId } + signingKeyInfoList.map { it.userId }) + .distinct() usersList.forEach { userID -> val userMap = HashMap() diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapAccountPasswordFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapAccountPasswordFragment.kt index 744a2de761..ccf2d67701 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapAccountPasswordFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapAccountPasswordFragment.kt @@ -66,7 +66,7 @@ class BootstrapAccountPasswordFragment @Inject constructor( .disposeOnDestroyView() bootstrapAccountPasswordEditText.textChanges() - .distinct() + .distinctUntilChanged() .subscribe { if (!it.isNullOrBlank()) { bootstrapAccountPasswordTil.error = null diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt index 77446cdf60..ad0209845f 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt @@ -61,7 +61,7 @@ class ShortcutsHandler @Inject constructor( return homeRoomListStore .observe() - .distinct() + .distinctUntilChanged() .observeOn(Schedulers.computation()) .subscribe { rooms -> val shortcuts = rooms 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 bbe6953df6..eeb1639045 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 @@ -133,12 +133,13 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(@Assisted } session.rx().liveUserCryptoDevices(session.myUserId) - .distinct() + .distinctUntilChanged() .throttleLast(5_000, TimeUnit.MILLISECONDS) .subscribe { // If we have a new crypto device change, we might want to trigger refresh of device info session.cryptoService().fetchDevicesList(NoOpMatrixCallback()) - }.disposeOnClear() + } + .disposeOnClear() // trigger a refresh of lastSeen / last Ip session.cryptoService().fetchDevicesList(NoOpMatrixCallback()) 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 586dd41461..da6d838b76 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 @@ -113,7 +113,7 @@ class DevicesViewModel @AssistedInject constructor( } } ) - .distinct() + .distinctUntilChanged() .execute { async -> copy( devices = async @@ -137,12 +137,14 @@ class DevicesViewModel @AssistedInject constructor( // } session.rx().liveUserCryptoDevices(session.myUserId) - .distinct() - .throttleLast(5_000, TimeUnit.MILLISECONDS) + .map { it.size } + .distinctUntilChanged() + .throttleFirst(5_000, TimeUnit.MILLISECONDS) .subscribe { // If we have a new crypto device change, we might want to trigger refresh of device info session.cryptoService().fetchDevicesList(NoOpMatrixCallback()) - }.disposeOnClear() + } + .disposeOnClear() // session.rx().liveUserCryptoDevices(session.myUserId) // .execute {