Open room at bottom action if open at unread
Change-Id: Ia933c5a9f31c4025a34912a82f699e5c5abe8dd3
This commit is contained in:
parent
61140f3698
commit
9cb746d509
|
@ -229,7 +229,8 @@ data class RoomDetailArgs(
|
|||
val roomId: String,
|
||||
val eventId: String? = null,
|
||||
val sharedData: SharedData? = null,
|
||||
val openShareSpaceForId: String? = null
|
||||
val openShareSpaceForId: String? = null,
|
||||
val openAtFirstUnread: Boolean? = null
|
||||
) : Parcelable
|
||||
|
||||
class RoomDetailFragment @Inject constructor(
|
||||
|
|
|
@ -123,7 +123,7 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||
Timeline.Listener, ChatEffectManager.Delegate, CallProtocolsChecker.Listener {
|
||||
|
||||
private val room = session.getRoom(initialState.roomId)!!
|
||||
private val eventId = initialState.eventId ?: if (vectorPreferences.loadRoomAtFirstUnread()) room.roomSummary()?.readMarkerId else null
|
||||
private val eventId = initialState.eventId ?: if (loadRoomAtFirstUnread()) room.roomSummary()?.readMarkerId else null
|
||||
private val invisibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsInvisible>()
|
||||
private val visibleEventsObservable = BehaviorRelay.create<RoomDetailAction.TimelineEventTurnsVisible>()
|
||||
private var timelineEvents = MutableSharedFlow<List<TimelineEvent>>(0)
|
||||
|
@ -181,7 +181,7 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||
observePowerLevel()
|
||||
room.getRoomSummaryLive()
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
if (!vectorPreferences.loadRoomAtFirstUnread()) {
|
||||
if (!loadRoomAtFirstUnread()) {
|
||||
tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) }
|
||||
} else {
|
||||
tryOrNull { room.setMarkedUnread(false) }
|
||||
|
@ -564,7 +564,7 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||
mostRecentDisplayedEvent?.root?.eventId?.also {
|
||||
session.coroutineScope.launch(NonCancellable) {
|
||||
tryOrNull { room.setReadMarker(it) }
|
||||
if (vectorPreferences.loadRoomAtFirstUnread()) {
|
||||
if (loadRoomAtFirstUnread()) {
|
||||
tryOrNull { room.setReadReceipt(it) }
|
||||
}
|
||||
}
|
||||
|
@ -1148,4 +1148,8 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||
callManager.removeProtocolsCheckerListener(this)
|
||||
super.onCleared()
|
||||
}
|
||||
|
||||
private fun loadRoomAtFirstUnread(): Boolean {
|
||||
return initialState.openAtFirstUnread ?: vectorPreferences.loadRoomAtFirstUnread()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ data class JitsiState(
|
|||
data class RoomDetailViewState(
|
||||
val roomId: String,
|
||||
val eventId: String?,
|
||||
val openAtFirstUnread: Boolean? = null,
|
||||
val myRoomMember: Async<RoomMemberSummary> = Uninitialized,
|
||||
val asyncInviter: Async<RoomMemberSummary> = Uninitialized,
|
||||
val asyncRoomSummary: Async<RoomSummary> = Uninitialized,
|
||||
|
@ -74,7 +75,8 @@ data class RoomDetailViewState(
|
|||
roomId = args.roomId,
|
||||
eventId = args.eventId,
|
||||
// Also highlight the target event, if any
|
||||
highlightedEventId = args.eventId
|
||||
highlightedEventId = args.eventId,
|
||||
openAtFirstUnread = args.openAtFirstUnread
|
||||
)
|
||||
|
||||
fun isWebRTCCallOptionAvailable() = (asyncRoomSummary.invoke()?.joinedMembersCount ?: 0) <= 2
|
||||
|
|
|
@ -429,6 +429,9 @@ class RoomListFragment @Inject constructor(
|
|||
is RoomListQuickActionsSharedAction.MarkRead -> {
|
||||
roomListViewModel.handle(RoomListAction.SetMarkedUnread(quickAction.roomId, false))
|
||||
}
|
||||
is RoomListQuickActionsSharedAction.OpenAtBottom -> {
|
||||
navigator.openRoom(requireActivity(), quickAction.roomId, openAtFirstUnread = false)
|
||||
}
|
||||
is RoomListQuickActionsSharedAction.Leave -> {
|
||||
promptLeaveRoom(quickAction.roomId)
|
||||
}
|
||||
|
|
|
@ -76,12 +76,18 @@ class RoomListQuickActionsEpoxyController @Inject constructor(
|
|||
id("mark_unread_separator")
|
||||
}
|
||||
if (roomSummary.scIsUnread()) {
|
||||
RoomListQuickActionsSharedAction.MarkRead(roomSummary.roomId).toBottomSheetItem(-1)
|
||||
RoomListQuickActionsSharedAction.MarkRead(roomSummary.roomId).toBottomSheetItem(-2)
|
||||
} else {
|
||||
RoomListQuickActionsSharedAction.MarkUnread(roomSummary.roomId).toBottomSheetItem(-1)
|
||||
RoomListQuickActionsSharedAction.MarkUnread(roomSummary.roomId).toBottomSheetItem(-2)
|
||||
}
|
||||
}
|
||||
|
||||
if (vectorPreferences.loadRoomAtFirstUnread()) {
|
||||
// TODO can we check if position of roomSummary.readMarkerId is below or equal to
|
||||
// roomSummary.latestPreviewableOriginalContentEvent, and hide this otherwise?
|
||||
RoomListQuickActionsSharedAction.OpenAtBottom(roomSummary.roomId).toBottomSheetItem(-1)
|
||||
}
|
||||
|
||||
// Notifications
|
||||
bottomSheetDividerItem {
|
||||
id("notifications_separator")
|
||||
|
|
|
@ -37,6 +37,11 @@ sealed class RoomListQuickActionsSharedAction(
|
|||
R.drawable.ic_room_actions_mark_room_read
|
||||
)
|
||||
|
||||
data class OpenAtBottom(val roomId: String) : RoomListQuickActionsSharedAction(
|
||||
R.string.room_list_quick_actions_open_at_bottom,
|
||||
R.drawable.ic_room_actions_open_at_bottom
|
||||
)
|
||||
|
||||
data class NotificationsAllNoisy(val roomId: String) : RoomListQuickActionsSharedAction(
|
||||
R.string.room_list_quick_actions_notifications_all_noisy,
|
||||
R.drawable.ic_room_actions_notifications_all_noisy
|
||||
|
|
|
@ -113,12 +113,12 @@ class DefaultNavigator @Inject constructor(
|
|||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
override fun openRoom(context: Context, roomId: String, eventId: String?, buildTask: Boolean) {
|
||||
override fun openRoom(context: Context, roomId: String, eventId: String?, buildTask: Boolean, openAtFirstUnread: Boolean?) {
|
||||
if (sessionHolder.getSafeActiveSession()?.getRoom(roomId) == null) {
|
||||
fatalError("Trying to open an unknown room $roomId", vectorPreferences.failFast())
|
||||
return
|
||||
}
|
||||
val args = RoomDetailArgs(roomId, eventId)
|
||||
val args = RoomDetailArgs(roomId, eventId, openAtFirstUnread = openAtFirstUnread)
|
||||
val intent = RoomDetailActivity.newIntent(context, args)
|
||||
startActivity(context, intent, buildTask)
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ interface Navigator {
|
|||
|
||||
fun openLogin(context: Context, loginConfig: LoginConfig? = null, flags: Int = 0)
|
||||
|
||||
fun openRoom(context: Context, roomId: String, eventId: String? = null, buildTask: Boolean = false)
|
||||
fun openRoom(context: Context, roomId: String, eventId: String? = null, buildTask: Boolean = false, openAtFirstUnread: Boolean? = null)
|
||||
|
||||
sealed class PostSwitchSpaceAction {
|
||||
object None : PostSwitchSpaceAction()
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path android:fillColor="#000" android:pathData="M7.41,14.58L12,19.17L16.59,14.58L18,16L12,22L6,16L7.41,14.58M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58M7.41,2.58L12,7.17L16.59,2.58L18,4L12,10L6,4L7.41,2.58Z" />
|
||||
</vector>
|
|
@ -69,6 +69,7 @@
|
|||
<string name="show_participants_sc">Participants</string>
|
||||
<string name="room_list_quick_actions_mark_room_unread">Mark as unread</string>
|
||||
<string name="room_list_quick_actions_mark_room_read">Mark as read</string>
|
||||
<string name="room_list_quick_actions_open_at_bottom">Open at recent messages</string>
|
||||
|
||||
<string name="footer_read_receipt_content_description">Message status</string>
|
||||
|
||||
|
|
Loading…
Reference in New Issue