Implement Material3 based EditTextPreference

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-03-07 18:36:13 +05:30
parent 8f09c7d6ed
commit 9b9cfd8de2
4 changed files with 73 additions and 13 deletions

View File

@@ -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 {

View File

@@ -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)
}
}

View File

@@ -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

View File

@@ -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)
}
}
}