Skip to content

Commit 9541d75

Browse files
authored
Merge pull request #8152 from vector-im/feature/fga/fix_timeline_position_loss
Fix always jumps to the bottom of the timeline #8090
2 parents 6bd150d + 84cb6e7 commit 9541d75

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

changelog.d/8090.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix timeline always jumps to the bottom when screen goes back to foreground.

vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
5353
import androidx.recyclerview.widget.RecyclerView
5454
import androidx.transition.TransitionManager
5555
import com.airbnb.epoxy.EpoxyModel
56+
import com.airbnb.epoxy.EpoxyVisibilityTracker
5657
import com.airbnb.epoxy.OnModelBuildFinishedListener
5758
import com.airbnb.epoxy.addGlidePreloader
5859
import com.airbnb.epoxy.glidePreloader
@@ -76,7 +77,6 @@ import im.vector.app.core.extensions.filterDirectionOverrides
7677
import im.vector.app.core.extensions.hideKeyboard
7778
import im.vector.app.core.extensions.registerStartForActivityResult
7879
import im.vector.app.core.extensions.setTextOrHide
79-
import im.vector.app.core.extensions.trackItemsVisibilityChange
8080
import im.vector.app.core.glide.GlideApp
8181
import im.vector.app.core.glide.GlideRequests
8282
import im.vector.app.core.intent.getFilenameFromUri
@@ -265,6 +265,7 @@ class TimelineFragment :
265265
private val timelineViewModel: TimelineViewModel by fragmentViewModel()
266266
private val messageComposerViewModel: MessageComposerViewModel by fragmentViewModel()
267267
private val debouncer = Debouncer(createUIHandler())
268+
private val itemVisibilityTracker = EpoxyVisibilityTracker()
268269

269270
private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback
270271
private lateinit var scrollOnHighlightedEventCallback: ScrollOnHighlightedEventCallback
@@ -972,11 +973,11 @@ class TimelineFragment :
972973

973974
override fun onResume() {
974975
super.onResume()
976+
itemVisibilityTracker.attach(views.timelineRecyclerView)
975977
notificationDrawerManager.setCurrentRoom(timelineArgs.roomId)
976978
notificationDrawerManager.setCurrentThread(timelineArgs.threadTimelineArgs?.rootThreadEventId)
977979
roomDetailPendingActionStore.data?.let { handlePendingAction(it) }
978980
roomDetailPendingActionStore.data = null
979-
views.timelineRecyclerView.adapter = timelineEventController.adapter
980981
}
981982

982983
private fun handlePendingAction(roomDetailPendingAction: RoomDetailPendingAction) {
@@ -993,9 +994,9 @@ class TimelineFragment :
993994

994995
override fun onPause() {
995996
super.onPause()
997+
itemVisibilityTracker.detach(views.timelineRecyclerView)
996998
notificationDrawerManager.setCurrentRoom(null)
997999
notificationDrawerManager.setCurrentThread(null)
998-
views.timelineRecyclerView.adapter = null
9991000
}
10001001

10011002
private val emojiActivityResultLauncher = registerStartForActivityResult { activityResult ->
@@ -1038,7 +1039,6 @@ class TimelineFragment :
10381039
timelineEventController.callback = this
10391040
timelineEventController.timeline = timelineViewModel.timeline
10401041

1041-
views.timelineRecyclerView.trackItemsVisibilityChange()
10421042
layoutManager = object : LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, true) {
10431043
override fun onLayoutCompleted(state: RecyclerView.State) {
10441044
super.onLayoutCompleted(state)
@@ -1061,6 +1061,7 @@ class TimelineFragment :
10611061
it.dispatchTo(scrollOnHighlightedEventCallback)
10621062
}
10631063
timelineEventController.addModelBuildListener(modelBuildListener)
1064+
views.timelineRecyclerView.adapter = timelineEventController.adapter
10641065

10651066
if (vectorPreferences.swipeToReplyIsEnabled()) {
10661067
val quickReplyHandler = object : RoomMessageTouchHelperCallback.QuickReplayHandler {

0 commit comments

Comments
 (0)