From 9b9cfd8de2eaefe56b57866da15adfc6671bb4d8 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 7 Mar 2024 18:36:13 +0530 Subject: [PATCH] Implement Material3 based EditTextPreference Signed-off-by: Aayush Gupta --- .../main/java/com/aurora/extensions/View.kt | 2 +- .../custom/preference/M3EditTextPreference.kt | 48 +++++++++++++++++++ ...gFragmentCompat.kt => M3ListPreference.kt} | 6 +-- .../ui/preferences/BasePreferenceFragment.kt | 30 ++++++++---- 4 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/view/custom/preference/M3EditTextPreference.kt rename app/src/main/java/com/aurora/store/view/custom/preference/{ListPreferenceMaterialDialogFragmentCompat.kt => M3ListPreference.kt} (83%) diff --git a/app/src/main/java/com/aurora/extensions/View.kt b/app/src/main/java/com/aurora/extensions/View.kt index e011558fa..cbaf93c6e 100644 --- a/app/src/main/java/com/aurora/extensions/View.kt +++ b/app/src/main/java/com/aurora/extensions/View.kt @@ -44,7 +44,7 @@ fun View.invisible() { fun View.showKeyboard() { val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager this.requestFocus() - imm.showSoftInput(this, 0) + imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) } fun View.hideKeyboard(): Boolean { diff --git a/app/src/main/java/com/aurora/store/view/custom/preference/M3EditTextPreference.kt b/app/src/main/java/com/aurora/store/view/custom/preference/M3EditTextPreference.kt new file mode 100644 index 000000000..c9dfcd7a1 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/custom/preference/M3EditTextPreference.kt @@ -0,0 +1,48 @@ +package com.aurora.store.view.custom.preference + +import android.app.Dialog +import android.os.Bundle +import android.view.WindowManager +import androidx.preference.EditTextPreferenceDialogFragmentCompat +import com.google.android.material.dialog.MaterialAlertDialogBuilder + + +class M3EditTextPreference : EditTextPreferenceDialogFragmentCompat() { + + companion object { + const val PREFERENCE_DIALOG_FRAGMENT_TAG = "androidx.preference.PreferenceFragment.DIALOG" + + fun newInstance(key: String?): M3EditTextPreference { + val fragment = M3EditTextPreference() + val bundle = Bundle(1) + bundle.putString(ARG_KEY, key) + fragment.arguments = bundle + return fragment + } + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val builder = MaterialAlertDialogBuilder(requireContext()) + .setTitle(preference.dialogTitle) + .setIcon(preference.dialogIcon) + .setPositiveButton(preference.positiveButtonText, this) + .setNegativeButton(preference.negativeButtonText, this) + + val contentView = onCreateDialogView(requireContext()) + if (contentView != null) { + onBindDialogView(contentView) + builder.setView(contentView) + } else { + builder.setMessage(preference.dialogMessage) + } + + onPrepareDialogBuilder(builder) + return builder.create() + } + + + override fun onResume() { + super.onResume() + dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + } +} diff --git a/app/src/main/java/com/aurora/store/view/custom/preference/ListPreferenceMaterialDialogFragmentCompat.kt b/app/src/main/java/com/aurora/store/view/custom/preference/M3ListPreference.kt similarity index 83% rename from app/src/main/java/com/aurora/store/view/custom/preference/ListPreferenceMaterialDialogFragmentCompat.kt rename to app/src/main/java/com/aurora/store/view/custom/preference/M3ListPreference.kt index cd624ffd0..92790b434 100644 --- a/app/src/main/java/com/aurora/store/view/custom/preference/ListPreferenceMaterialDialogFragmentCompat.kt +++ b/app/src/main/java/com/aurora/store/view/custom/preference/M3ListPreference.kt @@ -5,13 +5,13 @@ import android.os.Bundle import androidx.preference.ListPreferenceDialogFragmentCompat import com.google.android.material.dialog.MaterialAlertDialogBuilder -class ListPreferenceMaterialDialogFragmentCompat : ListPreferenceDialogFragmentCompat() { +class M3ListPreference : ListPreferenceDialogFragmentCompat() { companion object { const val PREFERENCE_DIALOG_FRAGMENT_TAG = "androidx.preference.PreferenceFragment.DIALOG" - fun newInstance(key: String?): ListPreferenceMaterialDialogFragmentCompat { - val fragment = ListPreferenceMaterialDialogFragmentCompat() + fun newInstance(key: String?): M3ListPreference { + val fragment = M3ListPreference() val bundle = Bundle(1) bundle.putString(ARG_KEY, key) fragment.arguments = bundle diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/BasePreferenceFragment.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/BasePreferenceFragment.kt index d76e53863..fdf8c60ec 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/BasePreferenceFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/BasePreferenceFragment.kt @@ -1,21 +1,33 @@ package com.aurora.store.view.ui.preferences +import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import com.aurora.store.view.custom.preference.ListPreferenceMaterialDialogFragmentCompat +import com.aurora.store.view.custom.preference.M3EditTextPreference +import com.aurora.store.view.custom.preference.M3ListPreference abstract class BasePreferenceFragment : PreferenceFragmentCompat() { override fun onDisplayPreferenceDialog(preference: Preference) { - if (preference is ListPreference) { - val dialogFragment = ListPreferenceMaterialDialogFragmentCompat.newInstance(preference.getKey()) - dialogFragment.setTargetFragment(this, 0) - dialogFragment.show(parentFragmentManager, - ListPreferenceMaterialDialogFragmentCompat.PREFERENCE_DIALOG_FRAGMENT_TAG - ) - } else { - super.onDisplayPreferenceDialog(preference) + when (preference) { + is EditTextPreference -> { + val dialogFragment = M3EditTextPreference.newInstance(preference.getKey()) + dialogFragment.setTargetFragment(this, 0) + dialogFragment.show( + parentFragmentManager, + M3EditTextPreference.PREFERENCE_DIALOG_FRAGMENT_TAG + ) + } + is ListPreference -> { + val dialogFragment = M3ListPreference.newInstance(preference.getKey()) + dialogFragment.setTargetFragment(this, 0) + dialogFragment.show( + parentFragmentManager, + M3ListPreference.PREFERENCE_DIALOG_FRAGMENT_TAG + ) + } + else -> super.onDisplayPreferenceDialog(preference) } } }