From f2a400e8979f19615a72b5e090e41108ed97fd30 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Fri, 11 Jan 2019 19:16:30 +0100
Subject: [PATCH] Fixes #181 and #183
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- Setup Network window should sort networks alphabetically
- Setup Network window should rename "All Networks" -> "New Network…"
---
 .../coresettings/chatlist/ChatListBaseFragment.kt   |  2 +-
 .../ui/coresettings/chatlist/NetworkAdapter.kt      | 13 ++++++-------
 .../ui/setup/network/NetworkSetupNetworkSlide.kt    | 10 +++++++---
 app/src/main/res/values/strings_settings.xml        |  1 +
 4 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListBaseFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListBaseFragment.kt
index 63a3430ae..557b87499 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListBaseFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListBaseFragment.kt
@@ -110,7 +110,7 @@ abstract class ChatListBaseFragment(private val initDefault: Boolean) :
     ))
     minimumActivity.adapter = minimumActivityAdapter
 
-    val networkAdapter = NetworkAdapter()
+    val networkAdapter = NetworkAdapter(R.string.settings_chatlist_network_all)
     networkId.adapter = networkAdapter
 
     viewModel.networks.switchMap {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt
index d37d27bb4..2c3a3b408 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt
@@ -23,6 +23,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
+import androidx.annotation.StringRes
 import androidx.appcompat.widget.ThemedSpinnerAdapter
 import androidx.recyclerview.widget.RecyclerView
 import butterknife.BindView
@@ -33,8 +34,8 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.util.ui.ContextThemeWrapper
 import de.kuschku.quasseldroid.util.ui.RecyclerSpinnerAdapter
 
-class NetworkAdapter : RecyclerSpinnerAdapter<NetworkAdapter.NetworkViewHolder>(),
-                       ThemedSpinnerAdapter {
+class NetworkAdapter(@StringRes private val fallbackName: Int) : RecyclerSpinnerAdapter<NetworkAdapter.NetworkViewHolder>(),
+  ThemedSpinnerAdapter {
   var data = listOf<INetwork.NetworkInfo?>(null)
 
   fun submitList(list: List<INetwork.NetworkInfo?>) {
@@ -56,9 +57,7 @@ class NetworkAdapter : RecyclerSpinnerAdapter<NetworkAdapter.NetworkViewHolder>(
         parent.context
     )
     val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
-    return NetworkViewHolder(
-      view
-    )
+    return NetworkViewHolder(fallbackName, view)
   }
 
   fun indexOf(id: NetworkId): Int? {
@@ -74,7 +73,7 @@ class NetworkAdapter : RecyclerSpinnerAdapter<NetworkAdapter.NetworkViewHolder>(
   override fun getItemId(position: Int) = getItem(position)?.networkId?.toLong() ?: -1
   override fun hasStableIds() = true
   override fun getCount() = data.size
-  class NetworkViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+  class NetworkViewHolder(@StringRes private val fallbackName: Int, itemView: View) : RecyclerView.ViewHolder(itemView) {
     @BindView(android.R.id.text1)
     lateinit var text: TextView
 
@@ -83,7 +82,7 @@ class NetworkAdapter : RecyclerSpinnerAdapter<NetworkAdapter.NetworkViewHolder>(
     }
 
     fun bind(network: INetwork.NetworkInfo?) {
-      text.text = network?.networkName ?: itemView.context.getString(R.string.settings_chatlist_network_all)
+      text.text = network?.networkName ?: itemView.context.getString(fallbackName)
     }
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt
index 2a0d41763..8a4f50b8a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt
@@ -79,7 +79,7 @@ class NetworkSetupNetworkSlide : ServiceBoundSlideFragment() {
   lateinit var sslEnabled: SwitchCompat
 
   private val identityAdapter = IdentityAdapter()
-  private val networkAdapter = NetworkAdapter()
+  private val networkAdapter = NetworkAdapter(R.string.settings_chatlist_network_create)
 
   override fun isValid(): Boolean {
     return (this.network.selectedItemPosition != -1 &&
@@ -188,9 +188,13 @@ class NetworkSetupNetworkSlide : ServiceBoundSlideFragment() {
       }
     })
 
-    viewModel.networks.toLiveData().observe(this, Observer {
+    viewModel.networks.switchMap {
+      combineLatest(it.values.map(Network::liveNetworkInfo)).map {
+        it.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, INetwork.NetworkInfo::networkName))
+      }
+    }.toLiveData().observe(this, Observer {
       if (it != null) {
-        this.networks = it.values.map(Network::networkInfo)
+        this.networks = it
         update()
       }
     })
diff --git a/app/src/main/res/values/strings_settings.xml b/app/src/main/res/values/strings_settings.xml
index 7bd017251..dcbc6845a 100644
--- a/app/src/main/res/values/strings_settings.xml
+++ b/app/src/main/res/values/strings_settings.xml
@@ -84,6 +84,7 @@
   <string name="settings_chatlist_add_new_buffers_automatically">Add new chats automatically</string>
   <string name="settings_chatlist_network">Network</string>
   <string name="settings_chatlist_network_all">All Networks</string>
+  <string name="settings_chatlist_network_create">Create Network…</string>
   <string name="settings_chatlist_show_status_buffer">Show Status Buffer</string>
   <string name="settings_chatlist_types">Chat Types</string>
   <string name="settings_chatlist_show_channels">Show Channels</string>
-- 
GitLab