Read marker: fix some issues with jump to unread visibility.
This commit is contained in:
parent
121fd9a19d
commit
c3ef036dca
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2019 New Vector Ltd
|
* Copyright 2019 New Vector Ltd
|
||||||
*
|
*
|
||||||
@ -355,6 +354,10 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
renderTombstoneEventHandling(it)
|
renderTombstoneEventHandling(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
roomDetailViewModel.selectSubscribe(RoomDetailViewState::canShowJumpToReadMarker, RoomDetailViewState::unreadState) { _, _ ->
|
||||||
|
updateJumpToReadMarkerViewVisibility()
|
||||||
|
}
|
||||||
|
|
||||||
roomDetailViewModel.selectSubscribe(RoomDetailViewState::sendMode, RoomDetailViewState::canSendMessage) { mode, canSend ->
|
roomDetailViewModel.selectSubscribe(RoomDetailViewState::sendMode, RoomDetailViewState::canSendMessage) { mode, canSend ->
|
||||||
if (!canSend) {
|
if (!canSend) {
|
||||||
return@selectSubscribe
|
return@selectSubscribe
|
||||||
@ -728,8 +731,7 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
onJumpToReadMarkerClicked()
|
onJumpToReadMarkerClicked()
|
||||||
}
|
}
|
||||||
views.jumpToReadMarkerView.setOnCloseIconClickListener {
|
views.jumpToReadMarkerView.setOnCloseIconClickListener {
|
||||||
views.jumpToReadMarkerView.isVisible = false
|
roomDetailViewModel.handle(RoomDetailAction.MarkAllAsRead)
|
||||||
onClearReadMarkerClicked()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1059,7 +1061,13 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
timelineEventController.timeline = roomDetailViewModel.timeline
|
timelineEventController.timeline = roomDetailViewModel.timeline
|
||||||
|
|
||||||
views.timelineRecyclerView.trackItemsVisibilityChange()
|
views.timelineRecyclerView.trackItemsVisibilityChange()
|
||||||
layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, true)
|
layoutManager = object : LinearLayoutManager(context, RecyclerView.VERTICAL, true) {
|
||||||
|
override fun onLayoutCompleted(state: RecyclerView.State?) {
|
||||||
|
super.onLayoutCompleted(state)
|
||||||
|
updateJumpToReadMarkerViewVisibility()
|
||||||
|
jumpToBottomViewVisibilityManager.maybeShowJumpToBottomViewVisibilityWithDelay()
|
||||||
|
}
|
||||||
|
}
|
||||||
val stateRestorer = LayoutManagerStateRestorer(layoutManager).register()
|
val stateRestorer = LayoutManagerStateRestorer(layoutManager).register()
|
||||||
scrollOnNewMessageCallback = ScrollOnNewMessageCallback(layoutManager, timelineEventController)
|
scrollOnNewMessageCallback = ScrollOnNewMessageCallback(layoutManager, timelineEventController)
|
||||||
scrollOnHighlightedEventCallback = ScrollOnHighlightedEventCallback(views.timelineRecyclerView, layoutManager, timelineEventController)
|
scrollOnHighlightedEventCallback = ScrollOnHighlightedEventCallback(views.timelineRecyclerView, layoutManager, timelineEventController)
|
||||||
@ -1070,8 +1078,6 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
it.dispatchTo(stateRestorer)
|
it.dispatchTo(stateRestorer)
|
||||||
it.dispatchTo(scrollOnNewMessageCallback)
|
it.dispatchTo(scrollOnNewMessageCallback)
|
||||||
it.dispatchTo(scrollOnHighlightedEventCallback)
|
it.dispatchTo(scrollOnHighlightedEventCallback)
|
||||||
updateJumpToReadMarkerViewVisibility()
|
|
||||||
jumpToBottomViewVisibilityManager.maybeShowJumpToBottomViewVisibilityWithDelay()
|
|
||||||
}
|
}
|
||||||
timelineEventController.addModelBuildListener(modelBuildListener)
|
timelineEventController.addModelBuildListener(modelBuildListener)
|
||||||
views.timelineRecyclerView.adapter = timelineEventController.adapter
|
views.timelineRecyclerView.adapter = timelineEventController.adapter
|
||||||
@ -1127,7 +1133,7 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
is UnreadState.ReadMarkerNotLoaded -> true
|
is UnreadState.ReadMarkerNotLoaded -> true
|
||||||
is UnreadState.HasUnread -> {
|
is UnreadState.HasUnread -> {
|
||||||
if (it.canShowJumpToReadMarker) {
|
if (it.canShowJumpToReadMarker) {
|
||||||
val lastVisibleItem = layoutManager.findLastVisibleItemPosition()
|
val lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition()
|
||||||
val positionOfReadMarker = timelineEventController.getPositionOfReadMarker()
|
val positionOfReadMarker = timelineEventController.getPositionOfReadMarker()
|
||||||
if (positionOfReadMarker == null) {
|
if (positionOfReadMarker == null) {
|
||||||
false
|
false
|
||||||
@ -1704,7 +1710,6 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onReadMarkerVisible() {
|
override fun onReadMarkerVisible() {
|
||||||
updateJumpToReadMarkerViewVisibility()
|
|
||||||
roomDetailViewModel.handle(RoomDetailAction.EnterTrackingUnreadMessagesState)
|
roomDetailViewModel.handle(RoomDetailAction.EnterTrackingUnreadMessagesState)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1974,10 +1979,6 @@ class RoomDetailFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onClearReadMarkerClicked() {
|
|
||||||
roomDetailViewModel.handle(RoomDetailAction.MarkAllAsRead)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AttachmentTypeSelectorView.Callback
|
// AttachmentTypeSelectorView.Callback
|
||||||
|
|
||||||
private val typeSelectedActivityResultLauncher = registerForPermissionsResult { allGranted ->
|
private val typeSelectedActivityResultLauncher = registerForPermissionsResult { allGranted ->
|
||||||
|
@ -1244,6 +1244,7 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun handleMarkAllAsRead() {
|
private fun handleMarkAllAsRead() {
|
||||||
|
setState { copy(unreadState = UnreadState.HasNoUnread) }
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.BOTH) }
|
tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.BOTH) }
|
||||||
}
|
}
|
||||||
@ -1380,7 +1381,6 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.subscribe {
|
.subscribe {
|
||||||
Timber.v("Unread state: $it")
|
|
||||||
setState { copy(unreadState = it) }
|
setState { copy(unreadState = it) }
|
||||||
}
|
}
|
||||||
.disposeOnClear()
|
.disposeOnClear()
|
||||||
|
Loading…
Reference in New Issue
Block a user