From ae3b77123875cd469358975e99aca210fb13b601 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Sun, 11 Sep 2022 19:55:24 +0200 Subject: [PATCH] Add option to mark read chats while having open without reading Change-Id: I75a136b1bdfd3e6667bb43b43ff8fcaab275e7d9 --- library/ui-strings/src/main/res/values/strings_sc.xml | 2 +- .../app/features/home/room/detail/RoomDetailAction.kt | 2 +- .../app/features/home/room/detail/TimelineFragment.kt | 6 +++++- .../features/home/room/detail/TimelineViewModel.kt | 11 ++++++----- vector/src/main/res/menu/menu_timeline.xml | 5 +++++ 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/library/ui-strings/src/main/res/values/strings_sc.xml b/library/ui-strings/src/main/res/values/strings_sc.xml index 5d973d59b3..783b7b21b5 100644 --- a/library/ui-strings/src/main/res/values/strings_sc.xml +++ b/library/ui-strings/src/main/res/values/strings_sc.xml @@ -1,5 +1,5 @@ - + Normal priority diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt index 3fa0d90aa1..a8dea4626c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt @@ -39,7 +39,7 @@ sealed class RoomDetailAction : VectorViewModelAction { data class RedactAction(val targetEventId: String, val reason: String? = "") : RoomDetailAction() data class UpdateQuickReactAction(val targetEventId: String, val selectedReaction: String, val add: Boolean) : RoomDetailAction() data class NavigateToEvent(val eventId: String, val highlight: Boolean) : RoomDetailAction() - object MarkAllAsRead : RoomDetailAction() + data class MarkAllAsRead(val forceIfOpenedAnonymously: Boolean = false) : RoomDetailAction() data class DownloadOrOpen(val eventId: String, val senderId: String?, val messageFileContent: MessageWithAttachmentContent) : RoomDetailAction() object JoinAndOpenReplacementRoom : RoomDetailAction() object OnClickMisconfiguredEncryption : RoomDetailAction() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index 3b2177cc6e..89034421b3 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -1073,7 +1073,7 @@ class TimelineFragment : onJumpToReadMarkerClicked() } views.jumpToReadMarkerView.setOnCloseIconClickListener { - timelineViewModel.handle(RoomDetailAction.MarkAllAsRead) + timelineViewModel.handle(RoomDetailAction.MarkAllAsRead()) } } @@ -1291,6 +1291,10 @@ class TimelineFragment : navigator.openRoomProfile(requireActivity(), timelineArgs.roomId) true } + R.id.menu_mark_as_read -> { + timelineViewModel.handle(RoomDetailAction.MarkAllAsRead(forceIfOpenedAnonymously = true)) + true + } R.id.dev_hidden_events -> { item.toggleExec { shouldShow -> vectorPreferences.setShouldShowHiddenEvents(shouldShow) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt index 59e6f97a3c..bd5ef13314 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt @@ -472,7 +472,7 @@ class TimelineViewModel @AssistedInject constructor( is RoomDetailAction.OnClickMisconfiguredEncryption -> handleClickMisconfiguredE2E() is RoomDetailAction.ResendMessage -> handleResendEvent(action) is RoomDetailAction.RemoveFailedEcho -> handleRemove(action) - is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead() + is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead(action) is RoomDetailAction.ReportContent -> handleReportContent(action) is RoomDetailAction.IgnoreUser -> handleIgnoreUser(action) is RoomDetailAction.EnterTrackingUnreadMessagesState -> startTrackingUnreadMessages(action) @@ -835,6 +835,7 @@ class TimelineViewModel @AssistedInject constructor( // SC extras start R.id.show_room_info -> true // SC R.id.show_participants -> true // SC + R.id.menu_mark_as_read -> initialState.openAnonymously // SC dev start R.id.dev_bubble_style, R.id.dev_hidden_events, @@ -1120,11 +1121,11 @@ class TimelineViewModel @AssistedInject constructor( */ private fun TimelineEvent.indexOfEvent(): Int = timeline?.getIndexOfEvent(eventId) ?: Int.MAX_VALUE - private fun handleMarkAllAsRead() { + private fun handleMarkAllAsRead(action: RoomDetailAction.MarkAllAsRead) { if (room == null) return setState { copy(unreadState = UnreadState.HasNoUnread) } viewModelScope.launch { - tryOrNullAnon { room.readService().markAsRead(ReadService.MarkAsReadParams.BOTH) } + tryOrNullAnon(action.forceIfOpenedAnonymously) { room.readService().markAsRead(ReadService.MarkAsReadParams.BOTH) } } } @@ -1481,8 +1482,8 @@ class TimelineViewModel @AssistedInject constructor( return initialState.openAtFirstUnread ?: vectorPreferences.loadRoomAtFirstUnread() } - private inline fun tryOrNullAnon(operation: () -> A): A? { - if (initialState.openAnonymously) { + private inline fun tryOrNullAnon(forceAllow: Boolean = false, operation: () -> A): A? { + if (initialState.openAnonymously && !forceAllow) { return null } return tryOrNull { operation() } diff --git a/vector/src/main/res/menu/menu_timeline.xml b/vector/src/main/res/menu/menu_timeline.xml index 24ba3e1b2f..797abe3619 100644 --- a/vector/src/main/res/menu/menu_timeline.xml +++ b/vector/src/main/res/menu/menu_timeline.xml @@ -168,6 +168,11 @@ + +