mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-05 13:37:36 +01:00
App state: fix session
This commit is contained in:
parent
6cd04525aa
commit
a1a71e2f1d
@ -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<Option<Session>>()
|
@ -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.group.model.GroupSummary
|
||||||
import im.vector.matrix.android.api.session.room.model.RoomSummary
|
import im.vector.matrix.android.api.session.room.model.RoomSummary
|
||||||
import im.vector.matrix.rx.rx
|
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.HomeRoomListObservableStore
|
||||||
import im.vector.riotx.features.home.group.ALL_COMMUNITIES_GROUP_ID
|
import im.vector.riotx.features.home.group.ALL_COMMUNITIES_GROUP_ID
|
||||||
import im.vector.riotx.features.home.group.SelectedGroupStore
|
import im.vector.riotx.features.home.group.SelectedGroupStore
|
||||||
import io.reactivex.Observable
|
import io.reactivex.Observable
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.CompositeDisposable
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
import io.reactivex.functions.BiFunction
|
import io.reactivex.functions.BiFunction
|
||||||
import io.reactivex.rxkotlin.addTo
|
import io.reactivex.rxkotlin.addTo
|
||||||
|
import io.reactivex.schedulers.Schedulers
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles the main room list at the moment. It will dispatch the results to the store.
|
* This class handles the global app state. At the moment, it only manages room list.
|
||||||
* It requires to be added with ProcessLifecycleOwner.get().lifecycle.addObserver
|
* It requires to be added to ProcessLifecycleOwner.get().lifecycle
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
class AppStateHandler @Inject constructor(
|
class AppStateHandler @Inject constructor(
|
||||||
private val activeSessionHolder: ActiveSessionHolder,
|
private val sessionObservableStore: ActiveSessionObservableStore,
|
||||||
private val homeRoomListStore: HomeRoomListObservableStore,
|
private val homeRoomListStore: HomeRoomListObservableStore,
|
||||||
private val selectedGroupStore: SelectedGroupStore) : LifecycleObserver {
|
private val selectedGroupStore: SelectedGroupStore) : LifecycleObserver {
|
||||||
|
|
||||||
@ -61,9 +62,12 @@ class AppStateHandler @Inject constructor(
|
|||||||
private fun observeRoomsAndGroup() {
|
private fun observeRoomsAndGroup() {
|
||||||
Observable
|
Observable
|
||||||
.combineLatest<List<RoomSummary>, Option<GroupSummary>, List<RoomSummary>>(
|
.combineLatest<List<RoomSummary>, Option<GroupSummary>, List<RoomSummary>>(
|
||||||
activeSessionHolder.getActiveSession()
|
sessionObservableStore.observe()
|
||||||
.rx()
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.liveRoomSummaries()
|
.switchMap {
|
||||||
|
it.orNull()?.rx()?.liveRoomSummaries()
|
||||||
|
?: Observable.just(emptyList())
|
||||||
|
}
|
||||||
.throttleLast(300, TimeUnit.MILLISECONDS),
|
.throttleLast(300, TimeUnit.MILLISECONDS),
|
||||||
selectedGroupStore.observe(),
|
selectedGroupStore.observe(),
|
||||||
BiFunction { rooms, selectedGroupOption ->
|
BiFunction { rooms, selectedGroupOption ->
|
||||||
|
@ -16,8 +16,10 @@
|
|||||||
|
|
||||||
package im.vector.riotx.core.di
|
package im.vector.riotx.core.di
|
||||||
|
|
||||||
|
import arrow.core.Option
|
||||||
import im.vector.matrix.android.api.auth.Authenticator
|
import im.vector.matrix.android.api.auth.Authenticator
|
||||||
import im.vector.matrix.android.api.session.Session
|
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.keysrequest.KeyRequestHandler
|
||||||
import im.vector.riotx.features.crypto.verification.IncomingVerificationRequestHandler
|
import im.vector.riotx.features.crypto.verification.IncomingVerificationRequestHandler
|
||||||
import java.util.concurrent.atomic.AtomicReference
|
import java.util.concurrent.atomic.AtomicReference
|
||||||
@ -26,6 +28,7 @@ import javax.inject.Singleton
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class ActiveSessionHolder @Inject constructor(private val authenticator: Authenticator,
|
class ActiveSessionHolder @Inject constructor(private val authenticator: Authenticator,
|
||||||
|
private val sessionObservableStore: ActiveSessionObservableStore,
|
||||||
private val keyRequestHandler: KeyRequestHandler,
|
private val keyRequestHandler: KeyRequestHandler,
|
||||||
private val incomingVerificationRequestHandler: IncomingVerificationRequestHandler
|
private val incomingVerificationRequestHandler: IncomingVerificationRequestHandler
|
||||||
) {
|
) {
|
||||||
@ -34,12 +37,14 @@ class ActiveSessionHolder @Inject constructor(private val authenticator: Authent
|
|||||||
|
|
||||||
fun setActiveSession(session: Session) {
|
fun setActiveSession(session: Session) {
|
||||||
activeSession.set(session)
|
activeSession.set(session)
|
||||||
|
sessionObservableStore.post(Option.fromNullable(session))
|
||||||
keyRequestHandler.start(session)
|
keyRequestHandler.start(session)
|
||||||
incomingVerificationRequestHandler.start(session)
|
incomingVerificationRequestHandler.start(session)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clearActiveSession() {
|
fun clearActiveSession() {
|
||||||
activeSession.set(null)
|
activeSession.set(null)
|
||||||
|
sessionObservableStore.post(Option.empty())
|
||||||
keyRequestHandler.stop()
|
keyRequestHandler.stop()
|
||||||
incomingVerificationRequestHandler.stop()
|
incomingVerificationRequestHandler.stop()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user