package com.keylesspalace.tusky.settings import android.content.Context import android.widget.Button import androidx.activity.result.ActivityResultRegistryOwner import androidx.annotation.StringRes import androidx.core.widget.doAfterTextChanged import androidx.lifecycle.LifecycleOwner import androidx.preference.CheckBoxPreference import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceScreen import androidx.preference.SwitchPreference import com.keylesspalace.tusky.view.SliderPreference import de.c1710.filemojicompat_ui.views.picker.preference.EmojiPickerPreference class PreferenceParent( val context: Context, val addPref: (pref: Preference) -> Unit ) inline fun PreferenceParent.preference(builder: Preference.() -> Unit): Preference { val pref = Preference(context) builder(pref) addPref(pref) return pref } inline fun PreferenceParent.listPreference(builder: ListPreference.() -> Unit): ListPreference { val pref = ListPreference(context) builder(pref) addPref(pref) return pref } inline fun PreferenceParent.emojiPreference(activity: A, builder: EmojiPickerPreference.() -> Unit): EmojiPickerPreference where A : Context, A : ActivityResultRegistryOwner, A : LifecycleOwner { val pref = EmojiPickerPreference.get(activity) builder(pref) addPref(pref) return pref } inline fun PreferenceParent.sliderPreference( builder: SliderPreference.() -> Unit ): SliderPreference { val pref = SliderPreference(context) builder(pref) addPref(pref) return pref } inline fun PreferenceParent.switchPreference( builder: SwitchPreference.() -> Unit ): SwitchPreference { val pref = SwitchPreference(context) builder(pref) addPref(pref) return pref } inline fun PreferenceParent.validatedEditTextPreference( errorMessage: String?, crossinline isValid: (a: String) -> Boolean, builder: EditTextPreference.() -> Unit ): EditTextPreference { val pref = EditTextPreference(context) pref.setOnBindEditTextListener { editText -> editText.doAfterTextChanged { editable -> requireNotNull(editable) val btn = editText.rootView.findViewById