@@ -53,6 +53,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
53
53
import androidx.recyclerview.widget.RecyclerView
54
54
import androidx.transition.TransitionManager
55
55
import com.airbnb.epoxy.EpoxyModel
56
+ import com.airbnb.epoxy.EpoxyVisibilityTracker
56
57
import com.airbnb.epoxy.OnModelBuildFinishedListener
57
58
import com.airbnb.epoxy.addGlidePreloader
58
59
import com.airbnb.epoxy.glidePreloader
@@ -76,7 +77,6 @@ import im.vector.app.core.extensions.filterDirectionOverrides
76
77
import im.vector.app.core.extensions.hideKeyboard
77
78
import im.vector.app.core.extensions.registerStartForActivityResult
78
79
import im.vector.app.core.extensions.setTextOrHide
79
- import im.vector.app.core.extensions.trackItemsVisibilityChange
80
80
import im.vector.app.core.glide.GlideApp
81
81
import im.vector.app.core.glide.GlideRequests
82
82
import im.vector.app.core.intent.getFilenameFromUri
@@ -265,6 +265,7 @@ class TimelineFragment :
265
265
private val timelineViewModel: TimelineViewModel by fragmentViewModel()
266
266
private val messageComposerViewModel: MessageComposerViewModel by fragmentViewModel()
267
267
private val debouncer = Debouncer (createUIHandler())
268
+ private val itemVisibilityTracker = EpoxyVisibilityTracker ()
268
269
269
270
private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback
270
271
private lateinit var scrollOnHighlightedEventCallback: ScrollOnHighlightedEventCallback
@@ -972,11 +973,11 @@ class TimelineFragment :
972
973
973
974
override fun onResume () {
974
975
super .onResume()
976
+ itemVisibilityTracker.attach(views.timelineRecyclerView)
975
977
notificationDrawerManager.setCurrentRoom(timelineArgs.roomId)
976
978
notificationDrawerManager.setCurrentThread(timelineArgs.threadTimelineArgs?.rootThreadEventId)
977
979
roomDetailPendingActionStore.data?.let { handlePendingAction(it) }
978
980
roomDetailPendingActionStore.data = null
979
- views.timelineRecyclerView.adapter = timelineEventController.adapter
980
981
}
981
982
982
983
private fun handlePendingAction (roomDetailPendingAction : RoomDetailPendingAction ) {
@@ -993,9 +994,9 @@ class TimelineFragment :
993
994
994
995
override fun onPause () {
995
996
super .onPause()
997
+ itemVisibilityTracker.detach(views.timelineRecyclerView)
996
998
notificationDrawerManager.setCurrentRoom(null )
997
999
notificationDrawerManager.setCurrentThread(null )
998
- views.timelineRecyclerView.adapter = null
999
1000
}
1000
1001
1001
1002
private val emojiActivityResultLauncher = registerStartForActivityResult { activityResult ->
@@ -1038,7 +1039,6 @@ class TimelineFragment :
1038
1039
timelineEventController.callback = this
1039
1040
timelineEventController.timeline = timelineViewModel.timeline
1040
1041
1041
- views.timelineRecyclerView.trackItemsVisibilityChange()
1042
1042
layoutManager = object : LinearLayoutManager (requireContext(), RecyclerView .VERTICAL , true ) {
1043
1043
override fun onLayoutCompleted (state : RecyclerView .State ) {
1044
1044
super .onLayoutCompleted(state)
@@ -1061,6 +1061,7 @@ class TimelineFragment :
1061
1061
it.dispatchTo(scrollOnHighlightedEventCallback)
1062
1062
}
1063
1063
timelineEventController.addModelBuildListener(modelBuildListener)
1064
+ views.timelineRecyclerView.adapter = timelineEventController.adapter
1064
1065
1065
1066
if (vectorPreferences.swipeToReplyIsEnabled()) {
1066
1067
val quickReplyHandler = object : RoomMessageTouchHelperCallback .QuickReplayHandler {
0 commit comments