Timeline : try to fix scroll issues...

This commit is contained in:
ganfra
2018-11-25 16:17:13 +01:00
parent 6fc0d884b2
commit e4c23b757e
3 changed files with 10 additions and 7 deletions

View File

@ -40,6 +40,7 @@ class RoomDetailFragment : RiotFragment() {
private var eventId: String? by FragmentArgumentDelegate()
private val timelineEventController by inject<TimelineEventController>(parameters = { ParameterList(roomId) })
private lateinit var room: Room
private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_room_detail, container, false)
@ -71,9 +72,9 @@ class RoomDetailFragment : RiotFragment() {
private fun setupRecyclerView() {
val layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, true)
val listUpdateCallback = ScrollOnNewMessageCallback(layoutManager)
scrollOnNewMessageCallback = ScrollOnNewMessageCallback(layoutManager)
recyclerView.layoutManager = layoutManager
timelineEventController.addModelBuildListener { it.dispatchTo(listUpdateCallback) }
timelineEventController.addModelBuildListener { it.dispatchTo(scrollOnNewMessageCallback) }
recyclerView.setController(timelineEventController)
}
@ -91,6 +92,7 @@ class RoomDetailFragment : RiotFragment() {
}
private fun renderEvents(events: PagedList<EnrichedEvent>?) {
scrollOnNewMessageCallback.hasBeenUpdated.set(true)
timelineEventController.timeline = events
}

View File

@ -2,11 +2,14 @@ package im.vector.riotredesign.features.home.room.detail
import android.support.v7.widget.LinearLayoutManager
import im.vector.riotredesign.core.platform.DefaultListUpdateCallback
import java.util.concurrent.atomic.AtomicBoolean
class ScrollOnNewMessageCallback(private val layoutManager: LinearLayoutManager) : DefaultListUpdateCallback {
val hasBeenUpdated = AtomicBoolean(false)
override fun onInserted(position: Int, count: Int) {
if (position == 0 && layoutManager.findFirstVisibleItemPosition() == 0) {
if (hasBeenUpdated.compareAndSet(true, false) && position == 0 && layoutManager.findFirstVisibleItemPosition() == 0) {
layoutManager.scrollToPosition(0)
}
}