From 84cb6e74f2c1b23de39880a3585250f74ab45d3f Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 21 Feb 2023 11:12:20 +0100 Subject: [PATCH] Fix always jumps to the bottom of the timeline #8090 --- changelog.d/8090.bugfix | 1 + .../app/features/home/room/detail/TimelineFragment.kt | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 changelog.d/8090.bugfix diff --git a/changelog.d/8090.bugfix b/changelog.d/8090.bugfix new file mode 100644 index 0000000000..ebe48c2c35 --- /dev/null +++ b/changelog.d/8090.bugfix @@ -0,0 +1 @@ +Fix timeline always jumps to the bottom when screen goes back to foreground. 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 daf833a00d..2bb6fdb3e6 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 @@ -53,6 +53,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.transition.TransitionManager import com.airbnb.epoxy.EpoxyModel +import com.airbnb.epoxy.EpoxyVisibilityTracker import com.airbnb.epoxy.OnModelBuildFinishedListener import com.airbnb.epoxy.addGlidePreloader import com.airbnb.epoxy.glidePreloader @@ -76,7 +77,6 @@ import im.vector.app.core.extensions.filterDirectionOverrides import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.setTextOrHide -import im.vector.app.core.extensions.trackItemsVisibilityChange import im.vector.app.core.glide.GlideApp import im.vector.app.core.glide.GlideRequests import im.vector.app.core.intent.getFilenameFromUri @@ -265,6 +265,7 @@ class TimelineFragment : private val timelineViewModel: TimelineViewModel by fragmentViewModel() private val messageComposerViewModel: MessageComposerViewModel by fragmentViewModel() private val debouncer = Debouncer(createUIHandler()) + private val itemVisibilityTracker = EpoxyVisibilityTracker() private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback private lateinit var scrollOnHighlightedEventCallback: ScrollOnHighlightedEventCallback @@ -972,11 +973,11 @@ class TimelineFragment : override fun onResume() { super.onResume() + itemVisibilityTracker.attach(views.timelineRecyclerView) notificationDrawerManager.setCurrentRoom(timelineArgs.roomId) notificationDrawerManager.setCurrentThread(timelineArgs.threadTimelineArgs?.rootThreadEventId) roomDetailPendingActionStore.data?.let { handlePendingAction(it) } roomDetailPendingActionStore.data = null - views.timelineRecyclerView.adapter = timelineEventController.adapter } private fun handlePendingAction(roomDetailPendingAction: RoomDetailPendingAction) { @@ -993,9 +994,9 @@ class TimelineFragment : override fun onPause() { super.onPause() + itemVisibilityTracker.detach(views.timelineRecyclerView) notificationDrawerManager.setCurrentRoom(null) notificationDrawerManager.setCurrentThread(null) - views.timelineRecyclerView.adapter = null } private val emojiActivityResultLauncher = registerStartForActivityResult { activityResult -> @@ -1038,7 +1039,6 @@ class TimelineFragment : timelineEventController.callback = this timelineEventController.timeline = timelineViewModel.timeline - views.timelineRecyclerView.trackItemsVisibilityChange() layoutManager = object : LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, true) { override fun onLayoutCompleted(state: RecyclerView.State) { super.onLayoutCompleted(state) @@ -1061,6 +1061,7 @@ class TimelineFragment : it.dispatchTo(scrollOnHighlightedEventCallback) } timelineEventController.addModelBuildListener(modelBuildListener) + views.timelineRecyclerView.adapter = timelineEventController.adapter if (vectorPreferences.swipeToReplyIsEnabled()) { val quickReplyHandler = object : RoomMessageTouchHelperCallback.QuickReplayHandler {