mirror of
https://github.com/binwiederhier/ntfy-android.git
synced 2024-06-01 18:29:42 +12:00
51 lines
2.2 KiB
Kotlin
51 lines
2.2 KiB
Kotlin
package io.heckel.ntfy.ui
|
|
|
|
import androidx.preference.EditTextPreference
|
|
import androidx.preference.ListPreference
|
|
import androidx.preference.Preference
|
|
import androidx.preference.PreferenceFragmentCompat
|
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
import com.google.android.material.textfield.TextInputEditText
|
|
import io.heckel.ntfy.R
|
|
|
|
abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
|
|
/**
|
|
* Show [ListPreference] and [EditTextPreference] dialog by [MaterialAlertDialogBuilder]
|
|
*/
|
|
override fun onDisplayPreferenceDialog(preference: Preference) {
|
|
when (preference) {
|
|
is ListPreference -> {
|
|
val prefIndex = preference.entryValues.indexOf(preference.value)
|
|
MaterialAlertDialogBuilder(requireContext())
|
|
.setTitle(preference.title)
|
|
.setSingleChoiceItems(preference.entries, prefIndex) { dialog, index ->
|
|
val newValue = preference.entryValues[index].toString()
|
|
if (preference.callChangeListener(newValue)) {
|
|
preference.value = newValue
|
|
}
|
|
dialog.dismiss()
|
|
}
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show()
|
|
}
|
|
is EditTextPreference -> {
|
|
val view = layoutInflater.inflate(R.layout.dialog_edit_text_preference, null)
|
|
val editText = view.findViewById<TextInputEditText>(R.id.editText)
|
|
editText.setText(preference.text.toString())
|
|
MaterialAlertDialogBuilder(requireContext())
|
|
.setTitle(preference.title)
|
|
.setView(view)
|
|
.setPositiveButton(android.R.string.ok) { _, _ ->
|
|
val newValue = editText.text.toString()
|
|
if (preference.callChangeListener(newValue)) {
|
|
preference.text = newValue
|
|
}
|
|
}
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show()
|
|
}
|
|
else -> super.onDisplayPreferenceDialog(preference)
|
|
}
|
|
}
|
|
}
|