mirror of
https://github.com/element-hq/element-android
synced 2024-11-24 02:15:35 +03:00
Allow to filter all room member state events in timeline
This commit is contained in:
parent
abb9a0839a
commit
a1f98eb6bf
7 changed files with 88 additions and 24 deletions
|
@ -41,7 +41,7 @@ def getVersionCode() {
|
|||
if (gitBranchName() == "develop") {
|
||||
return generateVersionCodeFromTimestamp()
|
||||
} else {
|
||||
return generateVersionCodeFromTimestamp()
|
||||
return generateVersionCodeFromVersionName()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -40,4 +40,9 @@ class UserPreferencesProvider @Inject constructor(private val vectorPreferences:
|
|||
fun 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.timeline.helper.RoomSummaryHolder
|
||||
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.powerlevel.PowerLevelsObservableFactory
|
||||
import im.vector.app.features.settings.VectorLocale
|
||||
|
@ -106,7 +107,6 @@ import java.util.concurrent.atomic.AtomicBoolean
|
|||
|
||||
class RoomDetailViewModel @AssistedInject constructor(
|
||||
@Assisted private val initialState: RoomDetailViewState,
|
||||
userPreferencesProvider: UserPreferencesProvider,
|
||||
private val vectorPreferences: VectorPreferences,
|
||||
private val stringProvider: StringProvider,
|
||||
private val rainbowGenerator: RainbowGenerator,
|
||||
|
@ -115,34 +115,15 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||
private val stickerPickerActionHandler: StickerPickerActionHandler,
|
||||
private val roomSummaryHolder: RoomSummaryHolder,
|
||||
private val typingHelper: TypingHelper,
|
||||
private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager
|
||||
private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager,
|
||||
timelineSettingsFactory: TimelineSettingsFactory
|
||||
) : VectorViewModel<RoomDetailViewState, RoomDetailAction, RoomDetailViewEvents>(initialState), Timeline.Listener {
|
||||
|
||||
private val room = session.getRoom(initialState.roomId)!!
|
||||
private val eventId = initialState.eventId
|
||||
private val invisibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsInvisible>()
|
||||
private val visibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsVisible>()
|
||||
private val timelineSettings = if (userPreferencesProvider.shouldShowHiddenEvents()) {
|
||||
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 val timelineSettings = timelineSettingsFactory.create()
|
||||
private var timelineEvents = PublishRelay.create<List<TimelineEvent>>()
|
||||
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_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_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_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"
|
||||
|
@ -195,6 +196,7 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
|||
SETTINGS_ALWAYS_SHOW_TIMESTAMPS_KEY,
|
||||
SETTINGS_12_24_TIMESTAMPS_KEY,
|
||||
SETTINGS_SHOW_READ_RECEIPTS_KEY,
|
||||
SETTINGS_SHOW_ROOM_MEMBER_STATE_EVENTS_KEY,
|
||||
SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY,
|
||||
SETTINGS_SHOW_AVATAR_DISPLAY_NAME_CHANGES_MESSAGES_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)
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
|
|
|
@ -857,6 +857,8 @@
|
|||
<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_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_summary">Invites, kicks, and bans are unaffected.</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: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
|
||||
android:defaultValue="true"
|
||||
android:key="SETTINGS_SHOW_JOIN_LEAVE_MESSAGES_KEY"
|
||||
|
|
Loading…
Reference in a new issue