Simplify onDisplayPreferenceDialog in MyPreferenceFragment

This commit is contained in:
iovxw 2026-07-26 15:47:44 +08:00
parent 11d006354e
commit 10f62c6936
No known key found for this signature in database
GPG Key ID: C84626C2D3D79995

View File

@ -4,9 +4,6 @@
*/ */
package org.fcitx.fcitx5.android.ui.main.modified package org.fcitx.fcitx5.android.ui.main.modified
import android.annotation.SuppressLint
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.preference.EditTextPreference import androidx.preference.EditTextPreference
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
@ -14,55 +11,12 @@ import androidx.preference.PreferenceFragmentCompat
abstract class MyPreferenceFragment : PreferenceFragmentCompat() { abstract class MyPreferenceFragment : PreferenceFragmentCompat() {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@SuppressLint("RestrictedApi")
override fun onDisplayPreferenceDialog(preference: Preference) { override fun onDisplayPreferenceDialog(preference: Preference) {
if (parentFragmentManager.findFragmentByTag(javaClass.name) != null) return
var handled = false val f = when (preference) {
if (callbackFragment is OnPreferenceDisplayDialogCallback) { is EditTextPreference -> MyEditTextPreferenceDialogFragment.newInstance(preference.key)
handled = is ListPreference -> MyListPreferenceDialogFragment.newInstance(preference.key)
(callbackFragment as OnPreferenceDisplayDialogCallback).onPreferenceDisplayDialog( else -> return super.onDisplayPreferenceDialog(preference)
this,
preference
)
}
var callbackFragment: Fragment? = this
while (!handled && callbackFragment != null) {
if (callbackFragment is OnPreferenceDisplayDialogCallback) {
handled = (callbackFragment as OnPreferenceDisplayDialogCallback)
.onPreferenceDisplayDialog(this, preference)
}
callbackFragment = callbackFragment.parentFragment
}
if (!handled && context is OnPreferenceDisplayDialogCallback) {
handled = (context as OnPreferenceDisplayDialogCallback)
.onPreferenceDisplayDialog(this, preference)
}
if (!handled && activity is OnPreferenceDisplayDialogCallback) {
handled = (activity as OnPreferenceDisplayDialogCallback)
.onPreferenceDisplayDialog(this, preference)
}
if (handled) {
return
}
if (parentFragmentManager.findFragmentByTag(javaClass.name) != null) {
return
}
val f: DialogFragment = when (preference) {
is EditTextPreference -> {
MyEditTextPreferenceDialogFragment.newInstance(preference.getKey())
}
is ListPreference -> {
MyListPreferenceDialogFragment.newInstance(preference.getKey())
}
else -> {
throw IllegalArgumentException(
"Cannot display dialog for an unknown Preference type: ${preference.javaClass.name}"
)
}
} }
f.setTargetFragment(this, 0) f.setTargetFragment(this, 0)
f.show(parentFragmentManager, javaClass.name) f.show(parentFragmentManager, javaClass.name)