diff --git a/CHANGES.md b/CHANGES.md index adfda09700..c167b8dbb1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,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-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt index e269f1a4e0..45efd125ee 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt @@ -71,7 +71,7 @@ class RxSession(private val session: Session) { } } - fun liveMyDeviceInfo(): Observable> { + fun liveMyDevicesInfo(): Observable> { return session.cryptoService().getLiveMyDevicesInfo().asObservable() .startWithCallable { session.cryptoService().getMyDevicesInfo() 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 18d396c83d..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 @@ -100,7 +100,7 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(@Assisted Observable.combineLatest, List, Optional, List>( session.rx().liveUserCryptoDevices(session.myUserId), - session.rx().liveMyDeviceInfo(), + session.rx().liveMyDevicesInfo(), session.rx().liveCrossSigningPrivateKeys(), Function3 { cryptoList, infoList, pInfo -> // Timber.v("## Detector trigger ${cryptoList.map { "${it.deviceId} ${it.trustLevel}" }}") @@ -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/crosssigning/CrossSigningSettingsViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsViewModel.kt index 9bf5347876..f2f108b3e4 100644 --- a/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsViewModel.kt @@ -37,10 +37,10 @@ class CrossSigningSettingsViewModel @AssistedInject constructor(@Assisted privat init { Observable.combineLatest, Optional, Pair, Optional>>( - session.rx().liveMyDeviceInfo(), + session.rx().liveMyDevicesInfo(), session.rx().liveCrossSigningInfo(session.myUserId), - BiFunction { myDeviceInfo, mxCrossSigningInfo -> - (myDeviceInfo to mxCrossSigningInfo) + BiFunction { myDevicesInfo, mxCrossSigningInfo -> + myDevicesInfo to mxCrossSigningInfo } ) .execute { data -> diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheetViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheetViewModel.kt index cd5b739322..6f5bd909c7 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheetViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheetViewModel.kt @@ -81,7 +81,7 @@ class DeviceVerificationInfoBottomSheetViewModel @AssistedInject constructor(@As copy(deviceInfo = Loading()) } - session.rx().liveMyDeviceInfo() + session.rx().liveMyDevicesInfo() .map { devices -> devices.firstOrNull { it.deviceId == deviceId } ?: DeviceInfo(deviceId = deviceId) } 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 511ece1e55..237c8c218d 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 @@ -103,7 +103,7 @@ class DevicesViewModel @AssistedInject constructor( Observable.combineLatest, List, List>( session.rx().liveUserCryptoDevices(session.myUserId), - session.rx().liveMyDeviceInfo(), + session.rx().liveMyDevicesInfo(), BiFunction { cryptoList, infoList -> infoList .sortedByDescending { it.lastSeenTs } @@ -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() + .map { it.size } + .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() // session.rx().liveUserCryptoDevices(session.myUserId) // .execute {