From 6b14621ef1e57ebafed320f18107f67643e9a048 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Wed, 2 May 2018 18:41:33 +0200 Subject: [PATCH] Automatically reload messages on reconnect Signed-off-by: Janne Koschinski <janne@kuschku.de> --- .../ui/chat/messages/MessageListFragment.kt | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt index d66fb83c7..a059ebbc6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt @@ -40,9 +40,12 @@ import com.bumptech.glide.Glide import com.bumptech.glide.ListPreloader import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader import com.bumptech.glide.util.FixedPreloadSizeProvider +import de.kuschku.libquassel.connection.ConnectionState import de.kuschku.libquassel.protocol.BufferId import de.kuschku.libquassel.protocol.MsgId import de.kuschku.libquassel.quassel.syncables.BufferSyncer +import de.kuschku.libquassel.session.SessionManager +import de.kuschku.libquassel.util.helpers.mapSwitchMap import de.kuschku.libquassel.util.helpers.value import de.kuschku.libquassel.util.irc.HostmaskHelper import de.kuschku.quasseldroid.GlideApp @@ -246,23 +249,22 @@ class MessageListFragment : ServiceBoundFragment() { } var isScrolling = false - messageList.addOnScrollListener( - object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - val canScrollDown = recyclerView.canScrollVertically(1) - val isScrollingDown = dy > 0 + messageList.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + val canScrollDown = recyclerView.canScrollVertically(1) + val isScrollingDown = dy > 0 - scrollDown.toggle(canScrollDown && isScrollingDown) - } + scrollDown.toggle(canScrollDown && isScrollingDown) + } - override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) { - isScrolling = when (newState) { - RecyclerView.SCROLL_STATE_SETTLING, RecyclerView.SCROLL_STATE_IDLE -> false - RecyclerView.SCROLL_STATE_DRAGGING -> true - else -> isScrolling - } + override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) { + isScrolling = when (newState) { + RecyclerView.SCROLL_STATE_SETTLING, RecyclerView.SCROLL_STATE_IDLE -> false + RecyclerView.SCROLL_STATE_DRAGGING -> true + else -> isScrolling } - }) + } + }) fun processMessages(list: List<QuasselDatabase.MessageData>, selected: Set<MsgId>, expanded: Set<MsgId>, markerLine: MsgId?): List<DisplayMessage> { @@ -314,6 +316,15 @@ class MessageListFragment : ServiceBoundFragment() { swipeRefreshLayout.isEnabled = (bufferId != null || bufferId != -1) }) + viewModel.sessionManager.mapSwitchMap(SessionManager::state).distinctUntilChanged().toLiveData().observe( + this, Observer { + if (it?.orNull() == ConnectionState.CONNECTED) { + runInBackgroundDelayed(16) { + loadMore() + } + } + }) + var previousVisible = -1L viewModel.buffer.toFlowable(BackpressureStrategy.LATEST).switchMap { buffer -> database.filtered().listenRx(accountId, buffer).switchMap { filtered -> -- GitLab