Implement Material3 based EditTextPreference
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -44,7 +44,7 @@ fun View.invisible() {
|
|||||||
fun View.showKeyboard() {
|
fun View.showKeyboard() {
|
||||||
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
this.requestFocus()
|
this.requestFocus()
|
||||||
imm.showSoftInput(this, 0)
|
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun View.hideKeyboard(): Boolean {
|
fun View.hideKeyboard(): Boolean {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,13 +5,13 @@ import android.os.Bundle
|
|||||||
import androidx.preference.ListPreferenceDialogFragmentCompat
|
import androidx.preference.ListPreferenceDialogFragmentCompat
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
|
||||||
class ListPreferenceMaterialDialogFragmentCompat : ListPreferenceDialogFragmentCompat() {
|
class M3ListPreference : ListPreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val PREFERENCE_DIALOG_FRAGMENT_TAG = "androidx.preference.PreferenceFragment.DIALOG"
|
const val PREFERENCE_DIALOG_FRAGMENT_TAG = "androidx.preference.PreferenceFragment.DIALOG"
|
||||||
|
|
||||||
fun newInstance(key: String?): ListPreferenceMaterialDialogFragmentCompat {
|
fun newInstance(key: String?): M3ListPreference {
|
||||||
val fragment = ListPreferenceMaterialDialogFragmentCompat()
|
val fragment = M3ListPreference()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
bundle.putString(ARG_KEY, key)
|
bundle.putString(ARG_KEY, key)
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
@@ -1,21 +1,33 @@
|
|||||||
package com.aurora.store.view.ui.preferences
|
package com.aurora.store.view.ui.preferences
|
||||||
|
|
||||||
|
import androidx.preference.EditTextPreference
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
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() {
|
abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
override fun onDisplayPreferenceDialog(preference: Preference) {
|
override fun onDisplayPreferenceDialog(preference: Preference) {
|
||||||
if (preference is ListPreference) {
|
when (preference) {
|
||||||
val dialogFragment = ListPreferenceMaterialDialogFragmentCompat.newInstance(preference.getKey())
|
is EditTextPreference -> {
|
||||||
dialogFragment.setTargetFragment(this, 0)
|
val dialogFragment = M3EditTextPreference.newInstance(preference.getKey())
|
||||||
dialogFragment.show(parentFragmentManager,
|
dialogFragment.setTargetFragment(this, 0)
|
||||||
ListPreferenceMaterialDialogFragmentCompat.PREFERENCE_DIALOG_FRAGMENT_TAG
|
dialogFragment.show(
|
||||||
)
|
parentFragmentManager,
|
||||||
} else {
|
M3EditTextPreference.PREFERENCE_DIALOG_FRAGMENT_TAG
|
||||||
super.onDisplayPreferenceDialog(preference)
|
)
|
||||||
|
}
|
||||||
|
is ListPreference -> {
|
||||||
|
val dialogFragment = M3ListPreference.newInstance(preference.getKey())
|
||||||
|
dialogFragment.setTargetFragment(this, 0)
|
||||||
|
dialogFragment.show(
|
||||||
|
parentFragmentManager,
|
||||||
|
M3ListPreference.PREFERENCE_DIALOG_FRAGMENT_TAG
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else -> super.onDisplayPreferenceDialog(preference)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user