Make single overview page optional
Allow tabbed layout like element
This commit is contained in:
parent
2712ff9d84
commit
f0f7ef4dd8
@ -90,8 +90,12 @@ class HomeDetailFragment @Inject constructor(
|
|||||||
|
|
||||||
withState(viewModel) {
|
withState(viewModel) {
|
||||||
// Update the navigation view if needed (for when we restore the tabs)
|
// Update the navigation view if needed (for when we restore the tabs)
|
||||||
//bottomNavigationView.selectedItemId = it.displayMode.toMenuId()
|
if (it.displayMode == RoomListDisplayMode.ALL) {
|
||||||
bottomNavigationView.visibility = View.GONE
|
bottomNavigationView.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
bottomNavigationView.selectedItemId = it.displayMode.toMenuId()
|
||||||
|
bottomNavigationView.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.selectSubscribe(this, HomeDetailViewState::groupSummary) { groupSummary ->
|
viewModel.selectSubscribe(this, HomeDetailViewState::groupSummary) { groupSummary ->
|
||||||
@ -131,6 +135,14 @@ class HomeDetailFragment @Inject constructor(
|
|||||||
super.onResume()
|
super.onResume()
|
||||||
// update notification tab if needed
|
// update notification tab if needed
|
||||||
checkNotificationTabStatus()
|
checkNotificationTabStatus()
|
||||||
|
// Recreate if single-mode overview status changed
|
||||||
|
withState(viewModel) {
|
||||||
|
if ((it.displayMode == RoomListDisplayMode.ALL) != vectorPreferences.singleOverview()) {
|
||||||
|
Timber.i("Restart due to single-overview setting change")
|
||||||
|
startActivity(activity?.intent)
|
||||||
|
activity?.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkNotificationTabStatus() {
|
private fun checkNotificationTabStatus() {
|
||||||
|
@ -30,6 +30,7 @@ import im.vector.matrix.rx.rx
|
|||||||
import im.vector.riotx.core.extensions.exhaustive
|
import im.vector.riotx.core.extensions.exhaustive
|
||||||
import im.vector.riotx.core.platform.VectorViewModel
|
import im.vector.riotx.core.platform.VectorViewModel
|
||||||
import im.vector.riotx.core.utils.DataSource
|
import im.vector.riotx.core.utils.DataSource
|
||||||
|
import im.vector.riotx.features.home.RoomListDisplayMode
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -217,6 +218,7 @@ class RoomListViewModel @Inject constructor(initialState: RoomListViewState,
|
|||||||
val favourites = ArrayList<RoomSummary>()
|
val favourites = ArrayList<RoomSummary>()
|
||||||
val directChats = ArrayList<RoomSummary>(rooms.size)
|
val directChats = ArrayList<RoomSummary>(rooms.size)
|
||||||
val groupRooms = ArrayList<RoomSummary>(rooms.size)
|
val groupRooms = ArrayList<RoomSummary>(rooms.size)
|
||||||
|
val normalPriority = ArrayList<RoomSummary>(rooms.size)
|
||||||
val lowPriorities = ArrayList<RoomSummary>()
|
val lowPriorities = ArrayList<RoomSummary>()
|
||||||
val serverNotices = ArrayList<RoomSummary>()
|
val serverNotices = ArrayList<RoomSummary>()
|
||||||
|
|
||||||
@ -229,15 +231,25 @@ class RoomListViewModel @Inject constructor(initialState: RoomListViewState,
|
|||||||
tags.contains(RoomTag.ROOM_TAG_SERVER_NOTICE) -> serverNotices.add(room)
|
tags.contains(RoomTag.ROOM_TAG_SERVER_NOTICE) -> serverNotices.add(room)
|
||||||
tags.contains(RoomTag.ROOM_TAG_FAVOURITE) -> favourites.add(room)
|
tags.contains(RoomTag.ROOM_TAG_FAVOURITE) -> favourites.add(room)
|
||||||
tags.contains(RoomTag.ROOM_TAG_LOW_PRIORITY) -> lowPriorities.add(room)
|
tags.contains(RoomTag.ROOM_TAG_LOW_PRIORITY) -> lowPriorities.add(room)
|
||||||
//room.isDirect -> directChats.add(room)
|
room.isDirect -> {
|
||||||
else -> groupRooms.add(room)
|
directChats.add(room)
|
||||||
|
normalPriority.add(room)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
groupRooms.add(room)
|
||||||
|
normalPriority.add(room)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return RoomSummaries().apply {
|
return RoomSummaries().apply {
|
||||||
put(RoomCategory.INVITE, invites)
|
put(RoomCategory.INVITE, invites)
|
||||||
put(RoomCategory.FAVOURITE, favourites)
|
put(RoomCategory.FAVOURITE, favourites)
|
||||||
|
if (displayMode == RoomListDisplayMode.ALL) {
|
||||||
|
put(RoomCategory.COMBINED, normalPriority)
|
||||||
|
} else {
|
||||||
put(RoomCategory.DIRECT, directChats)
|
put(RoomCategory.DIRECT, directChats)
|
||||||
put(RoomCategory.GROUP, groupRooms)
|
put(RoomCategory.GROUP, groupRooms)
|
||||||
|
}
|
||||||
put(RoomCategory.LOW_PRIORITY, lowPriorities)
|
put(RoomCategory.LOW_PRIORITY, lowPriorities)
|
||||||
put(RoomCategory.SERVER_NOTICE, serverNotices)
|
put(RoomCategory.SERVER_NOTICE, serverNotices)
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ data class RoomListViewState(
|
|||||||
val isFavouriteRoomsExpanded: Boolean = true,
|
val isFavouriteRoomsExpanded: Boolean = true,
|
||||||
val isDirectRoomsExpanded: Boolean = true,
|
val isDirectRoomsExpanded: Boolean = true,
|
||||||
val isGroupRoomsExpanded: Boolean = true,
|
val isGroupRoomsExpanded: Boolean = true,
|
||||||
|
val isCombinedRoomsExpanded: Boolean = true,
|
||||||
val isLowPriorityRoomsExpanded: Boolean = true,
|
val isLowPriorityRoomsExpanded: Boolean = true,
|
||||||
val isServerNoticeRoomsExpanded: Boolean = true
|
val isServerNoticeRoomsExpanded: Boolean = true
|
||||||
) : MvRxState {
|
) : MvRxState {
|
||||||
@ -48,6 +49,7 @@ data class RoomListViewState(
|
|||||||
RoomCategory.FAVOURITE -> isFavouriteRoomsExpanded
|
RoomCategory.FAVOURITE -> isFavouriteRoomsExpanded
|
||||||
RoomCategory.DIRECT -> isDirectRoomsExpanded
|
RoomCategory.DIRECT -> isDirectRoomsExpanded
|
||||||
RoomCategory.GROUP -> isGroupRoomsExpanded
|
RoomCategory.GROUP -> isGroupRoomsExpanded
|
||||||
|
RoomCategory.COMBINED -> isCombinedRoomsExpanded
|
||||||
RoomCategory.LOW_PRIORITY -> isLowPriorityRoomsExpanded
|
RoomCategory.LOW_PRIORITY -> isLowPriorityRoomsExpanded
|
||||||
RoomCategory.SERVER_NOTICE -> isServerNoticeRoomsExpanded
|
RoomCategory.SERVER_NOTICE -> isServerNoticeRoomsExpanded
|
||||||
}
|
}
|
||||||
@ -59,6 +61,7 @@ data class RoomListViewState(
|
|||||||
RoomCategory.FAVOURITE -> copy(isFavouriteRoomsExpanded = !isFavouriteRoomsExpanded)
|
RoomCategory.FAVOURITE -> copy(isFavouriteRoomsExpanded = !isFavouriteRoomsExpanded)
|
||||||
RoomCategory.DIRECT -> copy(isDirectRoomsExpanded = !isDirectRoomsExpanded)
|
RoomCategory.DIRECT -> copy(isDirectRoomsExpanded = !isDirectRoomsExpanded)
|
||||||
RoomCategory.GROUP -> copy(isGroupRoomsExpanded = !isGroupRoomsExpanded)
|
RoomCategory.GROUP -> copy(isGroupRoomsExpanded = !isGroupRoomsExpanded)
|
||||||
|
RoomCategory.COMBINED -> copy(isCombinedRoomsExpanded = !isCombinedRoomsExpanded)
|
||||||
RoomCategory.LOW_PRIORITY -> copy(isLowPriorityRoomsExpanded = !isLowPriorityRoomsExpanded)
|
RoomCategory.LOW_PRIORITY -> copy(isLowPriorityRoomsExpanded = !isLowPriorityRoomsExpanded)
|
||||||
RoomCategory.SERVER_NOTICE -> copy(isServerNoticeRoomsExpanded = !isServerNoticeRoomsExpanded)
|
RoomCategory.SERVER_NOTICE -> copy(isServerNoticeRoomsExpanded = !isServerNoticeRoomsExpanded)
|
||||||
}
|
}
|
||||||
@ -78,8 +81,8 @@ enum class RoomCategory(@StringRes val titleRes: Int) {
|
|||||||
INVITE(R.string.invitations_header),
|
INVITE(R.string.invitations_header),
|
||||||
FAVOURITE(R.string.bottom_action_favourites),
|
FAVOURITE(R.string.bottom_action_favourites),
|
||||||
DIRECT(R.string.bottom_action_people_x),
|
DIRECT(R.string.bottom_action_people_x),
|
||||||
//GROUP(R.string.bottom_action_rooms),
|
GROUP(R.string.bottom_action_rooms),
|
||||||
GROUP(R.string.normal_priority_header),
|
COMBINED(R.string.normal_priority_header),
|
||||||
LOW_PRIORITY(R.string.low_priority_header),
|
LOW_PRIORITY(R.string.low_priority_header),
|
||||||
SERVER_NOTICE(R.string.system_alerts_header)
|
SERVER_NOTICE(R.string.system_alerts_header)
|
||||||
}
|
}
|
||||||
|
@ -96,6 +96,7 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
|||||||
private const val SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_KEY = "SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_KEY"
|
private const val SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_KEY = "SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_KEY"
|
||||||
private const val SETTINGS_VIBRATE_ON_MENTION_KEY = "SETTINGS_VIBRATE_ON_MENTION_KEY"
|
private const val SETTINGS_VIBRATE_ON_MENTION_KEY = "SETTINGS_VIBRATE_ON_MENTION_KEY"
|
||||||
private const val SETTINGS_SEND_MESSAGE_WITH_ENTER = "SETTINGS_SEND_MESSAGE_WITH_ENTER"
|
private const val SETTINGS_SEND_MESSAGE_WITH_ENTER = "SETTINGS_SEND_MESSAGE_WITH_ENTER"
|
||||||
|
const val SETTINGS_SINGLE_OVERVIEW = "SETTINGS_SINGLE_OVERVIEW"
|
||||||
|
|
||||||
// Help
|
// Help
|
||||||
private const val SETTINGS_SHOULD_SHOW_HELP_ON_ROOM_LIST_KEY = "SETTINGS_SHOULD_SHOW_HELP_ON_ROOM_LIST_KEY"
|
private const val SETTINGS_SHOULD_SHOW_HELP_ON_ROOM_LIST_KEY = "SETTINGS_SHOULD_SHOW_HELP_ON_ROOM_LIST_KEY"
|
||||||
@ -812,4 +813,8 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
|||||||
fun useFlagSecure(): Boolean {
|
fun useFlagSecure(): Boolean {
|
||||||
return defaultPrefs.getBoolean(SETTINGS_SECURITY_USE_FLAG_SECURE, false)
|
return defaultPrefs.getBoolean(SETTINGS_SECURITY_USE_FLAG_SECURE, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun singleOverview(): Boolean {
|
||||||
|
return defaultPrefs.getBoolean(SETTINGS_SINGLE_OVERVIEW, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,9 +37,10 @@ class SharedPreferencesUiStateRepository @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getDisplayMode(): RoomListDisplayMode {
|
override fun getDisplayMode(): RoomListDisplayMode {
|
||||||
return RoomListDisplayMode.ALL
|
return if (vectorPreferences.singleOverview()) {
|
||||||
/*
|
RoomListDisplayMode.ALL
|
||||||
return when (sharedPreferences.getInt(KEY_DISPLAY_MODE, VALUE_DISPLAY_MODE_CATCHUP)) {
|
} else {
|
||||||
|
when (sharedPreferences.getInt(KEY_DISPLAY_MODE, VALUE_DISPLAY_MODE_CATCHUP)) {
|
||||||
VALUE_DISPLAY_MODE_PEOPLE -> RoomListDisplayMode.PEOPLE
|
VALUE_DISPLAY_MODE_PEOPLE -> RoomListDisplayMode.PEOPLE
|
||||||
VALUE_DISPLAY_MODE_ROOMS -> RoomListDisplayMode.ROOMS
|
VALUE_DISPLAY_MODE_ROOMS -> RoomListDisplayMode.ROOMS
|
||||||
else -> if (vectorPreferences.labAddNotificationTab()) {
|
else -> if (vectorPreferences.labAddNotificationTab()) {
|
||||||
@ -48,7 +49,7 @@ class SharedPreferencesUiStateRepository @Inject constructor(
|
|||||||
RoomListDisplayMode.PEOPLE
|
RoomListDisplayMode.PEOPLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun storeDisplayMode(displayMode: RoomListDisplayMode) {
|
override fun storeDisplayMode(displayMode: RoomListDisplayMode) {
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
|
<string name="settings_single_overview">Vereinte Chat-Übersicht</string>
|
||||||
|
<string name="settings_single_overview_summary">Zeige sowohl Direktnachrichten als auch Gruppenchats in einer gemeinsamen Übersicht</string>
|
||||||
|
|
||||||
<string name="settings_dark_theme">Nacht-Design</string>
|
<string name="settings_dark_theme">Nacht-Design</string>
|
||||||
<string name="sc_light_theme">SC Hell</string>
|
<string name="sc_light_theme">SC Hell</string>
|
||||||
<string name="sc_theme">SC Schwarz</string>
|
<string name="sc_theme">SC Schwarz</string>
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
|
<string name="settings_single_overview">Combined chat overview</string>
|
||||||
|
<string name="settings_single_overview_summary">View both direct messages and rooms on one page</string>
|
||||||
|
|
||||||
<string name="settings_dark_theme">Night Theme</string>
|
<string name="settings_dark_theme">Night Theme</string>
|
||||||
<string name="sc_light_theme">SC Light</string>
|
<string name="sc_light_theme">SC Light</string>
|
||||||
<string name="sc_theme">SC Black</string>
|
<string name="sc_theme">SC Black</string>
|
||||||
|
@ -39,6 +39,12 @@
|
|||||||
android:title="@string/bubble_style"
|
android:title="@string/bubble_style"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
|
|
||||||
|
<im.vector.riotx.core.preference.VectorSwitchPreference
|
||||||
|
android:defaultValue="true"
|
||||||
|
android:key="SETTINGS_SINGLE_OVERVIEW"
|
||||||
|
android:summary="@string/settings_single_overview_summary"
|
||||||
|
android:title="@string/settings_single_overview" />
|
||||||
|
|
||||||
<im.vector.riotx.core.preference.VectorPreference
|
<im.vector.riotx.core.preference.VectorPreference
|
||||||
android:dialogTitle="@string/font_size"
|
android:dialogTitle="@string/font_size"
|
||||||
android:key="SETTINGS_INTERFACE_TEXT_SIZE_KEY"
|
android:key="SETTINGS_INTERFACE_TEXT_SIZE_KEY"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user