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