Allow to filter all room member state events in timeline
This commit is contained in:
parent
abb9a0839a
commit
a1f98eb6bf
|
@ -41,7 +41,7 @@ def getVersionCode() {
|
||||||
if (gitBranchName() == "develop") {
|
if (gitBranchName() == "develop") {
|
||||||
return generateVersionCodeFromTimestamp()
|
return generateVersionCodeFromTimestamp()
|
||||||
} else {
|
} else {
|
||||||
return generateVersionCodeFromTimestamp()
|
return generateVersionCodeFromVersionName()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,4 +40,9 @@ class UserPreferencesProvider @Inject constructor(private val vectorPreferences:
|
||||||
fun neverShowLongClickOnRoomHelpAgain() {
|
fun neverShowLongClickOnRoomHelpAgain() {
|
||||||
vectorPreferences.neverShowLongClickOnRoomHelpAgain()
|
vectorPreferences.neverShowLongClickOnRoomHelpAgain()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun shouldShowRoomMemberStateEvents(): Boolean {
|
||||||
|
return vectorPreferences.showRoomMemberStateEvents()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator
|
||||||
import im.vector.app.features.home.room.detail.sticker.StickerPickerActionHandler
|
import im.vector.app.features.home.room.detail.sticker.StickerPickerActionHandler
|
||||||
import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder
|
import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder
|
||||||
import im.vector.app.features.home.room.detail.timeline.helper.TimelineDisplayableEvents
|
import im.vector.app.features.home.room.detail.timeline.helper.TimelineDisplayableEvents
|
||||||
|
import im.vector.app.features.home.room.detail.timeline.helper.TimelineSettingsFactory
|
||||||
import im.vector.app.features.home.room.typing.TypingHelper
|
import im.vector.app.features.home.room.typing.TypingHelper
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
|
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
|
||||||
import im.vector.app.features.settings.VectorLocale
|
import im.vector.app.features.settings.VectorLocale
|
||||||
|
@ -106,7 +107,6 @@ import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
|
||||||
class RoomDetailViewModel @AssistedInject constructor(
|
class RoomDetailViewModel @AssistedInject constructor(
|
||||||
@Assisted private val initialState: RoomDetailViewState,
|
@Assisted private val initialState: RoomDetailViewState,
|
||||||
userPreferencesProvider: UserPreferencesProvider,
|
|
||||||
private val vectorPreferences: VectorPreferences,
|
private val vectorPreferences: VectorPreferences,
|
||||||
private val stringProvider: StringProvider,
|
private val stringProvider: StringProvider,
|
||||||
private val rainbowGenerator: RainbowGenerator,
|
private val rainbowGenerator: RainbowGenerator,
|
||||||
|
@ -115,34 +115,15 @@ class RoomDetailViewModel @AssistedInject constructor(
|
||||||
private val stickerPickerActionHandler: StickerPickerActionHandler,
|
private val stickerPickerActionHandler: StickerPickerActionHandler,
|
||||||
private val roomSummaryHolder: RoomSummaryHolder,
|
private val roomSummaryHolder: RoomSummaryHolder,
|
||||||
private val typingHelper: TypingHelper,
|
private val typingHelper: TypingHelper,
|
||||||
private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager
|
private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager,
|
||||||
|
timelineSettingsFactory: TimelineSettingsFactory
|
||||||
) : VectorViewModel<RoomDetailViewState, RoomDetailAction, RoomDetailViewEvents>(initialState), Timeline.Listener {
|
) : VectorViewModel<RoomDetailViewState, RoomDetailAction, RoomDetailViewEvents>(initialState), Timeline.Listener {
|
||||||
|
|
||||||
private val room = session.getRoom(initialState.roomId)!!
|
private val room = session.getRoom(initialState.roomId)!!
|
||||||
private val eventId = initialState.eventId
|
private val eventId = initialState.eventId
|
||||||
private val invisibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsInvisible>()
|
private val invisibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsInvisible>()
|
||||||
private val visibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsVisible>()
|
private val visibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsVisible>()
|
||||||
private val timelineSettings = if (userPreferencesProvider.shouldShowHiddenEvents()) {
|
private val timelineSettings = timelineSettingsFactory.create()
|
||||||
TimelineSettings(
|
|
||||||
initialSize = 30,
|
|
||||||
filters = TimelineEventFilters(
|
|
||||||
filterEdits = false,
|
|
||||||
filterRedacted = userPreferencesProvider.shouldShowRedactedMessages().not(),
|
|
||||||
filterUseless = false,
|
|
||||||
filterTypes = false),
|
|
||||||
buildReadReceipts = userPreferencesProvider.shouldShowReadReceipts())
|
|
||||||
} else {
|
|
||||||
TimelineSettings(
|
|
||||||
initialSize = 30,
|
|
||||||
filters = TimelineEventFilters(
|
|
||||||
filterEdits = true,
|
|
||||||
filterRedacted = userPreferencesProvider.shouldShowRedactedMessages().not(),
|
|
||||||
filterUseless = true,
|
|
||||||
filterTypes = true,
|
|
||||||
allowedTypes = TimelineDisplayableEvents.DISPLAYABLE_TYPES),
|
|
||||||
buildReadReceipts = userPreferencesProvider.shouldShowReadReceipts())
|
|
||||||
}
|
|
||||||
|
|
||||||
private var timelineEvents = PublishRelay.create<List<TimelineEvent>>()
|
private var timelineEvents = PublishRelay.create<List<TimelineEvent>>()
|
||||||
val timeline = room.createTimeline(eventId, timelineSettings)
|
val timeline = room.createTimeline(eventId, timelineSettings)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.home.room.detail.timeline.helper
|
||||||
|
|
||||||
|
import im.vector.app.core.resources.UserPreferencesProvider
|
||||||
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
|
import org.matrix.android.sdk.api.session.room.timeline.TimelineEventFilters
|
||||||
|
import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class TimelineSettingsFactory @Inject constructor(private val userPreferencesProvider: UserPreferencesProvider) {
|
||||||
|
|
||||||
|
fun create(): TimelineSettings {
|
||||||
|
return if (userPreferencesProvider.shouldShowHiddenEvents()) {
|
||||||
|
TimelineSettings(
|
||||||
|
initialSize = 30,
|
||||||
|
filters = TimelineEventFilters(
|
||||||
|
filterEdits = false,
|
||||||
|
filterRedacted = userPreferencesProvider.shouldShowRedactedMessages().not(),
|
||||||
|
filterUseless = false,
|
||||||
|
filterTypes = false),
|
||||||
|
buildReadReceipts = userPreferencesProvider.shouldShowReadReceipts())
|
||||||
|
} else {
|
||||||
|
val allowedTypes = TimelineDisplayableEvents.DISPLAYABLE_TYPES.filterDisplayableTypes()
|
||||||
|
TimelineSettings(
|
||||||
|
initialSize = 30,
|
||||||
|
filters = TimelineEventFilters(
|
||||||
|
filterEdits = true,
|
||||||
|
filterRedacted = userPreferencesProvider.shouldShowRedactedMessages().not(),
|
||||||
|
filterUseless = true,
|
||||||
|
filterTypes = true,
|
||||||
|
allowedTypes = allowedTypes),
|
||||||
|
buildReadReceipts = userPreferencesProvider.shouldShowReadReceipts())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun List<String>.filterDisplayableTypes(): List<String> {
|
||||||
|
return filter { type ->
|
||||||
|
when (type) {
|
||||||
|
EventType.STATE_ROOM_MEMBER -> userPreferencesProvider.shouldShowRoomMemberStateEvents()
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -93,6 +93,7 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
||||||
private const val SETTINGS_12_24_TIMESTAMPS_KEY = "SETTINGS_12_24_TIMESTAMPS_KEY"
|
private const val SETTINGS_12_24_TIMESTAMPS_KEY = "SETTINGS_12_24_TIMESTAMPS_KEY"
|
||||||
private const val SETTINGS_SHOW_READ_RECEIPTS_KEY = "SETTINGS_SHOW_READ_RECEIPTS_KEY"
|
private const val SETTINGS_SHOW_READ_RECEIPTS_KEY = "SETTINGS_SHOW_READ_RECEIPTS_KEY"
|
||||||
private const val SETTINGS_SHOW_REDACTED_KEY = "SETTINGS_SHOW_REDACTED_KEY"
|
private const val SETTINGS_SHOW_REDACTED_KEY = "SETTINGS_SHOW_REDACTED_KEY"
|
||||||
|
private const val SETTINGS_SHOW_ROOM_MEMBER_STATE_EVENTS_KEY = "SETTINGS_SHOW_ROOM_MEMBER_STATE_EVENTS_KEY"
|
||||||
private const val SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY = "SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY"
|
private const val SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY = "SETTINGS_SHOW_JOIN_LEAVE_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_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"
|
||||||
|
@ -195,6 +196,7 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
||||||
SETTINGS_ALWAYS_SHOW_TIMESTAMPS_KEY,
|
SETTINGS_ALWAYS_SHOW_TIMESTAMPS_KEY,
|
||||||
SETTINGS_12_24_TIMESTAMPS_KEY,
|
SETTINGS_12_24_TIMESTAMPS_KEY,
|
||||||
SETTINGS_SHOW_READ_RECEIPTS_KEY,
|
SETTINGS_SHOW_READ_RECEIPTS_KEY,
|
||||||
|
SETTINGS_SHOW_ROOM_MEMBER_STATE_EVENTS_KEY,
|
||||||
SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY,
|
SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY,
|
||||||
SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_KEY,
|
SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_KEY,
|
||||||
SETTINGS_MEDIA_SAVING_PERIOD_KEY,
|
SETTINGS_MEDIA_SAVING_PERIOD_KEY,
|
||||||
|
@ -343,6 +345,15 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
||||||
return defaultPrefs.getBoolean(SETTINGS_12_24_TIMESTAMPS_KEY, false)
|
return defaultPrefs.getBoolean(SETTINGS_12_24_TIMESTAMPS_KEY, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells if all room member state events should be shown in the messages list.
|
||||||
|
*
|
||||||
|
* @return true all room member state events should be shown in the messages list.
|
||||||
|
*/
|
||||||
|
fun showRoomMemberStateEvents(): Boolean {
|
||||||
|
return defaultPrefs.getBoolean(SETTINGS_SHOW_ROOM_MEMBER_STATE_EVENTS_KEY, true)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the join and leave membership events should be shown in the messages list.
|
* Tells if the join and leave membership events should be shown in the messages list.
|
||||||
*
|
*
|
||||||
|
|
|
@ -857,6 +857,8 @@
|
||||||
<string name="settings_12_24_timestamps">Show timestamps in 12-hour format</string>
|
<string name="settings_12_24_timestamps">Show timestamps in 12-hour format</string>
|
||||||
<string name="settings_show_read_receipts">Show read receipts</string>
|
<string name="settings_show_read_receipts">Show read receipts</string>
|
||||||
<string name="settings_show_read_receipts_summary">Click on the read receipts for a detailed list.</string>
|
<string name="settings_show_read_receipts_summary">Click on the read receipts for a detailed list.</string>
|
||||||
|
<string name="settings_show_room_member_state_events">Show room member state events</string>
|
||||||
|
<string name="settings_show_room_member_state_events_summary">Includes invite/join/left/kick/ban events and avatar/display name changes.</string>
|
||||||
<string name="settings_show_join_leave_messages">Show join and leave events</string>
|
<string name="settings_show_join_leave_messages">Show join and leave events</string>
|
||||||
<string name="settings_show_join_leave_messages_summary">Invites, kicks, and bans are unaffected.</string>
|
<string name="settings_show_join_leave_messages_summary">Invites, kicks, and bans are unaffected.</string>
|
||||||
<string name="settings_show_avatar_display_name_changes_messages">Show account events</string>
|
<string name="settings_show_avatar_display_name_changes_messages">Show account events</string>
|
||||||
|
|
|
@ -76,6 +76,12 @@
|
||||||
android:summary="@string/settings_show_redacted_summary"
|
android:summary="@string/settings_show_redacted_summary"
|
||||||
android:title="@string/settings_show_redacted" />
|
android:title="@string/settings_show_redacted" />
|
||||||
|
|
||||||
|
<im.vector.app.core.preference.VectorSwitchPreference
|
||||||
|
android:defaultValue="true"
|
||||||
|
android:key="SETTINGS_SHOW_ROOM_MEMBER_STATE_EVENTS_KEY"
|
||||||
|
android:summary="@string/settings_show_room_member_state_events_summary"
|
||||||
|
android:title="@string/settings_show_room_member_state_events" />
|
||||||
|
|
||||||
<im.vector.app.core.preference.VectorSwitchPreference
|
<im.vector.app.core.preference.VectorSwitchPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:key="SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY"
|
android:key="SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY"
|
||||||
|
|
Loading…
Reference in New Issue