Changes AppStateHandler to SpaceStateHandler

This commit is contained in:
ericdecanini 2022-07-21 10:10:44 +02:00
parent 9a649b6093
commit f0ae458a54
17 changed files with 83 additions and 83 deletions

View File

@ -22,7 +22,7 @@ import kotlinx.coroutines.flow.Flow
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.room.model.RoomSummary
interface AppStateHandler : DefaultLifecycleObserver {
interface SpaceStateHandler : DefaultLifecycleObserver {
fun getCurrentSpace(): RoomSummary?

View File

@ -49,12 +49,12 @@ import javax.inject.Singleton
* It is required that this class is added as an observer to ProcessLifecycleOwner.get().lifecycle in [VectorApplication]
*/
@Singleton
class AppStateHandlerImpl @Inject constructor(
class SpaceStateHandlerImpl @Inject constructor(
private val sessionDataSource: ActiveSessionDataSource,
private val uiStateRepository: UiStateRepository,
private val activeSessionHolder: ActiveSessionHolder,
private val analyticsTracker: AnalyticsTracker
) : AppStateHandler {
) : SpaceStateHandler {
private val coroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
private val selectedSpaceDataSource = BehaviorDataSource<Option<RoomSummary>>(Option.empty())

View File

@ -90,7 +90,7 @@ class VectorApplication :
@Inject lateinit var vectorPreferences: VectorPreferences
@Inject lateinit var versionProvider: VersionProvider
@Inject lateinit var notificationUtils: NotificationUtils
@Inject lateinit var appStateHandler: AppStateHandler
@Inject lateinit var spaceStateHandler: SpaceStateHandler
@Inject lateinit var popupAlertManager: PopupAlertManager
@Inject lateinit var pinLocker: PinLocker
@Inject lateinit var callManager: WebRtcCallManager
@ -187,7 +187,7 @@ class VectorApplication :
fcmHelper.onEnterBackground(activeSessionHolder)
}
})
ProcessLifecycleOwner.get().lifecycle.addObserver(appStateHandler)
ProcessLifecycleOwner.get().lifecycle.addObserver(spaceStateHandler)
ProcessLifecycleOwner.get().lifecycle.addObserver(pinLocker)
ProcessLifecycleOwner.get().lifecycle.addObserver(callManager)
// This should be done as early as possible

View File

@ -28,8 +28,8 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import im.vector.app.AppStateHandler
import im.vector.app.AppStateHandlerImpl
import im.vector.app.SpaceStateHandler
import im.vector.app.SpaceStateHandlerImpl
import im.vector.app.BuildConfig
import im.vector.app.EmojiCompatWrapper
import im.vector.app.EmojiSpanify
@ -112,7 +112,7 @@ abstract class VectorBindModule {
abstract fun bindSystemSettingsProvide(provider: AndroidSystemSettingsProvider): SystemSettingsProvider
@Binds
abstract fun bindAppStateHandler(appStateHandlerImpl: AppStateHandlerImpl): AppStateHandler
abstract fun bindSpaceStateHandler(spaceStateHandlerImpl: SpaceStateHandlerImpl): SpaceStateHandler
}
@InstallIn(SingletonComponent::class)

View File

@ -35,7 +35,7 @@ import com.airbnb.mvrx.Mavericks
import com.airbnb.mvrx.viewModel
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.hilt.android.AndroidEntryPoint
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.extensions.hideKeyboard
@ -129,7 +129,7 @@ class HomeActivity :
@Inject lateinit var permalinkHandler: PermalinkHandler
@Inject lateinit var avatarRenderer: AvatarRenderer
@Inject lateinit var initSyncStepFormatter: InitSyncStepFormatter
@Inject lateinit var appStateHandler: AppStateHandler
@Inject lateinit var spaceStateHandler: SpaceStateHandler
@Inject lateinit var unifiedPushHelper: UnifiedPushHelper
@Inject lateinit var fcmHelper: FcmHelper

View File

@ -28,7 +28,7 @@ import com.airbnb.mvrx.activityViewModel
import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState
import com.google.android.material.badge.BadgeDrawable
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.R
import im.vector.app.core.extensions.commitTransaction
import im.vector.app.core.extensions.toMvRxBundle
@ -66,7 +66,7 @@ class HomeDetailFragment @Inject constructor(
private val alertManager: PopupAlertManager,
private val callManager: WebRtcCallManager,
private val vectorPreferences: VectorPreferences,
private val appStateHandler: AppStateHandler
private val spaceStateHandler: SpaceStateHandler
) : VectorBaseFragment<FragmentHomeDetailBinding>(),
KeysBackupBanner.Delegate,
CurrentCallsView.Callback,
@ -183,13 +183,13 @@ class HomeDetailFragment @Inject constructor(
}
private fun navigateBack() {
val previousSpaceId = appStateHandler.getSpaceBackstack().removeLastOrNull()
val parentSpaceId = appStateHandler.getCurrentSpace()?.flattenParentIds?.lastOrNull()
val previousSpaceId = spaceStateHandler.getSpaceBackstack().removeLastOrNull()
val parentSpaceId = spaceStateHandler.getCurrentSpace()?.flattenParentIds?.lastOrNull()
setCurrentSpace(previousSpaceId ?: parentSpaceId)
}
private fun setCurrentSpace(spaceId: String?) {
appStateHandler.setCurrentSpace(spaceId, isForwardNavigation = false)
spaceStateHandler.setCurrentSpace(spaceId, isForwardNavigation = false)
sharedActionViewModel.post(HomeActivitySharedAction.OnCloseSpace)
}
@ -212,7 +212,7 @@ class HomeDetailFragment @Inject constructor(
}
private fun refreshSpaceState() {
appStateHandler.getCurrentSpace()?.let {
spaceStateHandler.getCurrentSpace()?.let {
onSpaceChange(it)
}
}
@ -466,7 +466,7 @@ class HomeDetailFragment @Inject constructor(
return this
}
override fun onBackPressed(toolbarButton: Boolean) = if (appStateHandler.getCurrentSpace() != null) {
override fun onBackPressed(toolbarButton: Boolean) = if (spaceStateHandler.getCurrentSpace() != null) {
navigateBack()
true
} else {

View File

@ -22,7 +22,7 @@ import com.airbnb.mvrx.ViewModelContext
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.extensions.singletonEntryPoint
@ -68,7 +68,7 @@ class HomeDetailViewModel @AssistedInject constructor(
private val vectorDataStore: VectorDataStore,
private val callManager: WebRtcCallManager,
private val directRoomHelper: DirectRoomHelper,
private val appStateHandler: AppStateHandler,
private val spaceStateHandler: SpaceStateHandler,
private val autoAcceptInvites: AutoAcceptInvites,
private val vectorOverrides: VectorOverrides
) : VectorViewModel<HomeDetailViewState, HomeDetailAction, HomeDetailViewEvents>(initialState),
@ -207,7 +207,7 @@ class HomeDetailViewModel @AssistedInject constructor(
}
private fun observeRoomGroupingMethod() {
appStateHandler.getSelectedSpaceFlow()
spaceStateHandler.getSelectedSpaceFlow()
.setOnEach {
copy(
selectedSpace = it.orNull()
@ -216,7 +216,7 @@ class HomeDetailViewModel @AssistedInject constructor(
}
private fun observeRoomSummaries() {
appStateHandler.getSelectedSpaceFlow().distinctUntilChanged().flatMapLatest {
spaceStateHandler.getSelectedSpaceFlow().distinctUntilChanged().flatMapLatest {
// we use it as a trigger to all changes in room, but do not really load
// the actual models
session.roomService().getPagedRoomSummariesLive(
@ -228,7 +228,7 @@ class HomeDetailViewModel @AssistedInject constructor(
}
.throttleFirst(300)
.onEach {
val activeSpaceRoomId = appStateHandler.getCurrentSpace()?.roomId
val activeSpaceRoomId = spaceStateHandler.getCurrentSpace()?.roomId
var dmInvites = 0
var roomsInvite = 0
if (autoAcceptInvites.showInvites()) {

View File

@ -22,7 +22,7 @@ import com.airbnb.mvrx.MavericksViewModelFactory
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyAction
@ -58,7 +58,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(
@Assisted initialState: UnreadMessagesState,
session: Session,
private val vectorPreferences: VectorPreferences,
appStateHandler: AppStateHandler,
spaceStateHandler: SpaceStateHandler,
private val autoAcceptInvites: AutoAcceptInvites
) :
VectorViewModel<UnreadMessagesState, EmptyAction, EmptyViewEvents>(initialState) {
@ -109,8 +109,8 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(
}
combine(
appStateHandler.getSelectedSpaceFlow().distinctUntilChanged(),
appStateHandler.getSelectedSpaceFlow().flatMapLatest {
spaceStateHandler.getSelectedSpaceFlow().distinctUntilChanged(),
spaceStateHandler.getSelectedSpaceFlow().flatMapLatest {
roomService.getPagedRoomSummariesLive(
roomSummaryQueryParams {
this.memberships = Membership.activeMemberships()

View File

@ -28,7 +28,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.R
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
@ -136,7 +136,7 @@ class TimelineViewModel @AssistedInject constructor(
private val locationSharingServiceConnection: LocationSharingServiceConnection,
private val stopLiveLocationShareUseCase: StopLiveLocationShareUseCase,
timelineFactory: TimelineFactory,
appStateHandler: AppStateHandler,
spaceStateHandler: SpaceStateHandler,
) : VectorViewModel<RoomDetailViewState, RoomDetailAction, RoomDetailViewEvents>(initialState),
Timeline.Listener, ChatEffectManager.Delegate, CallProtocolsChecker.Listener, LocationSharingServiceConnection.Callback {
@ -218,16 +218,16 @@ class TimelineViewModel @AssistedInject constructor(
if (initialState.switchToParentSpace) {
// We are coming from a notification, try to switch to the most relevant space
// so that when hitting back the room will appear in the list
appStateHandler.getCurrentSpace().let { currentSpace ->
spaceStateHandler.getCurrentSpace().let { currentSpace ->
val currentRoomSummary = room.roomSummary() ?: return@let
// nothing we are good
if ((currentSpace == null && !vectorPreferences.prefSpacesShowAllRoomInHome()) ||
(currentSpace != null && !currentRoomSummary.flattenParentIds.contains(currentSpace.roomId))) {
// take first one or switch to home
appStateHandler.setCurrentSpace(
spaceStateHandler.setCurrentSpace(
currentRoomSummary
.flattenParentIds.firstOrNull { it.isNotBlank() },
// force persist, because if not on resume the AppStateHandler will resume
// force persist, because if not on resume the SpaceStateHandler will resume
// the current space from what was persisted on enter background
persistNow = true
)

View File

@ -23,7 +23,7 @@ import androidx.lifecycle.asFlow
import androidx.lifecycle.liveData
import androidx.paging.PagedList
import com.airbnb.mvrx.Async
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.R
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.home.RoomListDisplayMode
@ -58,7 +58,7 @@ import timber.log.Timber
class RoomListSectionBuilder(
private val session: Session,
private val stringProvider: StringProvider,
private val appStateHandler: AppStateHandler,
private val spaceStateHandler: SpaceStateHandler,
private val viewModelScope: CoroutineScope,
private val autoAcceptInvites: AutoAcceptInvites,
private val onUpdatable: (UpdatableLivePageResult) -> Unit,
@ -94,7 +94,7 @@ class RoomListSectionBuilder(
}
}
appStateHandler.getSelectedSpaceFlow()
spaceStateHandler.getSelectedSpaceFlow()
.distinctUntilChanged()
.onEach { selectedSpaceOption ->
val selectedSpace = selectedSpaceOption.orNull()
@ -186,7 +186,7 @@ class RoomListSectionBuilder(
// add suggested rooms
val suggestedRoomsFlow = // MutableLiveData<List<SpaceChildInfo>>()
appStateHandler.getSelectedSpaceFlow()
spaceStateHandler.getSelectedSpaceFlow()
.distinctUntilChanged()
.flatMapLatest { selectedSpaceOption ->
val selectedSpace = selectedSpaceOption.orNull()
@ -359,7 +359,7 @@ class RoomListSectionBuilder(
query: (RoomSummaryQueryParams.Builder) -> Unit
) {
withQueryParams(query) { roomQueryParams ->
val updatedQueryParams = roomQueryParams.process(spaceFilterStrategy, appStateHandler.getSafeActiveSpaceId())
val updatedQueryParams = roomQueryParams.process(spaceFilterStrategy, spaceStateHandler.getSafeActiveSpaceId())
val liveQueryParams = MutableStateFlow(updatedQueryParams)
val itemCountFlow = liveQueryParams
.flatMapLatest {
@ -370,7 +370,7 @@ class RoomListSectionBuilder(
val name = stringProvider.getString(nameRes)
val filteredPagedRoomSummariesLive = session.roomService().getFilteredPagedRoomSummariesLive(
roomQueryParams.process(spaceFilterStrategy, appStateHandler.getSafeActiveSpaceId()),
roomQueryParams.process(spaceFilterStrategy, spaceStateHandler.getSafeActiveSpaceId()),
pagedListConfig
)
when (spaceFilterStrategy) {
@ -417,7 +417,7 @@ class RoomListSectionBuilder(
RoomAggregateNotificationCount(it.size, it.size)
} else {
session.roomService().getNotificationCountForRooms(
roomQueryParams.process(spaceFilterStrategy, appStateHandler.getSafeActiveSpaceId())
roomQueryParams.process(spaceFilterStrategy, spaceStateHandler.getSafeActiveSpaceId())
)
}
)

View File

@ -25,7 +25,7 @@ import com.airbnb.mvrx.Success
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
@ -60,7 +60,7 @@ class RoomListViewModel @AssistedInject constructor(
@Assisted initialState: RoomListViewState,
private val session: Session,
stringProvider: StringProvider,
appStateHandler: AppStateHandler,
spaceStateHandler: SpaceStateHandler,
vectorPreferences: VectorPreferences,
autoAcceptInvites: AutoAcceptInvites,
private val analyticsTracker: AnalyticsTracker
@ -100,7 +100,7 @@ class RoomListViewModel @AssistedInject constructor(
observeMembershipChanges()
observeLocalRooms()
appStateHandler.getSelectedSpaceFlow()
spaceStateHandler.getSelectedSpaceFlow()
.distinctUntilChanged()
.execute {
copy(
@ -148,7 +148,7 @@ class RoomListViewModel @AssistedInject constructor(
private val roomListSectionBuilder = RoomListSectionBuilder(
session,
stringProvider,
appStateHandler,
spaceStateHandler,
viewModelScope,
autoAcceptInvites,
{

View File

@ -31,7 +31,7 @@ import androidx.core.app.TaskStackBuilder
import androidx.core.util.Pair
import androidx.core.view.ViewCompat
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.error.fatalError
@ -120,7 +120,7 @@ class DefaultNavigator @Inject constructor(
private val sessionHolder: ActiveSessionHolder,
private val vectorPreferences: VectorPreferences,
private val widgetArgsBuilder: WidgetArgsBuilder,
private val appStateHandler: AppStateHandler,
private val spaceStateHandler: SpaceStateHandler,
private val supportedVerificationMethodsProvider: SupportedVerificationMethodsProvider,
private val features: VectorFeatures,
private val analyticsTracker: AnalyticsTracker
@ -167,7 +167,7 @@ class DefaultNavigator @Inject constructor(
analyticsTracker.capture(
sessionHolder.getActiveSession().getRoomSummary(roomId).toAnalyticsViewRoom(
trigger = trigger,
selectedSpace = appStateHandler.getCurrentSpace()
selectedSpace = spaceStateHandler.getCurrentSpace()
)
)
}
@ -182,7 +182,7 @@ class DefaultNavigator @Inject constructor(
fatalError("Trying to open an unknown space $spaceId", vectorPreferences.failFast())
return
}
appStateHandler.setCurrentSpace(spaceId)
spaceStateHandler.setCurrentSpace(spaceId)
when (postSwitchSpaceAction) {
Navigator.PostSwitchSpaceAction.None -> {
// go back to home if we are showing room details?
@ -318,7 +318,7 @@ class DefaultNavigator @Inject constructor(
}
override fun openRoomDirectory(context: Context, initialFilter: String) {
when (val currentSpace = appStateHandler.getCurrentSpace()) {
when (val currentSpace = spaceStateHandler.getCurrentSpace()) {
null -> RoomDirectoryActivity.getIntent(context, initialFilter)
else -> SpaceExploreActivity.newIntent(context, currentSpace.roomId)
}.start(context)
@ -330,14 +330,14 @@ class DefaultNavigator @Inject constructor(
}
override fun openCreateDirectRoom(context: Context) {
when (val currentSpace = appStateHandler.getCurrentSpace()) {
when (val currentSpace = spaceStateHandler.getCurrentSpace()) {
null -> CreateDirectRoomActivity.getIntent(context)
else -> SpacePeopleActivity.newIntent(context, currentSpace.roomId)
}.start(context)
}
override fun openInviteUsersToRoom(context: Context, roomId: String) {
when (val currentSpace = appStateHandler.getCurrentSpace()) {
when (val currentSpace = spaceStateHandler.getCurrentSpace()) {
null -> InviteUsersToRoomActivity.getIntent(context, roomId).start(context)
else -> showInviteToDialog(context, currentSpace, roomId)
}

View File

@ -25,7 +25,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
@ -58,7 +58,7 @@ class CreateRoomViewModel @AssistedInject constructor(
@Assisted private val initialState: CreateRoomViewState,
private val session: Session,
private val rawService: RawService,
appStateHandler: AppStateHandler,
spaceStateHandler: SpaceStateHandler,
private val analyticsTracker: AnalyticsTracker
) : VectorViewModel<CreateRoomViewState, CreateRoomAction, CreateRoomViewEvents>(initialState) {
@ -73,7 +73,7 @@ class CreateRoomViewModel @AssistedInject constructor(
initHomeServerName()
initAdminE2eByDefault()
val parentSpaceId = initialState.parentSpaceId ?: appStateHandler.getSafeActiveSpaceId()
val parentSpaceId = initialState.parentSpaceId ?: spaceStateHandler.getSafeActiveSpaceId()
val restrictedSupport = session.homeServerCapabilitiesService().getHomeServerCapabilities()
.isFeatureSupported(HomeServerCapabilities.ROOM_CAP_RESTRICTED)

View File

@ -23,7 +23,7 @@ import com.airbnb.mvrx.Success
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
@ -61,7 +61,7 @@ import org.matrix.android.sdk.flow.flow
class SpaceListViewModel @AssistedInject constructor(
@Assisted initialState: SpaceListViewState,
private val appStateHandler: AppStateHandler,
private val spaceStateHandler: SpaceStateHandler,
private val session: Session,
private val vectorPreferences: VectorPreferences,
private val autoAcceptInvites: AutoAcceptInvites,
@ -85,7 +85,7 @@ class SpaceListViewModel @AssistedInject constructor(
}
observeSpaceSummaries()
appStateHandler.getSelectedSpaceFlow()
spaceStateHandler.getSelectedSpaceFlow()
.distinctUntilChanged()
.setOnEach { selectedSpaceOption ->
copy(
@ -217,7 +217,7 @@ class SpaceListViewModel @AssistedInject constructor(
if (state.selectedSpace?.roomId != action.spaceSummary?.roomId) {
analyticsTracker.capture(Interaction(null, null, Interaction.Name.SpacePanelSwitchSpace))
setState { copy(selectedSpace = action.spaceSummary) }
appStateHandler.setCurrentSpace(action.spaceSummary?.roomId)
spaceStateHandler.setCurrentSpace(action.spaceSummary?.roomId)
_viewEvents.post(SpaceListViewEvents.CloseDrawer)
} else {
analyticsTracker.capture(Interaction(null, null, Interaction.Name.SpacePanelSelectedSpace))

View File

@ -24,7 +24,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyViewEvents
@ -50,7 +50,7 @@ import timber.log.Timber
class SpaceMenuViewModel @AssistedInject constructor(
@Assisted val initialState: SpaceMenuState,
val session: Session,
val appStateHandler: AppStateHandler
val spaceStateHandler: SpaceStateHandler
) : VectorViewModel<SpaceMenuState, SpaceLeaveViewAction, EmptyViewEvents>(initialState) {
@AssistedFactory
@ -73,9 +73,9 @@ class SpaceMenuViewModel @AssistedInject constructor(
it.getOrNull()?.let {
if (it.membership == Membership.LEAVE) {
setState { copy(leavingState = Success(Unit)) }
if (appStateHandler.getSafeActiveSpaceId() == initialState.spaceId) {
if (spaceStateHandler.getSafeActiveSpaceId() == initialState.spaceId) {
// switch to home?
appStateHandler.setCurrentSpace(null, session)
spaceStateHandler.setCurrentSpace(null, session)
}
}
}

View File

@ -24,7 +24,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.AppStateHandler
import im.vector.app.SpaceStateHandler
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyViewEvents
@ -53,7 +53,7 @@ import timber.log.Timber
class SpaceLeaveAdvancedViewModel @AssistedInject constructor(
@Assisted val initialState: SpaceLeaveAdvanceViewState,
private val session: Session,
private val appStateHandler: AppStateHandler
private val spaceStateHandler: SpaceStateHandler
) : VectorViewModel<SpaceLeaveAdvanceViewState, SpaceLeaveAdvanceViewAction, EmptyViewEvents>(initialState) {
init {
@ -82,9 +82,9 @@ class SpaceLeaveAdvancedViewModel @AssistedInject constructor(
?.onEach {
if (it.membership == Membership.LEAVE) {
setState { copy(leaveState = Success(Unit)) }
if (appStateHandler.getSafeActiveSpaceId() == initialState.spaceId) {
if (spaceStateHandler.getSafeActiveSpaceId() == initialState.spaceId) {
// switch to home?
appStateHandler.setCurrentSpace(null, session)
spaceStateHandler.setCurrentSpace(null, session)
}
}
}?.launchIn(viewModelScope)

View File

@ -32,7 +32,7 @@ import org.junit.Before
import org.junit.Test
import org.matrix.android.sdk.api.session.room.model.RoomSummary
internal class AppStateHandlerImplTest {
internal class SpaceStateHandlerImplTest {
private val spaceId = "spaceId"
private val spaceSummary: RoomSummary = mockk()
@ -43,7 +43,7 @@ internal class AppStateHandlerImplTest {
private val activeSessionHolder = FakeActiveSessionHolder(session)
private val analyticsTracker = FakeAnalyticsTracker()
private val appStateHandler = AppStateHandlerImpl(
private val spaceStateHandler = SpaceStateHandlerImpl(
sessionDataSource.instance,
uiStateRepository,
activeSessionHolder.instance,
@ -58,39 +58,39 @@ internal class AppStateHandlerImplTest {
@Test
fun `given selected space doesn't exist, when getCurrentSpace, then return null`() {
val currentSpace = appStateHandler.getCurrentSpace()
val currentSpace = spaceStateHandler.getCurrentSpace()
currentSpace shouldBe null
}
@Test
fun `given selected space exists, when getCurrentSpace, then return selected space`() {
appStateHandler.setCurrentSpace(spaceId, session)
spaceStateHandler.setCurrentSpace(spaceId, session)
val currentSpace = appStateHandler.getCurrentSpace()
val currentSpace = spaceStateHandler.getCurrentSpace()
currentSpace shouldBe spaceSummary
}
@Test
fun `given persistNow is true, when setCurrentSpace, then immediately persist to ui state`() {
appStateHandler.setCurrentSpace(spaceId, session, persistNow = true)
spaceStateHandler.setCurrentSpace(spaceId, session, persistNow = true)
uiStateRepository.verifyStoreSelectedSpace(spaceId, session)
}
@Test
fun `given persistNow is false, when setCurrentSpace, then don't immediately persist to ui state`() {
appStateHandler.setCurrentSpace(spaceId, session, persistNow = false)
spaceStateHandler.setCurrentSpace(spaceId, session, persistNow = false)
uiStateRepository.verifyStoreSelectedSpace(spaceId, session, inverse = true)
}
@Test
fun `given is forward navigation and no current space, when setCurrentSpace, then null added to backstack`() {
appStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = true)
spaceStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = true)
val backstack = appStateHandler.getSpaceBackstack()
val backstack = spaceStateHandler.getSpaceBackstack()
backstack.size shouldBe 1
backstack.first() shouldBe null
@ -98,10 +98,10 @@ internal class AppStateHandlerImplTest {
@Test
fun `given is forward navigation and is in space, when setCurrentSpace, then previous space added to backstack`() {
appStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = true)
appStateHandler.setCurrentSpace("secondSpaceId", session, isForwardNavigation = true)
spaceStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = true)
spaceStateHandler.setCurrentSpace("secondSpaceId", session, isForwardNavigation = true)
val backstack = appStateHandler.getSpaceBackstack()
val backstack = spaceStateHandler.getSpaceBackstack()
backstack.size shouldBe 2
backstack shouldBeEqualTo listOf(null, spaceId)
@ -109,34 +109,34 @@ internal class AppStateHandlerImplTest {
@Test
fun `given is not forward navigation, when setCurrentSpace, then previous space not added to backstack`() {
appStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = false)
spaceStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = false)
val backstack = appStateHandler.getSpaceBackstack()
val backstack = spaceStateHandler.getSpaceBackstack()
backstack.size shouldBe 0
}
@Test
fun `when setCurrentSpace, then space is emitted to selectedSpaceFlow`() = runTest {
appStateHandler.setCurrentSpace(spaceId, session)
spaceStateHandler.setCurrentSpace(spaceId, session)
val currentSpace = appStateHandler.getSelectedSpaceFlow().first().orNull()
val currentSpace = spaceStateHandler.getSelectedSpaceFlow().first().orNull()
currentSpace shouldBeEqualTo spaceSummary
}
@Test
fun `given current space exists, when getSafeActiveSpaceId, then return current space id`() {
appStateHandler.setCurrentSpace(spaceId, session)
spaceStateHandler.setCurrentSpace(spaceId, session)
val activeSpaceId = appStateHandler.getSafeActiveSpaceId()
val activeSpaceId = spaceStateHandler.getSafeActiveSpaceId()
activeSpaceId shouldBeEqualTo spaceId
}
@Test
fun `given current space doesn't exist, when getSafeActiveSpaceId, then return current null`() {
val activeSpaceId = appStateHandler.getSafeActiveSpaceId()
val activeSpaceId = spaceStateHandler.getSafeActiveSpaceId()
activeSpaceId shouldBe null
}