From eed534060f871a8a6e72eace73ffb1cf7a6f0a16 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Sat, 15 May 2021 18:38:20 +0200 Subject: [PATCH] Expand status: remember for each space Change-Id: I2d733a433026304ab2a096abdf590de473cccc82 --- .../java/im/vector/app/AppStateHandler.kt | 7 +++++ .../home/room/list/RoomListFragment.kt | 30 +++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/app/AppStateHandler.kt b/vector/src/main/java/im/vector/app/AppStateHandler.kt index a2a242a3d9..f6a8c4a528 100644 --- a/vector/src/main/java/im/vector/app/AppStateHandler.kt +++ b/vector/src/main/java/im/vector/app/AppStateHandler.kt @@ -60,6 +60,8 @@ class AppStateHandler @Inject constructor( val selectedRoomGroupingObservable = selectedSpaceDataSource.observe() + var onSwitchSpaceListener: OnSwitchSpaceListener? = null + fun getCurrentRoomGroupingMethod(): RoomGroupingMethod? = selectedSpaceDataSource.currentValue?.orNull() fun setCurrentSpace(spaceId: String?, session: Session? = null) { @@ -75,6 +77,7 @@ class AppStateHandler @Inject constructor( } } } + onSwitchSpaceListener?.onSwitchSpace(spaceId) } fun setCurrentGroup(groupId: String?, session: Session? = null) { @@ -136,4 +139,8 @@ class AppStateHandler @Inject constructor( } } } + + interface OnSwitchSpaceListener { + fun onSwitchSpace(spaceId: String?) + } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt index 7a32c286bd..123fdcc6cb 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt @@ -35,6 +35,7 @@ import com.airbnb.epoxy.OnModelBuildFinishedListener import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState +import im.vector.app.AppStateHandler import im.vector.app.R import im.vector.app.core.dialogs.withColoredButton import im.vector.app.core.epoxy.LayoutManagerStateRestorer @@ -67,6 +68,7 @@ data class RoomListParams( ) : Parcelable class RoomListFragment @Inject constructor( + private val appStateHandler: AppStateHandler, private val pagedControllerFactory: RoomSummaryPagedControllerFactory, val roomListViewModelFactory: RoomListViewModel.Factory, private val notificationDrawerManager: NotificationDrawerManager, @@ -76,6 +78,7 @@ class RoomListFragment @Inject constructor( ) : VectorBaseFragment(), RoomListListener, OnBackPressed, + AppStateHandler.OnSwitchSpaceListener, NotifsFabMenuView.Listener { private var modelBuildListener: OnModelBuildFinishedListener? = null @@ -84,6 +87,8 @@ class RoomListFragment @Inject constructor( private val roomListViewModel: RoomListViewModel by fragmentViewModel() private lateinit var stateRestorer: LayoutManagerStateRestorer + private var expandStatusSpaceId: String? = null + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentRoomListBinding { return FragmentRoomListBinding.inflate(inflater, container, false) } @@ -133,6 +138,7 @@ class RoomListFragment @Inject constructor( (it.contentEpoxyController as? RoomSummaryPagedController)?.roomChangeMembershipStates = ms } } + appStateHandler.onSwitchSpaceListener = this } override fun onPause() { @@ -355,9 +361,7 @@ class RoomListFragment @Inject constructor( views.roomListView.adapter = concatAdapter // Load initial expand statuses from settings - roomListViewModel.sections.forEach { section -> - roomListViewModel.handle(RoomListAction.SetSectionExpanded(section, shouldInitiallyExpand(section))) - } + loadExpandStatus() } private val showFabRunnable = Runnable { @@ -527,10 +531,18 @@ class RoomListFragment @Inject constructor( // SC addition: remember expanded sections across restarts companion object { - const val ROOM_LIST_ROOM_EXPANDED_ANY_PREFIX = "ROOM_LIST_ROOM_EXPANDED_" + const val ROOM_LIST_ROOM_EXPANDED_ANY_PREFIX = "ROOM_LIST_ROOM_EXPANDED" } - fun persistExpandStatus() { + override fun onSwitchSpace(spaceId: String?) { + if (spaceId != expandStatusSpaceId) { + persistExpandStatus() + expandStatusSpaceId = spaceId + loadExpandStatus() + } + } + + private fun persistExpandStatus() { val spEdit = getSharedPreferences().edit() roomListViewModel.sections.forEach{section -> val isExpanded = section.isExpanded.value @@ -542,6 +554,12 @@ class RoomListFragment @Inject constructor( spEdit.apply() } + private fun loadExpandStatus() { + roomListViewModel.sections.forEach { section -> + roomListViewModel.handle(RoomListAction.SetSectionExpanded(section, shouldInitiallyExpand(section))) + } + } + private fun shouldInitiallyExpand(section: RoomsSection): Boolean { val sp = getSharedPreferences() val pref = getRoomListExpandedPref(section) @@ -552,6 +570,6 @@ class RoomListFragment @Inject constructor( return PreferenceManager.getDefaultSharedPreferences(context) } private fun getRoomListExpandedPref(section: RoomsSection): String { - return ROOM_LIST_ROOM_EXPANDED_ANY_PREFIX + section.sectionName + roomListParams.displayMode.toString() + return "${ROOM_LIST_ROOM_EXPANDED_ANY_PREFIX}_${section.sectionName}_${roomListParams.displayMode}_${expandStatusSpaceId}" } }