fix crash when rotating screen in a preference dialog twice (#2083)
This commit is contained in:
parent
cd06b01d61
commit
6ebbe5f657
1 changed files with 30 additions and 26 deletions
|
@ -21,6 +21,7 @@ import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.commit
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.keylesspalace.tusky.BaseActivity
|
import com.keylesspalace.tusky.BaseActivity
|
||||||
import com.keylesspalace.tusky.MainActivity
|
import com.keylesspalace.tusky.MainActivity
|
||||||
|
@ -58,33 +59,36 @@ class PreferencesActivity : BaseActivity(), SharedPreferences.OnSharedPreference
|
||||||
setDisplayShowHomeEnabled(true)
|
setDisplayShowHomeEnabled(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
val fragment: Fragment = when (intent.getIntExtra(EXTRA_PREFERENCE_TYPE, 0)) {
|
val fragmentTag = "preference_fragment_$EXTRA_PREFERENCE_TYPE"
|
||||||
GENERAL_PREFERENCES -> {
|
|
||||||
setTitle(R.string.action_view_preferences)
|
|
||||||
PreferencesFragment.newInstance()
|
|
||||||
}
|
|
||||||
ACCOUNT_PREFERENCES -> {
|
|
||||||
setTitle(R.string.action_view_account_preferences)
|
|
||||||
AccountPreferencesFragment.newInstance()
|
|
||||||
}
|
|
||||||
NOTIFICATION_PREFERENCES -> {
|
|
||||||
setTitle(R.string.pref_title_edit_notification_settings)
|
|
||||||
NotificationPreferencesFragment.newInstance()
|
|
||||||
}
|
|
||||||
TAB_FILTER_PREFERENCES -> {
|
|
||||||
setTitle(R.string.pref_title_status_tabs)
|
|
||||||
TabFilterPreferencesFragment.newInstance()
|
|
||||||
}
|
|
||||||
PROXY_PREFERENCES -> {
|
|
||||||
setTitle(R.string.pref_title_http_proxy_settings)
|
|
||||||
ProxyPreferencesFragment.newInstance()
|
|
||||||
}
|
|
||||||
else -> throw IllegalArgumentException("preferenceType not known")
|
|
||||||
}
|
|
||||||
|
|
||||||
supportFragmentManager.beginTransaction()
|
val fragment: Fragment = supportFragmentManager.findFragmentByTag(fragmentTag)
|
||||||
.replace(R.id.fragment_container, fragment)
|
?: when (intent.getIntExtra(EXTRA_PREFERENCE_TYPE, 0)) {
|
||||||
.commit()
|
GENERAL_PREFERENCES -> {
|
||||||
|
setTitle(R.string.action_view_preferences)
|
||||||
|
PreferencesFragment.newInstance()
|
||||||
|
}
|
||||||
|
ACCOUNT_PREFERENCES -> {
|
||||||
|
setTitle(R.string.action_view_account_preferences)
|
||||||
|
AccountPreferencesFragment.newInstance()
|
||||||
|
}
|
||||||
|
NOTIFICATION_PREFERENCES -> {
|
||||||
|
setTitle(R.string.pref_title_edit_notification_settings)
|
||||||
|
NotificationPreferencesFragment.newInstance()
|
||||||
|
}
|
||||||
|
TAB_FILTER_PREFERENCES -> {
|
||||||
|
setTitle(R.string.pref_title_status_tabs)
|
||||||
|
TabFilterPreferencesFragment.newInstance()
|
||||||
|
}
|
||||||
|
PROXY_PREFERENCES -> {
|
||||||
|
setTitle(R.string.pref_title_http_proxy_settings)
|
||||||
|
ProxyPreferencesFragment.newInstance()
|
||||||
|
}
|
||||||
|
else -> throw IllegalArgumentException("preferenceType not known")
|
||||||
|
}
|
||||||
|
|
||||||
|
supportFragmentManager.commit {
|
||||||
|
replace(R.id.fragment_container, fragment, fragmentTag)
|
||||||
|
}
|
||||||
|
|
||||||
restartActivitiesOnExit = intent.getBooleanExtra("restart", false)
|
restartActivitiesOnExit = intent.getBooleanExtra("restart", false)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue