Skip to content
Snippets Groups Projects
Verified Commit 63b2416b authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Crash fixes

parent 8162a25c
Branches
No related tags found
No related merge requests found
Pipeline #475 canceled
...@@ -33,7 +33,7 @@ class ClientSettingsActivity : SettingsActivity(ClientSettingsFragment()), ...@@ -33,7 +33,7 @@ class ClientSettingsActivity : SettingsActivity(ClientSettingsFragment()),
when (pref) { when (pref) {
is ListPreference -> { is ListPreference -> {
val f = ListPreferenceDialogFragmentCompat.newInstance(pref.getKey()) val f = ListPreferenceDialogFragmentCompat.newInstance(pref.getKey())
f.setTargetFragment(fragment, 0) f.setTargetFragment(actualFragment, 0)
f.show(supportFragmentManager, DIALOG_FRAGMENT_TAG) f.show(supportFragmentManager, DIALOG_FRAGMENT_TAG)
true true
} }
......
...@@ -35,6 +35,7 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu ...@@ -35,6 +35,7 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu
protected open fun fragment(): Fragment? = null protected open fun fragment(): Fragment? = null
private var changeable: Changeable? = null private var changeable: Changeable? = null
protected var actualFragment: Fragment? = null
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
lateinit var toolbar: Toolbar lateinit var toolbar: Toolbar
...@@ -48,19 +49,30 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu ...@@ -48,19 +49,30 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu
setSupportActionBar(toolbar) setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) val existingFragment = savedInstanceState?.let {
?: this.fragment supportFragmentManager.getFragment(it, "settings_content")
?: this.fragment() }
if (fragment != null) {
actualFragment = existingFragment ?: this.fragment ?: this.fragment()
if (existingFragment == null) {
actualFragment?.let {
val transaction = supportFragmentManager.beginTransaction() val transaction = supportFragmentManager.beginTransaction()
fragment.arguments = arguments it.arguments = arguments
transaction.replace(R.id.fragment_container, fragment) transaction.replace(R.id.fragment_container, it)
transaction.commit() transaction.commit()
} }
}
this.changeable = fragment as? Changeable this.changeable = fragment as? Changeable
} }
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
actualFragment?.let {
supportFragmentManager.putFragment(outState, "settings_content", it)
}
}
private fun shouldNavigateAway(callback: () -> Unit) { private fun shouldNavigateAway(callback: () -> Unit) {
val changeable = this.changeable val changeable = this.changeable
if (changeable?.hasChanged() == true) { if (changeable?.hasChanged() == true) {
......
...@@ -34,6 +34,7 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them ...@@ -34,6 +34,7 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them
protected open fun fragment(): Fragment? = null protected open fun fragment(): Fragment? = null
private var changeable: Changeable? = null private var changeable: Changeable? = null
protected var actualFragment: Fragment? = null
@BindView(R.id.toolbar) @BindView(R.id.toolbar)
lateinit var toolbar: Toolbar lateinit var toolbar: Toolbar
...@@ -47,19 +48,30 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them ...@@ -47,19 +48,30 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them
setSupportActionBar(toolbar) setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) val existingFragment = savedInstanceState?.let {
?: this.fragment supportFragmentManager.getFragment(it, "settings_content")
?: this.fragment() }
if (fragment != null) {
actualFragment = existingFragment ?: this.fragment ?: this.fragment()
if (existingFragment == null) {
actualFragment?.let {
val transaction = supportFragmentManager.beginTransaction() val transaction = supportFragmentManager.beginTransaction()
fragment.arguments = arguments it.arguments = arguments
transaction.replace(R.id.fragment_container, fragment) transaction.replace(R.id.fragment_container, it)
transaction.commit() transaction.commit()
} }
}
this.changeable = fragment as? Changeable this.changeable = fragment as? Changeable
} }
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
actualFragment?.let {
supportFragmentManager.putFragment(outState, "settings_content", it)
}
}
private fun shouldNavigateAway(callback: () -> Unit) { private fun shouldNavigateAway(callback: () -> Unit) {
val changeable = this.changeable val changeable = this.changeable
if (changeable?.hasChanged() == true) { if (changeable?.hasChanged() == true) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment