From 00410a83188aa816e5eee0f92652b517aab42e38 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 21 Jan 2019 17:39:20 +0100
Subject: [PATCH] Properly keep state in irc:// setup activity

---
 .../ui/setup/ServiceBoundSetupActivity.kt      |  4 +++-
 .../quasseldroid/ui/setup/SetupActivity.kt     |  4 +++-
 .../quasseldroid/ui/setup/SlidePagerAdapter.kt | 10 ++++++++--
 .../setup/network/NetworkSetupNetworkSlide.kt  | 18 ++++++++++++------
 4 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt
index e101073fb..d07427e07 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt
@@ -248,8 +248,10 @@ abstract class ServiceBoundSetupActivity :
   override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
     super.onRestoreInstanceState(savedInstanceState)
     if (savedInstanceState != null) {
-      if (savedInstanceState.containsKey(resultKey))
+      if (savedInstanceState.containsKey(resultKey)) {
         adapter.result.putAll(savedInstanceState.getBundle(resultKey))
+        adapter.allChanged()
+      }
       if (savedInstanceState.containsKey(lastValidItemKey))
         adapter.lastValidItem = savedInstanceState.getInt(lastValidItemKey)
       if (savedInstanceState.containsKey(currentItemKey))
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt
index fcc7790be..0a028877c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt
@@ -209,8 +209,10 @@ abstract class SetupActivity : DaggerAppCompatActivity() {
   override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
     super.onRestoreInstanceState(savedInstanceState)
     if (savedInstanceState != null) {
-      if (savedInstanceState.containsKey(resultKey))
+      if (savedInstanceState.containsKey(resultKey)) {
         adapter.result.putAll(savedInstanceState.getBundle(resultKey))
+        adapter.allChanged()
+      }
       if (savedInstanceState.containsKey(lastValidItemKey))
         adapter.lastValidItem = savedInstanceState.getInt(lastValidItemKey)
       if (savedInstanceState.containsKey(currentItemKey))
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SlidePagerAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SlidePagerAdapter.kt
index 6db79e079..8f2365995 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SlidePagerAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SlidePagerAdapter.kt
@@ -49,7 +49,7 @@ class SlidePagerAdapter(private val fragmentManager: FragmentManager) :
     return retainedFragments.get(position) ?: list[position]
   }
 
-  override fun getCount() = Math.min(list.size, lastValidItem + 2)
+  override fun getCount() = minOf(list.size, lastValidItem + 2)
   val totalCount get() = list.size
   fun addFragment(fragment: SlideFragment) {
     list.add(fragment)
@@ -90,9 +90,15 @@ class SlidePagerAdapter(private val fragmentManager: FragmentManager) :
     retainedFragments.put(index, fragment)
   }
 
+  fun allChanged() {
+    for (index in 0 until totalCount) {
+      hasChanged(index, getItem(index))
+    }
+  }
+
   fun hasChanged(index: Int, fragment: SlideFragment) {
     fragment.getData(result)
-    if (index > -1 && index < totalCount) {
+    if (index > -1 && (index + 1) < totalCount) {
       getItem(index + 1).setData(result)
     }
   }
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 1acc33c17..09b135725 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
@@ -123,6 +123,7 @@ class NetworkSetupNetworkSlide : ServiceBoundSlideFragment() {
           )
         )
       )
+      data.putInt("network_id", -1)
     }
   }
 
@@ -225,16 +226,21 @@ class NetworkSetupNetworkSlide : ServiceBoundSlideFragment() {
       networkAdapter.submitList(listOf(null) + networks)
       val linkNetwork = data.getSerializable("network") as? LinkNetwork
 
-      val existingNetwork = networks.firstOrNull {
-        it.serverList.any {
-          it.host == linkNetwork?.server?.host
+      val selectedNetworkId = if (data.containsKey("network_id")) {
+        data.getInt("network_id")
+      } else {
+        val existingNetwork = networks.firstOrNull {
+          it.serverList.any {
+            it.host == linkNetwork?.server?.host
+          }
         }
+        existingNetwork?.networkId
       }
+      val selectedNetworkPosition = networkAdapter.indexOf(selectedNetworkId ?: -1) ?: -1
 
       if (!hasSetNetwork) {
-        val networkPosition = networkAdapter.indexOf(existingNetwork?.networkId ?: -1) ?: -1
-        if (networkPosition != -1) {
-          network.setSelection(networkPosition)
+        if (selectedNetworkPosition != -1 || selectedNetworkId == -1) {
+          network.setSelection(selectedNetworkPosition)
           hasSetNetwork = true
         }
       }
-- 
GitLab