From 7bffb5f22d70ae073a0b170d976aa629aac12f36 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 23 Apr 2022 14:45:45 +0300 Subject: [PATCH] Select source domains using AutoCompleteTextView --- app/build.gradle | 2 +- .../kotatsu/settings/SourceSettingsExt.kt | 32 ++++------ .../utils/AutoCompleteTextViewPreference.kt | 58 ++++++++++++++++++ ...preference_dialog_autocompletetextview.xml | 59 +++++++++++++++++++ app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/styles.xml | 4 ++ 6 files changed, 136 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/org/koitharu/kotatsu/settings/utils/AutoCompleteTextViewPreference.kt create mode 100644 app/src/main/res/layout/preference_dialog_autocompletetextview.xml diff --git a/app/build.gradle b/app/build.gradle index c48ed31fd..efa110f85 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,7 +65,7 @@ android { } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) - implementation('com.github.nv95:kotatsu-parsers:c1aa8a45dc') { + implementation('com.github.nv95:kotatsu-parsers:1d171d41fe') { exclude group: 'org.json', module: 'json' } diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsExt.kt b/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsExt.kt index 0392bb9c7..3a7c8843c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/SourceSettingsExt.kt @@ -1,15 +1,15 @@ package org.koitharu.kotatsu.settings import android.view.inputmethod.EditorInfo -import androidx.preference.* +import androidx.preference.EditTextPreference +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.parser.RemoteMangaRepository import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.settings.utils.AutoCompleteTextViewPreference import org.koitharu.kotatsu.settings.utils.EditTextBindListener import org.koitharu.kotatsu.settings.utils.EditTextDefaultSummaryProvider -import org.koitharu.kotatsu.utils.ext.setDefaultValueCompat - -private const val KEY_DOMAIN = "domain" fun PreferenceFragmentCompat.addPreferencesFromRepository(repository: RemoteMangaRepository) { val configKeys = repository.getConfigKeys() @@ -19,23 +19,17 @@ fun PreferenceFragmentCompat.addPreferencesFromRepository(repository: RemoteMang is ConfigKey.Domain -> { val presetValues = key.presetValues if (presetValues.isNullOrEmpty()) { - EditTextPreference(requireContext()).apply { - summaryProvider = EditTextDefaultSummaryProvider(key.defaultValue) - setOnBindEditTextListener( - EditTextBindListener( - inputType = EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_URI, - hint = key.defaultValue, - ) - ) - } + EditTextPreference(requireContext()) } else { - DropDownPreference(requireContext()).apply { - entries = presetValues - entryValues = entries - summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() - setDefaultValueCompat(key.defaultValue) - } + AutoCompleteTextViewPreference(requireContext()).apply { entries = presetValues } }.apply { + summaryProvider = EditTextDefaultSummaryProvider(key.defaultValue) + setOnBindEditTextListener( + EditTextBindListener( + inputType = EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_URI, + hint = key.defaultValue, + ) + ) setTitle(R.string.domain) setDialogTitle(R.string.domain) } diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/utils/AutoCompleteTextViewPreference.kt b/app/src/main/java/org/koitharu/kotatsu/settings/utils/AutoCompleteTextViewPreference.kt new file mode 100644 index 000000000..fe1d3f15c --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/settings/utils/AutoCompleteTextViewPreference.kt @@ -0,0 +1,58 @@ +package org.koitharu.kotatsu.settings.utils + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.AutoCompleteTextView +import android.widget.EditText +import androidx.annotation.ArrayRes +import androidx.annotation.AttrRes +import androidx.annotation.StyleRes +import androidx.preference.EditTextPreference +import org.koitharu.kotatsu.R + +class AutoCompleteTextViewPreference @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + @AttrRes defStyleAttr: Int = R.attr.autoCompleteTextViewPreferenceStyle, + @StyleRes defStyleRes: Int = R.style.Preference_AutoCompleteTextView, +) : EditTextPreference(context, attrs, defStyleAttr, defStyleRes) { + + private val autoCompleteBindListener = AutoCompleteBindListener() + var entries: Array = emptyArray() + + init { + super.setOnBindEditTextListener(autoCompleteBindListener) + } + + fun setEntries(@ArrayRes arrayResId: Int) { + this.entries = context.resources.getStringArray(arrayResId) + } + + fun setEntries(entries: Collection) { + this.entries = entries.toTypedArray() + } + + override fun setOnBindEditTextListener(onBindEditTextListener: OnBindEditTextListener?) { + autoCompleteBindListener.delegate = onBindEditTextListener + } + + private inner class AutoCompleteBindListener : OnBindEditTextListener { + + var delegate: OnBindEditTextListener? = null + + override fun onBindEditText(editText: EditText) { + delegate?.onBindEditText(editText) + if (editText !is AutoCompleteTextView || entries.isEmpty()) { + return + } + editText.threshold = 0 + editText.setAdapter(ArrayAdapter(editText.context, android.R.layout.simple_spinner_dropdown_item, entries)) + (editText.parent as? ViewGroup)?.findViewById(R.id.dropdown)?.setOnClickListener { + editText.showDropDown() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/preference_dialog_autocompletetextview.xml b/app/src/main/res/layout/preference_dialog_autocompletetextview.xml new file mode 100644 index 000000000..38f92332d --- /dev/null +++ b/app/src/main/res/layout/preference_dialog_autocompletetextview.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 449fc3a29..c14ddff76 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -3,6 +3,7 @@ + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2ad34b167..2333f5d68 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -156,4 +156,8 @@ @layout/preference_dialog_multiautocompletetextview + +