mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-11-28 22:18:46 +03:00
Add option to mark read chats while having open without reading
Change-Id: I75a136b1bdfd3e6667bb43b43ff8fcaab275e7d9
This commit is contained in:
parent
293304b2c4
commit
ae3b771238
5 changed files with 18 additions and 8 deletions
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||||
|
|
||||||
<string name="normal_priority_header">Normal priority</string>
|
<string name="normal_priority_header">Normal priority</string>
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ sealed class RoomDetailAction : VectorViewModelAction {
|
||||||
data class RedactAction(val targetEventId: String, val reason: String? = "") : RoomDetailAction()
|
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 UpdateQuickReactAction(val targetEventId: String, val selectedReaction: String, val add: Boolean) : RoomDetailAction()
|
||||||
data class NavigateToEvent(val eventId: String, val highlight: 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()
|
data class DownloadOrOpen(val eventId: String, val senderId: String?, val messageFileContent: MessageWithAttachmentContent) : RoomDetailAction()
|
||||||
object JoinAndOpenReplacementRoom : RoomDetailAction()
|
object JoinAndOpenReplacementRoom : RoomDetailAction()
|
||||||
object OnClickMisconfiguredEncryption : RoomDetailAction()
|
object OnClickMisconfiguredEncryption : RoomDetailAction()
|
||||||
|
|
|
@ -1073,7 +1073,7 @@ class TimelineFragment :
|
||||||
onJumpToReadMarkerClicked()
|
onJumpToReadMarkerClicked()
|
||||||
}
|
}
|
||||||
views.jumpToReadMarkerView.setOnCloseIconClickListener {
|
views.jumpToReadMarkerView.setOnCloseIconClickListener {
|
||||||
timelineViewModel.handle(RoomDetailAction.MarkAllAsRead)
|
timelineViewModel.handle(RoomDetailAction.MarkAllAsRead())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1291,6 +1291,10 @@ class TimelineFragment :
|
||||||
navigator.openRoomProfile(requireActivity(), timelineArgs.roomId)
|
navigator.openRoomProfile(requireActivity(), timelineArgs.roomId)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
R.id.menu_mark_as_read -> {
|
||||||
|
timelineViewModel.handle(RoomDetailAction.MarkAllAsRead(forceIfOpenedAnonymously = true))
|
||||||
|
true
|
||||||
|
}
|
||||||
R.id.dev_hidden_events -> {
|
R.id.dev_hidden_events -> {
|
||||||
item.toggleExec { shouldShow ->
|
item.toggleExec { shouldShow ->
|
||||||
vectorPreferences.setShouldShowHiddenEvents(shouldShow)
|
vectorPreferences.setShouldShowHiddenEvents(shouldShow)
|
||||||
|
|
|
@ -472,7 +472,7 @@ class TimelineViewModel @AssistedInject constructor(
|
||||||
is RoomDetailAction.OnClickMisconfiguredEncryption -> handleClickMisconfiguredE2E()
|
is RoomDetailAction.OnClickMisconfiguredEncryption -> handleClickMisconfiguredE2E()
|
||||||
is RoomDetailAction.ResendMessage -> handleResendEvent(action)
|
is RoomDetailAction.ResendMessage -> handleResendEvent(action)
|
||||||
is RoomDetailAction.RemoveFailedEcho -> handleRemove(action)
|
is RoomDetailAction.RemoveFailedEcho -> handleRemove(action)
|
||||||
is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead()
|
is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead(action)
|
||||||
is RoomDetailAction.ReportContent -> handleReportContent(action)
|
is RoomDetailAction.ReportContent -> handleReportContent(action)
|
||||||
is RoomDetailAction.IgnoreUser -> handleIgnoreUser(action)
|
is RoomDetailAction.IgnoreUser -> handleIgnoreUser(action)
|
||||||
is RoomDetailAction.EnterTrackingUnreadMessagesState -> startTrackingUnreadMessages(action)
|
is RoomDetailAction.EnterTrackingUnreadMessagesState -> startTrackingUnreadMessages(action)
|
||||||
|
@ -835,6 +835,7 @@ class TimelineViewModel @AssistedInject constructor(
|
||||||
// SC extras start
|
// SC extras start
|
||||||
R.id.show_room_info -> true // SC
|
R.id.show_room_info -> true // SC
|
||||||
R.id.show_participants -> true // SC
|
R.id.show_participants -> true // SC
|
||||||
|
R.id.menu_mark_as_read -> initialState.openAnonymously
|
||||||
// SC dev start
|
// SC dev start
|
||||||
R.id.dev_bubble_style,
|
R.id.dev_bubble_style,
|
||||||
R.id.dev_hidden_events,
|
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 TimelineEvent.indexOfEvent(): Int = timeline?.getIndexOfEvent(eventId) ?: Int.MAX_VALUE
|
||||||
|
|
||||||
private fun handleMarkAllAsRead() {
|
private fun handleMarkAllAsRead(action: RoomDetailAction.MarkAllAsRead) {
|
||||||
if (room == null) return
|
if (room == null) return
|
||||||
setState { copy(unreadState = UnreadState.HasNoUnread) }
|
setState { copy(unreadState = UnreadState.HasNoUnread) }
|
||||||
viewModelScope.launch {
|
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()
|
return initialState.openAtFirstUnread ?: vectorPreferences.loadRoomAtFirstUnread()
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <A>tryOrNullAnon(operation: () -> A): A? {
|
private inline fun <A>tryOrNullAnon(forceAllow: Boolean = false, operation: () -> A): A? {
|
||||||
if (initialState.openAnonymously) {
|
if (initialState.openAnonymously && !forceAllow) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
return tryOrNull { operation() }
|
return tryOrNull { operation() }
|
||||||
|
|
|
@ -168,6 +168,11 @@
|
||||||
</menu>
|
</menu>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_mark_as_read"
|
||||||
|
android:title="@string/room_list_quick_actions_mark_room_read"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_thread_timeline_view_in_room"
|
android:id="@+id/menu_thread_timeline_view_in_room"
|
||||||
android:icon="@drawable/ic_threads_view_in_room_24"
|
android:icon="@drawable/ic_threads_view_in_room_24"
|
||||||
|
|
Loading…
Reference in a new issue