diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt index 49abf9e6..d298c76d 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt @@ -15,8 +15,9 @@ import be.mygod.vpnhotspot.net.monitor.FallbackUpstreamMonitor import be.mygod.vpnhotspot.net.monitor.IpMonitor import be.mygod.vpnhotspot.net.monitor.UpstreamMonitor import be.mygod.vpnhotspot.net.wifi.WifiDoubleLock -import be.mygod.vpnhotspot.preference.AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat +import be.mygod.vpnhotspot.preference.AlwaysAutoCompleteEditTextPreferenceDialogFragment import be.mygod.vpnhotspot.preference.SharedPreferenceDataStore +import be.mygod.vpnhotspot.preference.SummaryFallbackProvider import be.mygod.vpnhotspot.util.RootSession import be.mygod.vpnhotspot.util.launchUrl import be.mygod.vpnhotspot.widget.SmartSnackbar @@ -40,6 +41,8 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { RoutingManager.masqueradeMode = RoutingManager.masqueradeMode preferenceManager.preferenceDataStore = SharedPreferenceDataStore(app.pref) addPreferencesFromResource(R.xml.pref_settings) + SummaryFallbackProvider(findPreference(UpstreamMonitor.KEY)!!) + SummaryFallbackProvider(findPreference(FallbackUpstreamMonitor.KEY)!!) findPreference("system.enableTetherOffload")!!.apply { if (Build.VERSION.SDK_INT >= 27) { isChecked = TetherOffloadManager.enabled @@ -167,7 +170,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { override fun onDisplayPreferenceDialog(preference: Preference) { when (preference.key) { UpstreamMonitor.KEY, FallbackUpstreamMonitor.KEY -> - AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat().apply { + AlwaysAutoCompleteEditTextPreferenceDialogFragment().apply { setArguments(preference.key, try { NetworkInterface.getNetworkInterfaces().asSequence() .filter { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreference.kt b/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreference.kt deleted file mode 100644 index cb01b24f..00000000 --- a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreference.kt +++ /dev/null @@ -1,25 +0,0 @@ -package be.mygod.vpnhotspot.preference - -import android.content.Context -import android.text.TextUtils -import android.util.AttributeSet -import androidx.preference.EditTextPreference -import be.mygod.vpnhotspot.R -import be.mygod.vpnhotspot.widget.AlwaysAutoCompleteEditText - -open class AlwaysAutoCompleteEditTextPreference @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.editTextPreferenceStyle, - defStyleRes: Int = 0) : EditTextPreference(context, attrs, defStyleAttr, defStyleRes) { - val editText = AlwaysAutoCompleteEditText(context, attrs) - - init { - editText.id = android.R.id.edit - SummaryFallbackProvider(this) - } - - override fun setText(text: String?) { - val oldText = getText() - super.setText(text) - if (!TextUtils.equals(text, oldText)) notifyChanged() - } -} diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreferenceDialogFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreferenceDialogFragment.kt new file mode 100644 index 00000000..74947d35 --- /dev/null +++ b/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreferenceDialogFragment.kt @@ -0,0 +1,38 @@ +package be.mygod.vpnhotspot.preference + +import android.content.Context +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import androidx.core.os.bundleOf +import androidx.preference.EditTextPreferenceDialogFragmentCompat +import be.mygod.vpnhotspot.widget.AlwaysAutoCompleteEditText + +class AlwaysAutoCompleteEditTextPreferenceDialogFragment : EditTextPreferenceDialogFragmentCompat() { + companion object { + private const val ARG_SUGGESTIONS = "suggestions" + } + + fun setArguments(key: String, suggestions: Array) { + arguments = bundleOf(ARG_KEY to key, ARG_SUGGESTIONS to suggestions) + } + + private lateinit var editText: AlwaysAutoCompleteEditText + + override fun onCreateDialogView(context: Context) = super.onCreateDialogView(context).apply { + editText = AlwaysAutoCompleteEditText(context).apply { id = android.R.id.edit } + val oldEditText = findViewById(android.R.id.edit)!! + val container = oldEditText.parent as ViewGroup + container.removeView(oldEditText) + container.addView(editText, oldEditText.layoutParams) + } + + override fun onBindDialogView(view: View) { + super.onBindDialogView(view) + editText.hint = (preference.summaryProvider as SummaryFallbackProvider).fallback + arguments?.getStringArray(ARG_SUGGESTIONS)?.let { suggestions -> + editText.setAdapter(ArrayAdapter(view.context, android.R.layout.select_dialog_item, suggestions)) + } + editText.clearFocus() // having focus is buggy currently + } +} diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat.kt b/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat.kt deleted file mode 100644 index 53038b83..00000000 --- a/mobile/src/main/java/be/mygod/vpnhotspot/preference/AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat.kt +++ /dev/null @@ -1,55 +0,0 @@ -package be.mygod.vpnhotspot.preference - -import android.view.View -import android.view.ViewGroup -import android.widget.ArrayAdapter -import androidx.appcompat.widget.AppCompatAutoCompleteTextView -import androidx.core.os.bundleOf -import androidx.preference.PreferenceDialogFragmentCompat - -class AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat : PreferenceDialogFragmentCompat() { - companion object { - private const val ARG_SUGGESTIONS = "suggestions" - } - - fun setArguments(key: String, suggestions: Array) { - arguments = bundleOf(Pair(ARG_KEY, key), Pair(ARG_SUGGESTIONS, suggestions)) - } - - private lateinit var editText: AppCompatAutoCompleteTextView - private val editTextPreference get() = this.preference as AlwaysAutoCompleteEditTextPreference - - override fun onBindDialogView(view: View) { - super.onBindDialogView(view) - - editText = editTextPreference.editText - editText.hint = (editTextPreference.summaryProvider as SummaryFallbackProvider).fallback - editText.setText(this.editTextPreference.text) - - val text = editText.text - if (text != null) editText.setSelection(text.length, text.length) - - val suggestions = arguments?.getStringArray(ARG_SUGGESTIONS) - if (suggestions != null) - editText.setAdapter(ArrayAdapter(view.context, android.R.layout.select_dialog_item, suggestions)) - - val oldParent = editText.parent as? ViewGroup? - if (oldParent === view) return - oldParent?.removeView(editText) - val oldEditText = view.findViewById(android.R.id.edit) ?: return - val container = oldEditText.parent as? ViewGroup? ?: return - container.removeView(oldEditText) - container.addView(editText, oldEditText.layoutParams) - } - - override fun needInputMethod(): Boolean = true - - override fun onDialogClosed(positiveResult: Boolean) { - if (positiveResult) { - val value = this.editText.text.toString() - if (this.editTextPreference.callChangeListener(value)) { - this.editTextPreference.text = value - } - } - } -} diff --git a/mobile/src/main/res/xml/pref_settings.xml b/mobile/src/main/res/xml/pref_settings.xml index 6c496cd7..51f707c9 100644 --- a/mobile/src/main/res/xml/pref_settings.xml +++ b/mobile/src/main/res/xml/pref_settings.xml @@ -7,12 +7,12 @@ app:summary="@string/settings_service_clean_summary"/> - -