From 9ef8f1e2e35c18c6b059bf1f53d18d61b369694c Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Wed, 21 Feb 2018 16:30:39 +0100
Subject: [PATCH] Bugfixes

---
 app/proguard-rules.pro                        | 10 ++++++++++
 .../ui/chat/BufferViewConfigAdapter.kt        |  2 +-
 .../quasseldroid_ng/ui/chat/MessageAdapter.kt |  8 +++-----
 .../ui/chat/MessageListFragment.kt            | 15 ++++++--------
 .../ui/viewmodel/QuasselViewModel.kt          | 20 ++++++++++---------
 .../quassel/syncables/BufferViewConfig.kt     |  5 +++++
 6 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 84b0ac774..10e5e5f1b 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -27,6 +27,16 @@
 # The project is GPL anyway, obfuscation is useless.
 -dontobfuscate
 
+# Keep our invokers
 -keep class * implements de.kuschku.libquassel.quassel.syncables.interfaces.invokers.Invoker {
     static ** INSTANCE;
 }
+
+# remove unnecessary warnings
+# Android HTTP Libs
+-dontnote android.net.http.**
+-dontnote org.apache.http.**
+# Kotlin stuff
+-dontnote kotlin.**
+# Gson
+-dontnote com.google.gson.**
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt
index afadc9b6d..33c4c36f1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt
@@ -18,7 +18,7 @@ import de.kuschku.quasseldroid_ng.util.ui.RecyclerSpinnerAdapter
 
 class BufferViewConfigAdapter(
   lifecycleOwner: LifecycleOwner,
-  liveData: LiveData<List<BufferViewConfig>>
+  liveData: LiveData<List<BufferViewConfig>?>
 ) : RecyclerSpinnerAdapter<BufferViewConfigAdapter.BufferViewConfigViewHolder>(),
     ThemedSpinnerAdapter {
   val data = mutableListOf<BufferViewConfig>()
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt
index ab634fac3..8499aaf8b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt
@@ -1,6 +1,5 @@
 package de.kuschku.quasseldroid_ng.ui.chat
 
-import android.arch.lifecycle.LiveData
 import android.arch.paging.PagedListAdapter
 import android.content.Context
 import android.support.v7.recyclerview.extensions.DiffCallback
@@ -16,7 +15,6 @@ import de.kuschku.quasseldroid_ng.util.helper.getOrPut
 
 class MessageAdapter(
   context: Context,
-  private val markerLine: LiveData<Pair<MsgId, MsgId>?>,
   var markerLinePosition: Pair<MsgId, MsgId>? = null
 ) : PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>(
   object : DiffCallback<QuasselDatabase.DatabaseMessage>() {
@@ -51,13 +49,13 @@ class MessageAdapter(
     getItem(position)?.let {
       messageRenderer.bind(
         holder,
-        if (it.messageId == markerLine.value?.second || it.messageId == markerLine.value?.first) {
-          val value = messageRenderer.render(it, markerLine.value?.second ?: -1)
+        if (it.messageId == markerLinePosition?.second || it.messageId == markerLinePosition?.first) {
+          val value = messageRenderer.render(it, markerLinePosition?.second ?: -1)
           messageCache.put(it.messageId, value)
           value
         } else {
           messageCache.getOrPut(it.messageId) {
-            messageRenderer.render(it, markerLine.value?.second ?: -1)
+            messageRenderer.render(it, markerLinePosition?.second ?: -1)
           }
         }
       )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt
index 9177811e4..651d79a3d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt
@@ -17,8 +17,6 @@ import butterknife.ButterKnife
 import de.kuschku.libquassel.protocol.BufferId
 import de.kuschku.libquassel.session.Backend
 import de.kuschku.libquassel.session.SessionManager
-import de.kuschku.libquassel.util.compatibility.LoggingHandler
-import de.kuschku.libquassel.util.compatibility.log
 import de.kuschku.quasseldroid_ng.R
 import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
@@ -69,7 +67,7 @@ class MessageListFragment : ServiceBoundFragment() {
     val view = inflater.inflate(R.layout.fragment_messages, container, false)
     ButterKnife.bind(this, view)
 
-    adapter = MessageAdapter(context!!, viewModel.markerLine)
+    adapter = MessageAdapter(context!!)
     messageList.adapter = adapter
     linearLayoutManager = LinearLayoutManager(context)
     linearLayoutManager.reverseLayout = true
@@ -106,11 +104,11 @@ class MessageListFragment : ServiceBoundFragment() {
 
     handler.post {
       val database = QuasselDatabase.Creator.init(this.context!!)
-      sessionManager.zip(viewModel.getBuffer()).zip(data).observe(
+      sessionManager.zip(viewModel.getBuffer(), data).observe(
         this, Observer {
         handler.post {
-          val session = it?.first?.first
-          val buffer = it?.first?.second
+          val session = it?.first
+          val buffer = it?.second
           val bufferSyncer = session?.bufferSyncer
 
           if (buffer != null && bufferSyncer != null) {
@@ -128,7 +126,6 @@ class MessageListFragment : ServiceBoundFragment() {
 
     viewModel.markerLine.observe(
       this, Observer {
-      log(LoggingHandler.LogLevel.ERROR, "DEBUG", "$it")
       adapter.markerLinePosition = it
       adapter.notifyDataSetChanged()
     }
@@ -140,12 +137,12 @@ class MessageListFragment : ServiceBoundFragment() {
       adapter.setList(list)
       if (firstVisibleItemPosition < 2) {
         activity?.runOnUiThread {
-          messageList.smoothScrollToPosition(0)
+          messageList.scrollToPosition(0)
         }
         handler.postDelayed(
           {
             activity?.runOnUiThread {
-              messageList.smoothScrollToPosition(0)
+              messageList.scrollToPosition(0)
             }
           }, 16
         )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
index e22fc8877..c75f9879a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
@@ -19,9 +19,13 @@ import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.ui.chat.BufferListAdapter
 import de.kuschku.quasseldroid_ng.ui.chat.NickListAdapter
 import de.kuschku.quasseldroid_ng.ui.chat.ToolbarFragment
-import de.kuschku.quasseldroid_ng.util.helper.*
+import de.kuschku.quasseldroid_ng.util.helper.map
+import de.kuschku.quasseldroid_ng.util.helper.switchMap
+import de.kuschku.quasseldroid_ng.util.helper.switchMapRx
+import de.kuschku.quasseldroid_ng.util.helper.zip
 import io.reactivex.Observable
 import io.reactivex.functions.BiFunction
+import io.reactivex.functions.Function
 import java.util.concurrent.TimeUnit
 
 class QuasselViewModel : ViewModel() {
@@ -200,13 +204,9 @@ class QuasselViewModel : ViewModel() {
     manager.liveBufferViewConfigs().map { ids ->
       ids.mapNotNull { id ->
         manager.bufferViewConfig(id)
-      }.sortedWith(
-        Comparator { a, b ->
-          (a?.bufferViewName() ?: "").compareTo((b?.bufferViewName() ?: ""), true)
-        }
-      )
+      }.sortedWith(BufferViewConfig.NameComparator)
     }
-  }.or(emptyList())
+  }
 
   val bufferList = session.zip(bufferViewConfig).switchMapRx { (session, config) ->
     val bufferSyncer = session?.bufferSyncer
@@ -302,9 +302,11 @@ class QuasselViewModel : ViewModel() {
                     )
                   }
                 }
-              }, { array: Array<Any> ->
-                array.toList() as List<BufferListAdapter.BufferProps>
+              }, object : Function<Array<Any>, List<BufferListAdapter.BufferProps>> {
+              override fun apply(objects: Array<Any>): List<BufferListAdapter.BufferProps> {
+                return objects.toList() as List<BufferListAdapter.BufferProps>
               }
+            }
             ).map { list ->
               list.filter {
                 config.minimumActivity().value <= it.activity.bit ||
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt
index 82abb56e1..e93ce16b3 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt
@@ -248,4 +248,9 @@ class BufferViewConfig constructor(
 
   val live_temporarilyRemovedBuffers: BehaviorSubject<Set<BufferId>>
     = BehaviorSubject.createDefault<Set<BufferId>>(emptySet())
+
+  object NameComparator : Comparator<BufferViewConfig> {
+    override fun compare(a: BufferViewConfig?, b: BufferViewConfig?)
+      = (a?.bufferViewName() ?: "").compareTo((b?.bufferViewName() ?: ""), true)
+  }
 }
-- 
GitLab