From 9d6bbaaab5181313c0209d04bad9065026b7b450 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sat, 24 Mar 2018 12:11:33 +0100
Subject: [PATCH] Minor bugfixes and performance improvements

---
 .../quasseldroid/dagger/SettingsModule.kt      | 11 +++++++----
 .../quasseldroid/service/QuasselService.kt     |  3 +++
 .../quasseldroid/settings/BacklogSettings.kt   |  3 ++-
 .../kuschku/quasseldroid/settings/Settings.kt  |  6 +++---
 .../quasseldroid/ui/chat/ChatActivity.kt       |  8 +++++---
 .../ui/chat/messages/MessageListFragment.kt    | 18 +++++++++---------
 .../main/res/values/strings_preferences.xml    |  4 ++++
 app/src/main/res/xml/preferences.xml           |  6 ++++++
 8 files changed, 39 insertions(+), 20 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt b/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt
index 4afd1747e..0441232d6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt
@@ -76,11 +76,14 @@ class SettingsModule {
   @Provides
   fun provideBacklogSettings(context: Context) = context.sharedPreferences {
     BacklogSettings(
-      dynamicAmount = getString(
+      pageSize = getString(
         context.getString(R.string.preference_page_size_key),
-        BacklogSettings.DEFAULT.dynamicAmount.toString()
-      ).toIntOrNull()
-                      ?: BacklogSettings.DEFAULT.dynamicAmount
+        BacklogSettings.DEFAULT.pageSize.toString()
+      ).toIntOrNull() ?: BacklogSettings.DEFAULT.pageSize,
+      initialAmount = getString(
+        context.getString(R.string.preference_initial_amount_key),
+        BacklogSettings.DEFAULT.initialAmount.toString()
+      ).toIntOrNull() ?: BacklogSettings.DEFAULT.initialAmount
     )
   }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
index 63c754f1c..436f1d708 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -7,6 +7,8 @@ import android.net.ConnectivityManager
 import android.os.Binder
 import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.session.*
+import de.kuschku.libquassel.util.compatibility.LoggingHandler
+import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log
 import de.kuschku.quasseldroid.BuildConfig
 import de.kuschku.quasseldroid.Keys
 import de.kuschku.quasseldroid.R
@@ -257,6 +259,7 @@ class QuasselService : DaggerLifecycleService(),
         }
       }
       this.progress = it ?: Triple(ConnectionState.DISCONNECTED, 0, 0)
+      log(LoggingHandler.LogLevel.ERROR, "DEBUG", "progress: $it")
       val handle = this.notificationHandle
       if (handle != null) {
         updateNotification(handle)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/BacklogSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/BacklogSettings.kt
index 69d7c4b75..55a128e44 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/BacklogSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/BacklogSettings.kt
@@ -1,7 +1,8 @@
 package de.kuschku.quasseldroid.settings
 
 data class BacklogSettings(
-  val dynamicAmount: Int = 150
+  val pageSize: Int = 150,
+  val initialAmount: Int = 20
 ) {
   companion object {
     val DEFAULT = BacklogSettings()
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
index 9158a8b51..926e270e3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
@@ -69,10 +69,10 @@ object Settings {
 
   fun backlog(context: Context) = context.sharedPreferences {
     BacklogSettings(
-      dynamicAmount = getString(
+      pageSize = getString(
         context.getString(R.string.preference_page_size_key),
-        BacklogSettings.DEFAULT.dynamicAmount.toString()
-      ).toIntOrNull() ?: BacklogSettings.DEFAULT.dynamicAmount
+        BacklogSettings.DEFAULT.pageSize.toString()
+      ).toIntOrNull() ?: BacklogSettings.DEFAULT.pageSize
     )
   }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
index e1cb63af9..fd9408159 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
@@ -20,6 +20,7 @@ import android.view.Gravity
 import android.view.Menu
 import android.view.MenuItem
 import android.view.View
+import android.widget.Toast
 import butterknife.BindView
 import butterknife.ButterKnife
 import com.afollestad.materialdialogs.MaterialDialog
@@ -203,18 +204,19 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
         ConnectionState.CONNECTED,
         ConnectionState.DISCONNECTED,
         ConnectionState.CLOSED -> {
-          progressBar.hide()
+          progressBar.visibility = View.INVISIBLE
         }
         ConnectionState.INIT   -> {
-          progressBar.show()
+          progressBar.visibility = View.VISIBLE
           // Show indeterminate when no progress has been made yet
           progressBar.isIndeterminate = progress == 0 || max == 0
           progressBar.progress = progress
           progressBar.max = max
         }
         else                   -> {
-          progressBar.show()
+          progressBar.visibility = View.VISIBLE
           progressBar.isIndeterminate = true
+          Toast.makeText(this, state.toString(), Toast.LENGTH_SHORT).show()
         }
       }
     })
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 66662eeea..6c824e981 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
@@ -98,9 +98,9 @@ class MessageListFragment : ServiceBoundFragment() {
         LivePagedListBuilder(
           database.message().findByBufferIdPaged(buffer, filtered),
           PagedList.Config.Builder()
-            .setPageSize(backlogSettings.dynamicAmount)
-            .setPrefetchDistance(backlogSettings.dynamicAmount)
-            .setInitialLoadSizeHint(backlogSettings.dynamicAmount)
+            .setPageSize(backlogSettings.pageSize)
+            .setPrefetchDistance(backlogSettings.pageSize)
+            .setInitialLoadSizeHint(backlogSettings.pageSize)
             .setEnablePlaceholders(true)
             .build()
         ).setBoundaryCallback(boundaryCallback).build()
@@ -136,7 +136,7 @@ class MessageListFragment : ServiceBoundFragment() {
       val firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition()
       val firstVisibleMessageId = adapter[firstVisibleItemPosition]?.messageId
       runInBackground {
-        adapter.submitList(list)
+        list?.let(adapter::submitList)
 
         if (firstVisibleItemPosition < 2) {
           activity?.runOnUiThread { messageList.scrollToPosition(0) }
@@ -149,11 +149,11 @@ class MessageListFragment : ServiceBoundFragment() {
 
         val buffer = viewModel.buffer.value ?: -1
         if (buffer != lastBuffer) {
-          backend.value.orNull()?.sessionManager()?.bufferSyncer?.let { bufferSyncer ->
+          adapter.clearCache()
+          viewModel.session.value?.orNull()?.bufferSyncer?.let { bufferSyncer ->
             onBufferChange(lastBuffer, buffer, firstVisibleMessageId, bufferSyncer)
           }
           lastBuffer = buffer
-          adapter.clearCache()
         }
       }
     })
@@ -177,7 +177,7 @@ class MessageListFragment : ServiceBoundFragment() {
     }
     // Try loading messages when switching to isEmpty buffer
     if (database.message().bufferSize(current) == 0) {
-      loadMore()
+      loadMore(initial = true)
     }
     activity?.runOnUiThread { messageList.scrollToPosition(0) }
   }
@@ -193,7 +193,7 @@ class MessageListFragment : ServiceBoundFragment() {
     super.onPause()
   }
 
-  private fun loadMore() {
+  private fun loadMore(initial: Boolean = false) {
     runInBackground {
       viewModel.buffer { bufferId ->
         viewModel.session {
@@ -202,7 +202,7 @@ class MessageListFragment : ServiceBoundFragment() {
             last = database.message().findFirstByBufferId(
               bufferId
             )?.messageId ?: -1,
-            limit = backlogSettings.dynamicAmount
+            limit = if (initial) backlogSettings.initialAmount else backlogSettings.pageSize
           )
         }
       }
diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml
index a7f17a7cf..0621b192a 100644
--- a/app/src/main/res/values/strings_preferences.xml
+++ b/app/src/main/res/values/strings_preferences.xml
@@ -110,6 +110,10 @@
   <string name="preference_page_size_title">Page Size</string>
   <string name="preference_page_size_summary">The number of messages loaded and kept in memory at a time</string>
 
+  <string name="preference_initial_amount_key" translatable="false">initial_amount</string>
+  <string name="preference_initial_amount_title">Initial Amount</string>
+  <string name="preference_initial_amount_summary">Number of messages to load initially</string>
+
 
   <string name="preference_connection_title">Connection</string>
 
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index ab9de7180..bb1902278 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -84,6 +84,12 @@
       android:key="@string/preference_page_size_key"
       android:summary="@string/preference_page_size_summary"
       android:title="@string/preference_page_size_title" />
+    <EditTextPreference
+        android:defaultValue="20"
+        android:inputType="number"
+        android:key="@string/preference_initial_amount_key"
+        android:summary="@string/preference_initial_amount_summary"
+        android:title="@string/preference_initial_amount_title" />
   </PreferenceCategory>
 
   <PreferenceCategory android:title="@string/preference_connection_title">
-- 
GitLab