Remember expand status of sections in the overview again
Change-Id: I3648e959de8a12d525d73da642b6ce6ae6a5ba7a
This commit is contained in:
parent
2020765b77
commit
0aee3cf68c
|
@ -30,4 +30,5 @@ sealed class RoomListAction : VectorViewModelAction {
|
|||
data class ToggleTag(val roomId: String, val tag: String) : RoomListAction()
|
||||
data class LeaveRoom(val roomId: String) : RoomListAction()
|
||||
data class SetMarkedUnread(val roomId: String, val markedUnread: Boolean) : RoomListAction()
|
||||
data class SetSectionExpanded(val section: RoomsSection, val expanded: Boolean) : RoomListAction()
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package im.vector.app.features.home.room.list
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.view.LayoutInflater
|
||||
|
@ -25,6 +26,7 @@ import android.view.ViewGroup
|
|||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.recyclerview.widget.ConcatAdapter
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -131,6 +133,12 @@ class RoomListFragment @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
|
||||
persistExpandStatus()
|
||||
}
|
||||
|
||||
private fun refreshCollapseStates() {
|
||||
var contentInsertIndex = 1
|
||||
roomListViewModel.sections.forEachIndexed { index, roomsSection ->
|
||||
|
@ -157,16 +165,6 @@ class RoomListFragment @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
|
||||
/* TODO-SC-merge: remember expand state for priority headers
|
||||
withState(roomListViewModel) {
|
||||
state -> context?.let { state.persistWithContext(it, roomListParams.displayMode) }
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
override fun showFailure(throwable: Throwable) {
|
||||
showErrorInSnackbar(throwable)
|
||||
}
|
||||
|
@ -308,6 +306,11 @@ class RoomListFragment @Inject constructor(
|
|||
|
||||
this.concatAdapter = concatAdapter
|
||||
views.roomListView.adapter = concatAdapter
|
||||
|
||||
// Load initial expand statuses from settings
|
||||
roomListViewModel.sections.forEach { section ->
|
||||
roomListViewModel.handle(RoomListAction.SetSectionExpanded(section, shouldInitiallyExpand(section)))
|
||||
}
|
||||
}
|
||||
|
||||
private val showFabRunnable = Runnable {
|
||||
|
@ -463,4 +466,35 @@ class RoomListFragment @Inject constructor(
|
|||
override fun createRoom(initialName: String) {
|
||||
navigator.openCreateRoom(requireActivity(), initialName)
|
||||
}
|
||||
|
||||
|
||||
// SC addition: remember expanded sections across restarts
|
||||
companion object {
|
||||
const val ROOM_LIST_ROOM_EXPANDED_ANY_PREFIX = "ROOM_LIST_ROOM_EXPANDED_"
|
||||
}
|
||||
|
||||
fun persistExpandStatus() {
|
||||
val spEdit = getSharedPreferences().edit()
|
||||
roomListViewModel.sections.forEach{section ->
|
||||
val isExpanded = section.isExpanded.value
|
||||
if (isExpanded != null) {
|
||||
val pref = getRoomListExpandedPref(section)
|
||||
spEdit.putBoolean(pref, isExpanded)
|
||||
}
|
||||
}
|
||||
spEdit.apply()
|
||||
}
|
||||
|
||||
private fun shouldInitiallyExpand(section: RoomsSection): Boolean {
|
||||
val sp = getSharedPreferences()
|
||||
val pref = getRoomListExpandedPref(section)
|
||||
return sp.getBoolean(pref, true)
|
||||
}
|
||||
|
||||
private fun getSharedPreferences(): SharedPreferences {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||
}
|
||||
private fun getRoomListExpandedPref(section: RoomsSection): String {
|
||||
return ROOM_LIST_ROOM_EXPANDED_ANY_PREFIX + section.sectionName + roomListParams.displayMode.toString()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,6 +189,7 @@ class RoomListViewModel @Inject constructor(
|
|||
is RoomListAction.ChangeRoomNotificationState -> handleChangeNotificationMode(action)
|
||||
is RoomListAction.ToggleTag -> handleToggleTag(action)
|
||||
is RoomListAction.SetMarkedUnread -> handleSetMarkedUnread(action)
|
||||
is RoomListAction.SetSectionExpanded -> handleSetSectionExpanded(action.section, action.expanded)
|
||||
is RoomListAction.ToggleSection -> handleToggleSection(action.section)
|
||||
}.exhaustive
|
||||
}
|
||||
|
@ -254,6 +255,10 @@ class RoomListViewModel @Inject constructor(
|
|||
*/
|
||||
}
|
||||
|
||||
private fun handleSetSectionExpanded(roomSection: RoomsSection, expanded: Boolean) {
|
||||
roomSection.isExpanded.postValue(expanded)
|
||||
}
|
||||
|
||||
private fun handleFilter(action: RoomListAction.FilterWith) {
|
||||
setState {
|
||||
copy(
|
||||
|
|
Loading…
Reference in New Issue