diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt index e6ff828ef4..5ebf770cad 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt @@ -150,6 +150,15 @@ class HomeDetailFragment @Inject constructor( toggleModalVisibility() } + views.backButtonLayout.setOnClickListener { + val currentSpace = sharedActionViewModel.space.value + val directParent = currentSpace?.spaceParents?.firstOrNull() + viewModel.handleSelectSpace(directParent?.roomSummary) + sharedActionViewModel.space.value = directParent?.roomSummary + sharedActionViewModel.post(HomeActivitySharedAction.OpenGroup(false)) + onSpaceChange(directParent?.roomSummary) + } + views.dimView.setOnClickListener { toggleModalVisibility() } @@ -205,25 +214,33 @@ class HomeDetailFragment @Inject constructor( private fun observeSharedActions() = lifecycleScope.launch { sharedActionViewModel.stream().collect { action -> - when(action) { - is HomeActivitySharedAction.OpenGroup -> toggleModalVisibility() - else -> Unit + when (action) { + is HomeActivitySharedAction.OpenGroup -> hideModal() + else -> Unit } } } private fun toggleModalVisibility() { if (views.spaceModalFragment.isVisible) { - views.spaceModalFragment.isVisible = false - views.dimView.isVisible = false - views.toolbarChevron.rotation = 0F + hideModal() } else { - views.spaceModalFragment.isVisible = true - views.dimView.isVisible = true - views.toolbarChevron.rotation = 90F + showModal() } } + private fun showModal() { + views.spaceModalFragment.isVisible = true + views.dimView.isVisible = true + views.toolbarChevron.rotation = 90F + } + + private fun hideModal() { + views.spaceModalFragment.isVisible = false + views.dimView.isVisible = false + views.toolbarChevron.rotation = 0F + } + private fun handleCallStarted() { dismissLoadingDialog() val fragmentTag = HomeTab.DialPad.toFragmentTag() @@ -312,8 +329,11 @@ class HomeDetailFragment @Inject constructor( } private fun onGroupChange(groupSummary: GroupSummary?) { + hideModal() if (groupSummary == null) { views.groupToolbarSpaceTitleView.isVisible = false + views.groupToolbarSpaceTitleView.text = getString(R.string.all_chats) + views.groupToolbarTitleView.text = getString(R.string.all_chats) } else { views.groupToolbarSpaceTitleView.isVisible = true views.groupToolbarSpaceTitleView.text = groupSummary.displayName @@ -322,8 +342,11 @@ class HomeDetailFragment @Inject constructor( } private fun onSpaceChange(spaceSummary: RoomSummary?) { + hideModal() if (spaceSummary == null) { views.groupToolbarSpaceTitleView.isVisible = false + views.groupToolbarSpaceTitleView.text = getString(R.string.all_chats) + views.groupToolbarTitleView.text = getString(R.string.all_chats) } else { views.groupToolbarSpaceTitleView.isVisible = true views.groupToolbarSpaceTitleView.text = spaceSummary.displayName diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt index fc39165a7e..f08353d950 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt @@ -29,6 +29,7 @@ import im.vector.app.core.di.hiltMavericksViewModelFactory import im.vector.app.core.extensions.singletonEntryPoint import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.VectorOverrides +import im.vector.app.features.analytics.plan.Interaction import im.vector.app.features.call.dialpad.DialPadLookup import im.vector.app.features.call.lookup.CallProtocolsChecker import im.vector.app.features.call.webrtc.WebRtcCallManager @@ -36,7 +37,10 @@ import im.vector.app.features.createdirect.DirectRoomHelper import im.vector.app.features.invite.AutoAcceptInvites import im.vector.app.features.invite.showInvites import im.vector.app.features.settings.VectorDataStore +import im.vector.app.features.spaces.SpaceListAction +import im.vector.app.features.spaces.SpaceListViewEvents import im.vector.app.features.ui.UiStateRepository +import im.vector.app.space import im.vector.lib.core.utils.flow.throttleFirst import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.distinctUntilChanged @@ -52,6 +56,7 @@ import org.matrix.android.sdk.api.session.crypto.NewSessionListener import org.matrix.android.sdk.api.session.initsync.SyncStatusService import org.matrix.android.sdk.api.session.room.RoomSortOrder import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.api.util.toMatrixItem import org.matrix.android.sdk.flow.flow @@ -215,6 +220,10 @@ class HomeDetailViewModel @AssistedInject constructor( } } + fun handleSelectSpace(space: RoomSummary?) { + appStateHandler.setCurrentSpace(space?.roomId) + } + private fun observeRoomSummaries() { appStateHandler.selectedRoomGroupingFlow.distinctUntilChanged().flatMapLatest { // we use it as a trigger to all changes in room, but do not really load diff --git a/vector/src/main/java/im/vector/app/features/home/HomeSharedActionViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeSharedActionViewModel.kt index 7605b46d09..1490c760b8 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeSharedActionViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeSharedActionViewModel.kt @@ -24,5 +24,5 @@ import javax.inject.Inject class HomeSharedActionViewModel @Inject constructor(val session: Session) : VectorSharedActionViewModel() { - val space = MutableLiveData() + val space = MutableLiveData() } diff --git a/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt b/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt index 7c80348e5f..58aaa2d34c 100644 --- a/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/SpaceListModalFragment.kt @@ -75,7 +75,7 @@ class SpaceListModalFragment : VectorBaseFragment } } - private fun observeSpaceChange() = sharedActionViewModel.space.observeNotNull(viewLifecycleOwner) { + private fun observeSpaceChange() = sharedActionViewModel.space.observe(viewLifecycleOwner) { viewModel.setSpace(it) } diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt index de2aba6f43..a6761ef557 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt @@ -343,7 +343,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa } } - fun setSpace(space: RoomSummary) { + fun setSpace(space: RoomSummary?) { this.currentSpace = space emitSpaceViewState() } diff --git a/vector/src/main/res/layout/fragment_home_detail.xml b/vector/src/main/res/layout/fragment_home_detail.xml index 0e2a9b0b44..ad761c59ba 100644 --- a/vector/src/main/res/layout/fragment_home_detail.xml +++ b/vector/src/main/res/layout/fragment_home_detail.xml @@ -121,29 +121,38 @@ - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + +