From a1a71e2f1d75f9b4b1379a9caf86d3d8f4b4808a Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 16 Oct 2019 10:04:11 +0200 Subject: [PATCH] App state: fix session --- .../riotx/ActiveSessionObservableStore.kt | 10 ++++++++++ .../java/im/vector/riotx/AppStateHandler.kt | 18 +++++++++++------- .../riotx/core/di/ActiveSessionHolder.kt | 5 +++++ 3 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/ActiveSessionObservableStore.kt diff --git a/vector/src/main/java/im/vector/riotx/ActiveSessionObservableStore.kt b/vector/src/main/java/im/vector/riotx/ActiveSessionObservableStore.kt new file mode 100644 index 0000000000..c10a7f700c --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/ActiveSessionObservableStore.kt @@ -0,0 +1,10 @@ +package im.vector.riotx + +import arrow.core.Option +import im.vector.matrix.android.api.session.Session +import im.vector.riotx.core.utils.RxStore +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ActiveSessionObservableStore @Inject constructor() : RxStore>() diff --git a/vector/src/main/java/im/vector/riotx/AppStateHandler.kt b/vector/src/main/java/im/vector/riotx/AppStateHandler.kt index 4124f3c779..a03e8e0948 100644 --- a/vector/src/main/java/im/vector/riotx/AppStateHandler.kt +++ b/vector/src/main/java/im/vector/riotx/AppStateHandler.kt @@ -23,26 +23,27 @@ import arrow.core.Option import im.vector.matrix.android.api.session.group.model.GroupSummary import im.vector.matrix.android.api.session.room.model.RoomSummary import im.vector.matrix.rx.rx -import im.vector.riotx.core.di.ActiveSessionHolder import im.vector.riotx.features.home.HomeRoomListObservableStore import im.vector.riotx.features.home.group.ALL_COMMUNITIES_GROUP_ID import im.vector.riotx.features.home.group.SelectedGroupStore import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.functions.BiFunction import io.reactivex.rxkotlin.addTo +import io.reactivex.schedulers.Schedulers import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton /** - * This class handles the main room list at the moment. It will dispatch the results to the store. - * It requires to be added with ProcessLifecycleOwner.get().lifecycle.addObserver + * This class handles the global app state. At the moment, it only manages room list. + * It requires to be added to ProcessLifecycleOwner.get().lifecycle */ @Singleton class AppStateHandler @Inject constructor( - private val activeSessionHolder: ActiveSessionHolder, + private val sessionObservableStore: ActiveSessionObservableStore, private val homeRoomListStore: HomeRoomListObservableStore, private val selectedGroupStore: SelectedGroupStore) : LifecycleObserver { @@ -61,9 +62,12 @@ class AppStateHandler @Inject constructor( private fun observeRoomsAndGroup() { Observable .combineLatest, Option, List>( - activeSessionHolder.getActiveSession() - .rx() - .liveRoomSummaries() + sessionObservableStore.observe() + .observeOn(AndroidSchedulers.mainThread()) + .switchMap { + it.orNull()?.rx()?.liveRoomSummaries() + ?: Observable.just(emptyList()) + } .throttleLast(300, TimeUnit.MILLISECONDS), selectedGroupStore.observe(), BiFunction { rooms, selectedGroupOption -> diff --git a/vector/src/main/java/im/vector/riotx/core/di/ActiveSessionHolder.kt b/vector/src/main/java/im/vector/riotx/core/di/ActiveSessionHolder.kt index 60255dbbdd..da3c041a1c 100644 --- a/vector/src/main/java/im/vector/riotx/core/di/ActiveSessionHolder.kt +++ b/vector/src/main/java/im/vector/riotx/core/di/ActiveSessionHolder.kt @@ -16,8 +16,10 @@ package im.vector.riotx.core.di +import arrow.core.Option import im.vector.matrix.android.api.auth.Authenticator import im.vector.matrix.android.api.session.Session +import im.vector.riotx.ActiveSessionObservableStore import im.vector.riotx.features.crypto.keysrequest.KeyRequestHandler import im.vector.riotx.features.crypto.verification.IncomingVerificationRequestHandler import java.util.concurrent.atomic.AtomicReference @@ -26,6 +28,7 @@ import javax.inject.Singleton @Singleton class ActiveSessionHolder @Inject constructor(private val authenticator: Authenticator, + private val sessionObservableStore: ActiveSessionObservableStore, private val keyRequestHandler: KeyRequestHandler, private val incomingVerificationRequestHandler: IncomingVerificationRequestHandler ) { @@ -34,12 +37,14 @@ class ActiveSessionHolder @Inject constructor(private val authenticator: Authent fun setActiveSession(session: Session) { activeSession.set(session) + sessionObservableStore.post(Option.fromNullable(session)) keyRequestHandler.start(session) incomingVerificationRequestHandler.start(session) } fun clearActiveSession() { activeSession.set(null) + sessionObservableStore.post(Option.empty()) keyRequestHandler.stop() incomingVerificationRequestHandler.stop() }