From ba6f70b349ff93eb1dfb428295509aada9c731b4 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Thu, 10 Jan 2019 12:29:32 +0100
Subject: [PATCH] =?UTF-8?q?Fixes=20issue=20where=20whitelist=20fragment=20?=
 =?UTF-8?q?didn=E2=80=99t=20properly=20show=20placeholder?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../whitelist/WhitelistCertificateAdapter.kt    |  9 +++++++++
 .../whitelist/WhitelistFragment.kt              | 17 ++++++++++++-----
 .../whitelist/WhitelistHostnameAdapter.kt       | 10 ++++++++++
 3 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt
index e5b4ccd11..d27f63c2d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt
@@ -34,11 +34,16 @@ import de.kuschku.quasseldroid.util.helper.visibleIf
 class WhitelistCertificateAdapter :
   RecyclerView.Adapter<WhitelistCertificateAdapter.WhitelistItemViewHolder>() {
   private var clickListener: ((QuasselDatabase.SslValidityWhitelistEntry) -> Unit)? = null
+  private var updateListener: ((List<QuasselDatabase.SslValidityWhitelistEntry>) -> Unit)? = null
 
   fun setOnClickListener(listener: ((QuasselDatabase.SslValidityWhitelistEntry) -> Unit)?) {
     clickListener = listener
   }
 
+  fun setOnUpdateListener(listener: ((List<QuasselDatabase.SslValidityWhitelistEntry>) -> Unit)?) {
+    updateListener = listener
+  }
+
   private val data = mutableListOf<QuasselDatabase.SslValidityWhitelistEntry>()
   var list: List<QuasselDatabase.SslValidityWhitelistEntry>
     get() = data
@@ -48,17 +53,20 @@ class WhitelistCertificateAdapter :
       notifyItemRangeRemoved(0, length)
       data.addAll(value)
       notifyItemRangeInserted(0, list.size)
+      updateListener?.invoke(list)
     }
 
   fun add(item: QuasselDatabase.SslValidityWhitelistEntry) {
     val index = data.size
     data.add(item)
     notifyItemInserted(index)
+    updateListener?.invoke(list)
   }
 
   fun replace(index: Int, item: QuasselDatabase.SslValidityWhitelistEntry) {
     data[index] = item
     notifyItemChanged(index)
+    updateListener?.invoke(list)
   }
 
   fun indexOf(item: QuasselDatabase.SslValidityWhitelistEntry) = data.indexOf(item)
@@ -66,6 +74,7 @@ class WhitelistCertificateAdapter :
   fun remove(index: Int) {
     data.removeAt(index)
     notifyItemRemoved(index)
+    updateListener?.invoke(list)
   }
 
   fun remove(item: QuasselDatabase.SslValidityWhitelistEntry) = remove(indexOf(item))
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistFragment.kt
index 576d5597f..f4fc55739 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistFragment.kt
@@ -92,17 +92,24 @@ class WhitelistFragment : SettingsFragment(), SettingsFragment.Changeable,
     hostnameList.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL))
     ViewCompat.setNestedScrollingEnabled(hostnameList, false)
 
+    certificateAdapter.setOnUpdateListener {
+      activity?.runOnUiThread {
+        certificateListEmpty.visibleIf(it.isNullOrEmpty())
+      }
+    }
+
+    hostnameAdapter.setOnUpdateListener {
+      activity?.runOnUiThread {
+        hostnameListEmpty.visibleIf(it.isNullOrEmpty())
+      }
+    }
+
     handler.post {
       whitelist = Whitelist(database.validityWhitelist().all(), database.hostnameWhitelist().all())
       whitelist?.let {
         certificateAdapter.list = it.certificates
         hostnameAdapter.list = it.hostnames
       }
-
-      activity?.runOnUiThread {
-        certificateListEmpty.visibleIf(whitelist?.certificates.isNullOrEmpty())
-        hostnameListEmpty.visibleIf(whitelist?.hostnames.isNullOrEmpty())
-      }
     }
     return view
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt
index 07dcaae9f..262d08e6f 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt
@@ -32,6 +32,12 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase
 
 class WhitelistHostnameAdapter :
   RecyclerView.Adapter<WhitelistHostnameAdapter.WhitelistItemViewHolder>() {
+  private var updateListener: ((List<QuasselDatabase.SslHostnameWhitelistEntry>) -> Unit)? = null
+
+  fun setOnUpdateListener(listener: ((List<QuasselDatabase.SslHostnameWhitelistEntry>) -> Unit)?) {
+    updateListener = listener
+  }
+
   private val data = mutableListOf<QuasselDatabase.SslHostnameWhitelistEntry>()
   var list: List<QuasselDatabase.SslHostnameWhitelistEntry>
     get() = data
@@ -41,17 +47,20 @@ class WhitelistHostnameAdapter :
       notifyItemRangeRemoved(0, length)
       data.addAll(value)
       notifyItemRangeInserted(0, list.size)
+      updateListener?.invoke(list)
     }
 
   fun add(item: QuasselDatabase.SslHostnameWhitelistEntry) {
     val index = data.size
     data.add(item)
     notifyItemInserted(index)
+    updateListener?.invoke(list)
   }
 
   fun replace(index: Int, item: QuasselDatabase.SslHostnameWhitelistEntry) {
     data[index] = item
     notifyItemChanged(index)
+    updateListener?.invoke(list)
   }
 
   fun indexOf(item: QuasselDatabase.SslHostnameWhitelistEntry) = data.indexOf(item)
@@ -59,6 +68,7 @@ class WhitelistHostnameAdapter :
   fun remove(index: Int) {
     data.removeAt(index)
     notifyItemRemoved(index)
+    updateListener?.invoke(list)
   }
 
   fun remove(item: QuasselDatabase.SslHostnameWhitelistEntry) = remove(indexOf(item))
-- 
GitLab