mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
CurrentUserProviderImpl: ensure only one observer is set up for all threads
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
parent
25dd46f95a
commit
2e2d4a9ca3
@ -31,7 +31,12 @@ import javax.inject.Inject
|
||||
* Listens to changes in the database and provides the current user without needing to query the database everytime.
|
||||
*/
|
||||
class CurrentUserProviderImpl @Inject constructor(private val userManager: UserManager) : CurrentUserProviderNew {
|
||||
|
||||
private var _currentUser: User? = null
|
||||
|
||||
// synchronized to avoid multiple observers initialized from different threads
|
||||
@get:Synchronized
|
||||
@set:Synchronized
|
||||
private var currentUserObserver: Disposable? = null
|
||||
|
||||
override val currentUser: Maybe<User>
|
||||
@ -40,8 +45,10 @@ class CurrentUserProviderImpl @Inject constructor(private val userManager: UserM
|
||||
// immediately get a result synchronously
|
||||
_currentUser = userManager.currentUser.blockingGet()
|
||||
if (currentUserObserver == null) {
|
||||
// start observable for auto-updates
|
||||
currentUserObserver = userManager.currentUserObservable.subscribe { _currentUser = it }
|
||||
currentUserObserver = userManager.currentUserObservable
|
||||
.subscribe {
|
||||
_currentUser = it
|
||||
}
|
||||
}
|
||||
}
|
||||
return _currentUser?.let { Maybe.just(it) } ?: Maybe.empty()
|
||||
|
Loading…
Reference in New Issue
Block a user