Title changes on going back to all chats

This commit is contained in:
ericdecanini 2022-05-09 19:17:56 +02:00
parent a0baf77438
commit 947cd8fceb
6 changed files with 75 additions and 34 deletions

View File

@ -150,6 +150,15 @@ class HomeDetailFragment @Inject constructor(
toggleModalVisibility() 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 { views.dimView.setOnClickListener {
toggleModalVisibility() toggleModalVisibility()
} }
@ -206,7 +215,7 @@ class HomeDetailFragment @Inject constructor(
private fun observeSharedActions() = lifecycleScope.launch { private fun observeSharedActions() = lifecycleScope.launch {
sharedActionViewModel.stream().collect { action -> sharedActionViewModel.stream().collect { action ->
when (action) { when (action) {
is HomeActivitySharedAction.OpenGroup -> toggleModalVisibility() is HomeActivitySharedAction.OpenGroup -> hideModal()
else -> Unit else -> Unit
} }
} }
@ -214,14 +223,22 @@ class HomeDetailFragment @Inject constructor(
private fun toggleModalVisibility() { private fun toggleModalVisibility() {
if (views.spaceModalFragment.isVisible) { if (views.spaceModalFragment.isVisible) {
views.spaceModalFragment.isVisible = false hideModal()
views.dimView.isVisible = false
views.toolbarChevron.rotation = 0F
} else { } else {
showModal()
}
}
private fun showModal() {
views.spaceModalFragment.isVisible = true views.spaceModalFragment.isVisible = true
views.dimView.isVisible = true views.dimView.isVisible = true
views.toolbarChevron.rotation = 90F views.toolbarChevron.rotation = 90F
} }
private fun hideModal() {
views.spaceModalFragment.isVisible = false
views.dimView.isVisible = false
views.toolbarChevron.rotation = 0F
} }
private fun handleCallStarted() { private fun handleCallStarted() {
@ -312,8 +329,11 @@ class HomeDetailFragment @Inject constructor(
} }
private fun onGroupChange(groupSummary: GroupSummary?) { private fun onGroupChange(groupSummary: GroupSummary?) {
hideModal()
if (groupSummary == null) { if (groupSummary == null) {
views.groupToolbarSpaceTitleView.isVisible = false views.groupToolbarSpaceTitleView.isVisible = false
views.groupToolbarSpaceTitleView.text = getString(R.string.all_chats)
views.groupToolbarTitleView.text = getString(R.string.all_chats)
} else { } else {
views.groupToolbarSpaceTitleView.isVisible = true views.groupToolbarSpaceTitleView.isVisible = true
views.groupToolbarSpaceTitleView.text = groupSummary.displayName views.groupToolbarSpaceTitleView.text = groupSummary.displayName
@ -322,8 +342,11 @@ class HomeDetailFragment @Inject constructor(
} }
private fun onSpaceChange(spaceSummary: RoomSummary?) { private fun onSpaceChange(spaceSummary: RoomSummary?) {
hideModal()
if (spaceSummary == null) { if (spaceSummary == null) {
views.groupToolbarSpaceTitleView.isVisible = false views.groupToolbarSpaceTitleView.isVisible = false
views.groupToolbarSpaceTitleView.text = getString(R.string.all_chats)
views.groupToolbarTitleView.text = getString(R.string.all_chats)
} else { } else {
views.groupToolbarSpaceTitleView.isVisible = true views.groupToolbarSpaceTitleView.isVisible = true
views.groupToolbarSpaceTitleView.text = spaceSummary.displayName views.groupToolbarSpaceTitleView.text = spaceSummary.displayName

View File

@ -29,6 +29,7 @@ import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.extensions.singletonEntryPoint import im.vector.app.core.extensions.singletonEntryPoint
import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.VectorOverrides 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.dialpad.DialPadLookup
import im.vector.app.features.call.lookup.CallProtocolsChecker import im.vector.app.features.call.lookup.CallProtocolsChecker
import im.vector.app.features.call.webrtc.WebRtcCallManager 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.AutoAcceptInvites
import im.vector.app.features.invite.showInvites import im.vector.app.features.invite.showInvites
import im.vector.app.features.settings.VectorDataStore 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.features.ui.UiStateRepository
import im.vector.app.space
import im.vector.lib.core.utils.flow.throttleFirst import im.vector.lib.core.utils.flow.throttleFirst
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.distinctUntilChanged 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.initsync.SyncStatusService
import org.matrix.android.sdk.api.session.room.RoomSortOrder 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.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.session.room.roomSummaryQueryParams
import org.matrix.android.sdk.api.util.toMatrixItem import org.matrix.android.sdk.api.util.toMatrixItem
import org.matrix.android.sdk.flow.flow 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() { private fun observeRoomSummaries() {
appStateHandler.selectedRoomGroupingFlow.distinctUntilChanged().flatMapLatest { appStateHandler.selectedRoomGroupingFlow.distinctUntilChanged().flatMapLatest {
// we use it as a trigger to all changes in room, but do not really load // we use it as a trigger to all changes in room, but do not really load

View File

@ -24,5 +24,5 @@ import javax.inject.Inject
class HomeSharedActionViewModel @Inject constructor(val session: Session) : VectorSharedActionViewModel<HomeActivitySharedAction>() { class HomeSharedActionViewModel @Inject constructor(val session: Session) : VectorSharedActionViewModel<HomeActivitySharedAction>() {
val space = MutableLiveData<RoomSummary>() val space = MutableLiveData<RoomSummary?>()
} }

View File

@ -75,7 +75,7 @@ class SpaceListModalFragment : VectorBaseFragment<FragmentSpaceListModalBinding>
} }
} }
private fun observeSpaceChange() = sharedActionViewModel.space.observeNotNull(viewLifecycleOwner) { private fun observeSpaceChange() = sharedActionViewModel.space.observe(viewLifecycleOwner) {
viewModel.setSpace(it) viewModel.setSpace(it)
} }

View File

@ -343,7 +343,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa
} }
} }
fun setSpace(space: RoomSummary) { fun setSpace(space: RoomSummary?) {
this.currentSpace = space this.currentSpace = space
emitSpaceViewState() emitSpaceViewState()
} }

View File

@ -121,6 +121,13 @@
</RelativeLayout> </RelativeLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/back_button_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView <ImageView
android:id="@+id/back_button_chevron" android:id="@+id/back_button_chevron"
android:layout_width="20dp" android:layout_width="20dp"
@ -145,13 +152,15 @@
app:layout_constraintStart_toEndOf="@id/back_button_chevron" app:layout_constraintStart_toEndOf="@id/back_button_chevron"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/all_chats_layout" android:id="@+id/all_chats_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:paddingBottom="8dp" android:paddingBottom="8dp"
app:layout_constraintTop_toBottomOf="@id/back_button_chevron" app:layout_constraintTop_toBottomOf="@id/back_button_layout"
app:layout_constraintStart_toStartOf="parent"> app:layout_constraintStart_toStartOf="parent">
<TextView <TextView