From 77082df695a70fa60aae11978dfcb80bb29ab11d Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 29 Apr 2019 22:09:34 +0200
Subject: [PATCH] Fixes state resetting

---
 .../chat/add/create/ChannelCreateFragment.kt  | 29 ++++++++++++++++++-
 .../ui/chat/add/join/ChannelJoinFragment.kt   | 29 ++++++++++++++++++-
 .../ui/chat/add/query/QueryCreateFragment.kt  | 24 +++++++++++++--
 3 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt
index 9b163bf38..c15e6df25 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt
@@ -23,6 +23,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.AdapterView
 import android.widget.Button
 import android.widget.EditText
 import androidx.appcompat.widget.AppCompatSpinner
@@ -76,16 +77,34 @@ class ChannelCreateFragment : ServiceBoundSettingsFragment() {
   @Inject
   lateinit var modelHelper: QuasselViewModelHelper
 
+  private var hasSelectedNetwork = false
+  private var networkId = NetworkId(0)
+
   override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                             savedInstanceState: Bundle?): View? {
     val view = inflater.inflate(R.layout.add_create, container, false)
     ButterKnife.bind(this, view)
 
-    val networkId = NetworkId(arguments?.getInt("network_id", 0) ?: 0)
+    networkId = NetworkId(
+      savedInstanceState?.getInt("network_id", 0)
+      ?: arguments?.getInt("network_id", 0)
+      ?: 0
+    )
 
     val networkAdapter = NetworkAdapter()
     network.adapter = networkAdapter
 
+    network.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+      override fun onNothingSelected(parent: AdapterView<*>?) {
+        networkId = NetworkId(0)
+      }
+
+      override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
+        networkId = networkAdapter.getItem(position).id
+        hasSelectedNetwork = true
+      }
+    }
+
     var hasSetNetwork = false
     modelHelper.networks.switchMap {
       combineLatest(it.values.map(Network::liveNetworkInfo)).map {
@@ -101,6 +120,7 @@ class ChannelCreateFragment : ServiceBoundSettingsFragment() {
             val index = networkAdapter.indexOf(networkId)
             if (index != null) {
               network.setSelection(index)
+              hasSelectedNetwork = true
             }
           }
           hasSetNetwork = true
@@ -190,4 +210,11 @@ class ChannelCreateFragment : ServiceBoundSettingsFragment() {
 
     return view
   }
+
+  override fun onSaveInstanceState(outState: Bundle) {
+    super.onSaveInstanceState(outState)
+    if (networkId.isValidId() && hasSelectedNetwork) {
+      outState.putInt("network_id", networkId.id)
+    }
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt
index 36d589679..1fe771f37 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt
@@ -23,6 +23,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.AdapterView
 import android.widget.Button
 import android.widget.EditText
 import androidx.appcompat.widget.AppCompatSpinner
@@ -54,16 +55,34 @@ class ChannelJoinFragment : ServiceBoundFragment() {
   @Inject
   lateinit var modelHelper: QuasselViewModelHelper
 
+  private var hasSelectedNetwork = false
+  private var networkId = NetworkId(0)
+
   override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                             savedInstanceState: Bundle?): View? {
     val view = inflater.inflate(R.layout.add_join, container, false)
     ButterKnife.bind(this, view)
 
-    val networkId = NetworkId(arguments?.getInt("network_id", 0) ?: 0)
+    networkId = NetworkId(
+      savedInstanceState?.getInt("network_id", 0)
+      ?: arguments?.getInt("network_id", 0)
+      ?: 0
+    )
 
     val networkAdapter = NetworkAdapter()
     network.adapter = networkAdapter
 
+    network.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+      override fun onNothingSelected(parent: AdapterView<*>?) {
+        networkId = NetworkId(0)
+      }
+
+      override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
+        networkId = networkAdapter.getItem(position).id
+        hasSelectedNetwork = true
+      }
+    }
+
     var hasSetNetwork = false
     modelHelper.networks.switchMap {
       combineLatest(it.values.map(Network::liveNetworkInfo)).map {
@@ -79,6 +98,7 @@ class ChannelJoinFragment : ServiceBoundFragment() {
             val index = networkAdapter.indexOf(networkId)
             if (index != null) {
               network.setSelection(index)
+              hasSelectedNetwork = true
             }
           }
           hasSetNetwork = true
@@ -106,4 +126,11 @@ class ChannelJoinFragment : ServiceBoundFragment() {
 
     return view
   }
+
+  override fun onSaveInstanceState(outState: Bundle) {
+    super.onSaveInstanceState(outState)
+    if (networkId.isValidId() && hasSelectedNetwork) {
+      outState.putInt("network_id", networkId.id)
+    }
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
index 9244535ca..45309e444 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
@@ -97,23 +97,33 @@ class QueryCreateFragment : ServiceBoundFragment() {
   @Inject
   lateinit var modelHelper: QueryCreateViewModelHelper
 
+  private var hasSelectedNetwork = false
+  private var networkId = NetworkId(0)
+
   override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                             savedInstanceState: Bundle?): View? {
     val view = inflater.inflate(R.layout.add_query, container, false)
     ButterKnife.bind(this, view)
 
-    val networkId = NetworkId(arguments?.getInt("network_id", 0) ?: 0)
+    networkId = NetworkId(
+      savedInstanceState?.getInt("network_id", 0)
+      ?: arguments?.getInt("network_id", 0)
+      ?: 0
+    )
 
     val networkAdapter = NetworkAdapter()
     network.adapter = networkAdapter
 
     network.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
       override fun onNothingSelected(parent: AdapterView<*>?) {
-        modelHelper.queryCreate.networkId.onNext(NetworkId(0))
+        networkId = NetworkId(0)
+        modelHelper.queryCreate.networkId.onNext(networkId)
       }
 
       override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
-        modelHelper.queryCreate.networkId.onNext(networkAdapter.getItem(position).id)
+        networkId = networkAdapter.getItem(position).id
+        hasSelectedNetwork = true
+        modelHelper.queryCreate.networkId.onNext(networkId)
       }
     }
 
@@ -132,6 +142,7 @@ class QueryCreateFragment : ServiceBoundFragment() {
             val index = networkAdapter.indexOf(networkId)
             if (index != null) {
               network.setSelection(index)
+              hasSelectedNetwork = true
             }
           }
           hasSetNetwork = true
@@ -318,4 +329,11 @@ class QueryCreateFragment : ServiceBoundFragment() {
       )
     }
   }
+
+  override fun onSaveInstanceState(outState: Bundle) {
+    super.onSaveInstanceState(outState)
+    if (networkId.isValidId() && hasSelectedNetwork) {
+      outState.putInt("network_id", networkId.id)
+    }
+  }
 }
-- 
GitLab