From d9f7caba3267f50fa62b6235c747cd74a2da3526 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 28 Jun 2020 11:38:37 +0200
Subject: [PATCH] Only use the jump feature on cores supporting it

---
 .../ui/chat/messages/MessageListFragment.kt    | 18 ++++++++++++------
 .../libquassel/quassel/ExtendedFeature.kt      |  4 +++-
 2 files changed, 15 insertions(+), 7 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 c878d8ef2..b9edc9f20 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
@@ -43,6 +43,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
 import de.kuschku.libquassel.connection.ConnectionState
 import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.quassel.BufferInfo
+import de.kuschku.libquassel.quassel.ExtendedFeature
 import de.kuschku.libquassel.quassel.syncables.BufferSyncer
 import de.kuschku.libquassel.session.SessionManager
 import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log
@@ -237,9 +238,11 @@ class MessageListFragment : ServiceBoundFragment() {
 
   private val boundaryCallback = object : PagedList.BoundaryCallback<DisplayMessage>() {
     override fun onItemAtFrontLoaded(itemAtFront: DisplayMessage) {
-      val id = itemAtFront.tag.id
-      log(DEBUG, "MessageListFragment", "onItemAtFrontLoaded: $id")
-      loadMore(reverse = true, lastMessageId = id)
+      if (modelHelper.coreFeatures.value?.second?.hasFeature(ExtendedFeature.LoadBacklogForwards) == true) {
+        val id = itemAtFront.tag.id
+        log(DEBUG, "MessageListFragment", "onItemAtFrontLoaded: $id")
+        loadMore(reverse = true, lastMessageId = id)
+      }
     }
     override fun onItemAtEndLoaded(itemAtEnd: DisplayMessage) {
       val id = itemAtEnd.tag.id
@@ -342,8 +345,9 @@ class MessageListFragment : ServiceBoundFragment() {
 
         val canScrollUp = recyclerView.canScrollVertically(-1)
         val isScrollingUp = dy < 0
+        val canJumpTo = modelHelper.coreFeatures.value?.second?.hasFeature(ExtendedFeature.LoadBacklogForwards) == true
 
-        scrollUp.toggle(canScrollUp && isScrollingUp)
+        scrollUp.toggle(canJumpTo && canScrollUp && isScrollingUp)
       }
 
       override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
@@ -504,7 +508,9 @@ class MessageListFragment : ServiceBoundFragment() {
       jumpTo(false)
     }
     scrollUp.setOnClickListener {
-      jumpTo(true)
+      if (modelHelper.coreFeatures.value?.second?.hasFeature(ExtendedFeature.LoadBacklogForwards) == true) {
+        jumpTo(true)
+      }
     }
 
     val avatarSize = TypedValue.applyDimension(
@@ -653,7 +659,7 @@ class MessageListFragment : ServiceBoundFragment() {
         if (bufferId.isValidId() && bufferId != BufferId.MAX_VALUE) {
           if (initial) swipeRefreshLayout.isRefreshing = true
           runInBackground {
-            if (reverse) {
+            if (reverse && modelHelper.coreFeatures.value?.second?.hasFeature(ExtendedFeature.LoadBacklogForwards) == true) {
               backlogRequester.loadMoreAfter(
                 accountId = accountId,
                 buffer = bufferId,
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt
index ac721ebe0..a5d22dc30 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/ExtendedFeature.kt
@@ -58,7 +58,9 @@ enum class ExtendedFeature {
   /** 64-bit IDs for messages */
   LongMessageId,
   /** CoreInfo dynamically updated using signals */
-  SyncedCoreInfo;
+  SyncedCoreInfo,
+  /** Allow loading backlog in reverse */
+  LoadBacklogForwards;
 
   companion object {
     private val map = values().associateBy(ExtendedFeature::name)
-- 
GitLab