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.
|
* 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 {
|
class CurrentUserProviderImpl @Inject constructor(private val userManager: UserManager) : CurrentUserProviderNew {
|
||||||
|
|
||||||
private var _currentUser: User? = null
|
private var _currentUser: User? = null
|
||||||
|
|
||||||
|
// synchronized to avoid multiple observers initialized from different threads
|
||||||
|
@get:Synchronized
|
||||||
|
@set:Synchronized
|
||||||
private var currentUserObserver: Disposable? = null
|
private var currentUserObserver: Disposable? = null
|
||||||
|
|
||||||
override val currentUser: Maybe<User>
|
override val currentUser: Maybe<User>
|
||||||
@ -40,8 +45,10 @@ class CurrentUserProviderImpl @Inject constructor(private val userManager: UserM
|
|||||||
// immediately get a result synchronously
|
// immediately get a result synchronously
|
||||||
_currentUser = userManager.currentUser.blockingGet()
|
_currentUser = userManager.currentUser.blockingGet()
|
||||||
if (currentUserObserver == null) {
|
if (currentUserObserver == null) {
|
||||||
// start observable for auto-updates
|
currentUserObserver = userManager.currentUserObservable
|
||||||
currentUserObserver = userManager.currentUserObservable.subscribe { _currentUser = it }
|
.subscribe {
|
||||||
|
_currentUser = it
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _currentUser?.let { Maybe.just(it) } ?: Maybe.empty()
|
return _currentUser?.let { Maybe.just(it) } ?: Maybe.empty()
|
||||||
|
Loading…
Reference in New Issue
Block a user