diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt
index c501553f52..7e61333933 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt
@@ -51,6 +51,11 @@ interface ReadService {
*/
suspend fun setMarkedUnread(markedUnread: Boolean)
+ /**
+ * Change the explicitly set unread marker flag
+ */
+ suspend fun setMarkedUnreadFlag(markedUnread: Boolean)
+
/**
* Check if an event is already read, ie. your read receipt is set on a more recent event.
*/
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt
index 6cb269fa5e..29ef957df8 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt
@@ -80,7 +80,7 @@ internal class DefaultReadService @AssistedInject constructor(
}
}
- private suspend fun setMarkedUnreadFlag(markedUnread: Boolean) {
+ override suspend fun setMarkedUnreadFlag(markedUnread: Boolean) {
val params = SetMarkedUnreadTask.Params(roomId, markedUnread = markedUnread)
setMarkedUnreadTask.execute(params)
}
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 2165b6dba4..9734ec6097 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
@@ -195,10 +195,14 @@ class TimelineViewModel @AssistedInject constructor(
setupPreviewUrlObservers()
room.getRoomSummaryLive()
viewModelScope.launch(Dispatchers.IO) {
- if (!loadRoomAtFirstUnread()) {
- tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) }
+ if (loadRoomAtFirstUnread()) {
+ if (vectorPreferences.readReceiptFollowsReadMarker()) {
+ tryOrNull { room.setMarkedUnreadFlag(false) }
+ } else {
+ tryOrNull { room.setMarkedUnread(false) }
+ }
} else {
- tryOrNull { room.setMarkedUnread(false) }
+ tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) }
}
}
// Inform the SDK that the room is displayed
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
index d21076a4b9..d04988a2d7 100755
--- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
@@ -217,6 +217,7 @@ class VectorPreferences @Inject constructor(private val context: Context, privat
private const val SETTINGS_ENABLE_SPACE_PAGER = "SETTINGS_ENABLE_SPACE_PAGER"
private const val SETTINGS_NOTIF_ONLY_ALERT_ONCE = "SETTINGS_NOTIF_ONLY_ALERT_ONCE"
private const val SETTINGS_HIDE_CALL_BUTTONS = "SETTINGS_HIDE_CALL_BUTTONS"
+ private const val SETTINGS_READ_RECEIPT_FOLLOWS_READ_MARKER = "SETTINGS_READ_RECEIPT_FOLLOWS_READ_MARKER"
private const val DID_ASK_TO_ENABLE_SESSION_PUSH = "DID_ASK_TO_ENABLE_SESSION_PUSH"
@@ -1089,6 +1090,11 @@ class VectorPreferences @Inject constructor(private val context: Context, privat
return defaultPrefs.getBoolean(SETTINGS_HIDE_CALL_BUTTONS, false)
}
+ // SC addition
+ fun readReceiptFollowsReadMarker(): Boolean {
+ return defaultPrefs.getBoolean(SETTINGS_READ_RECEIPT_FOLLOWS_READ_MARKER, false)
+ }
+
/**
* I likely do more fresh installs of the app than anyone else, so a shortcut to change some of the default settings to
* my preferred values can safe me some time
@@ -1112,6 +1118,7 @@ class VectorPreferences @Inject constructor(private val context: Context, privat
.putBoolean(SETTINGS_UNIFIED_PUSH_FORCE_CUSTOM_GATEWAY, true)
.putBoolean(SETTINGS_AGGREGATE_UNREAD_COUNTS, false)
.putBoolean(SETTINGS_ENABLE_SPACE_PAGER, true)
+ .putBoolean(SETTINGS_READ_RECEIPT_FOLLOWS_READ_MARKER, true)
.apply()
}
diff --git a/vector/src/main/res/values/strings_sc.xml b/vector/src/main/res/values/strings_sc.xml
index 26dd0ef67d..0025119d86 100644
--- a/vector/src/main/res/values/strings_sc.xml
+++ b/vector/src/main/res/values/strings_sc.xml
@@ -183,4 +183,7 @@
Element features
Room list
Timeline
+
+ Only mark chats as read if fully read
+ Do not update your read receipt when opening the room, but only gradually while reading
diff --git a/vector/src/main/res/xml/vector_settings_labs.xml b/vector/src/main/res/xml/vector_settings_labs.xml
index f2403593c3..ad53514dc8 100644
--- a/vector/src/main/res/xml/vector_settings_labs.xml
+++ b/vector/src/main/res/xml/vector_settings_labs.xml
@@ -29,6 +29,13 @@
android:title="@string/settings_open_chats_at_first_unread"
android:summary="@string/settings_open_chats_at_first_unread_summary" />
+
+