From 546a5d010ddce24a99aa2e2a1bc1b69823c953b1 Mon Sep 17 00:00:00 2001 From: Mygod Date: Thu, 3 Nov 2016 21:20:04 +0800 Subject: [PATCH] Refine design for preference package --- .../scala/be/mygod/preference/DialogPreferencePlus.scala | 8 ++++++++ .../scala/be/mygod/preference/EditTextPreference.scala | 4 +++- .../be/mygod/preference/NumberPickerPreference.scala | 4 +++- .../scala/be/mygod/preference/PreferenceFragment.scala | 7 ++++++- .../com/github/shadowsocks/ShadowsocksSettings.scala | 8 ++------ 5 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 src/main/scala/be/mygod/preference/DialogPreferencePlus.scala diff --git a/src/main/scala/be/mygod/preference/DialogPreferencePlus.scala b/src/main/scala/be/mygod/preference/DialogPreferencePlus.scala new file mode 100644 index 00000000..111cbbda --- /dev/null +++ b/src/main/scala/be/mygod/preference/DialogPreferencePlus.scala @@ -0,0 +1,8 @@ +package be.mygod.preference + +import android.app.DialogFragment +import android.support.v7.preference.DialogPreference + +trait DialogPreferencePlus extends DialogPreference { + def createDialog(): DialogFragment +} diff --git a/src/main/scala/be/mygod/preference/EditTextPreference.scala b/src/main/scala/be/mygod/preference/EditTextPreference.scala index 1b71f448..3beedd0f 100644 --- a/src/main/scala/be/mygod/preference/EditTextPreference.scala +++ b/src/main/scala/be/mygod/preference/EditTextPreference.scala @@ -11,10 +11,12 @@ import android.util.AttributeSet * Based on: https://github.com/Gericop/Android-Support-Preference-V7-Fix/tree/master/app/src/main/java/android/support/v7/preference */ class EditTextPreference(context: Context, attrs: AttributeSet = null) extends Parent(context, attrs) - with SummaryPreference { + with DialogPreferencePlus with SummaryPreference { val editText = new AppCompatEditText(context, attrs) editText.setId(android.R.id.edit) + override def createDialog() = new EditTextPreferenceDialogFragment() + override protected def getSummaryValue = { var text = getText if (text == null) text = "" diff --git a/src/main/scala/be/mygod/preference/NumberPickerPreference.scala b/src/main/scala/be/mygod/preference/NumberPickerPreference.scala index eeb648d6..4774b01f 100644 --- a/src/main/scala/be/mygod/preference/NumberPickerPreference.scala +++ b/src/main/scala/be/mygod/preference/NumberPickerPreference.scala @@ -9,7 +9,7 @@ import android.widget.NumberPicker import com.github.shadowsocks.R class NumberPickerPreference(private val context: Context, attrs: AttributeSet = null) - extends DialogPreference(context, attrs) with SummaryPreference { + extends DialogPreference(context, attrs) with DialogPreferencePlus with SummaryPreference { private[preference] val picker = new NumberPicker(new ContextThemeWrapper(context, R.style.NumberPickerStyle)) private var value: Int = _ @@ -20,6 +20,8 @@ class NumberPickerPreference(private val context: Context, attrs: AttributeSet = a.recycle } + override def createDialog() = new NumberPickerPreferenceDialogFragment() + def getValue = value def getMin = if (picker == null) 0 else picker.getMinValue def getMax = picker.getMaxValue diff --git a/src/main/scala/be/mygod/preference/PreferenceFragment.scala b/src/main/scala/be/mygod/preference/PreferenceFragment.scala index 81bce8aa..65033751 100644 --- a/src/main/scala/be/mygod/preference/PreferenceFragment.scala +++ b/src/main/scala/be/mygod/preference/PreferenceFragment.scala @@ -3,7 +3,7 @@ package be.mygod.preference import android.app.DialogFragment import android.os.Bundle import android.support.v14.preference.{PreferenceFragment => Base} -import android.support.v7.preference.PreferenceScreen +import android.support.v7.preference.{Preference, PreferenceScreen} import android.view.{LayoutInflater, ViewGroup} abstract class PreferenceFragment extends Base { @@ -20,6 +20,11 @@ abstract class PreferenceFragment extends Base { .commitAllowingStateLoss() } + override def onDisplayPreferenceDialog(preference: Preference) = preference match { + case dpp: DialogPreferencePlus => displayPreferenceDialog(preference.getKey, dpp.createDialog()) + case _ => super.onDisplayPreferenceDialog(preference) + } + override protected def onCreateAdapter(screen: PreferenceScreen) = new PreferenceGroupAdapter(screen) override def onResume { diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index 1d44fd9c..bba5e3d1 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -203,12 +203,8 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan }) } - override def onDisplayPreferenceDialog(preference: Preference) = preference match { - case _: EditTextPreference => displayPreferenceDialog(preference.getKey, - if (preference.getKey == Key.kcpcli) new KcpCliPreferenceDialogFragment() - else new EditTextPreferenceDialogFragment()) - case _: NumberPickerPreference => - displayPreferenceDialog(preference.getKey, new NumberPickerPreferenceDialogFragment()) + override def onDisplayPreferenceDialog(preference: Preference) = preference.getKey match { + case Key.kcpcli => displayPreferenceDialog (Key.kcpcli, new KcpCliPreferenceDialogFragment () ) case _ => super.onDisplayPreferenceDialog(preference) }