diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index cb3046aa..1ce9d120 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -1,8 +1,8 @@ - - + + diff --git a/src/main/res/xml/pref_all.xml b/src/main/res/xml/pref_all.xml index fb1246ba..c6689417 100644 --- a/src/main/res/xml/pref_all.xml +++ b/src/main/res/xml/pref_all.xml @@ -37,8 +37,8 @@ { // TODO: not working with scrolling @@ -39,8 +41,8 @@ final class DropDownPreference(private val mContext: Context, attrs: AttributeSe true }) val a: TypedArray = mContext.obtainStyledAttributes(attrs, R.styleable.DropDownPreference) - setEntries(a.getTextArray(R.styleable.DropDownPreference_entries)) - mEntryValues = a.getTextArray(R.styleable.DropDownPreference_entryValues) + setEntries(a.getTextArray(R.styleable.DropDownPreference_android_entries)) + setEntryValues(a.getTextArray(R.styleable.DropDownPreference_android_entryValues)) a.recycle protected override def getSummaryValue = getEntry @@ -62,7 +64,7 @@ final class DropDownPreference(private val mContext: Context, attrs: AttributeSe * @see #setEntries(CharSequence[]) * @param entriesResId The entries array as a resource. */ - def setEntries(entriesResId: Int): Unit = setEntries(getContext.getResources.getTextArray(entriesResId)) + def setEntries(@ArrayRes entriesResId: Int): Unit = setEntries(getContext.getResources.getTextArray(entriesResId)) /** * The list of entries to be shown in the list in subsequent dialogs. * @@ -82,7 +84,7 @@ final class DropDownPreference(private val mContext: Context, attrs: AttributeSe * @see #setEntryValues(CharSequence[]) * @param entryValuesResId The entry values array as a resource. */ - def setEntryValues(entryValuesResId: Int): Unit = + def setEntryValues(@ArrayRes entryValuesResId: Int): Unit = setEntryValues(getContext.getResources.getTextArray(entryValuesResId)) /** * Returns the array of values to be saved for the preference. @@ -91,40 +93,26 @@ final class DropDownPreference(private val mContext: Context, attrs: AttributeSe */ def getEntryValues: Array[CharSequence] = mEntryValues + private def getValue(index: Int) = (if (mEntryValues == null) index else mEntryValues(index)).toString /** * Sets the value of the key. This should be one of the entries in [[getEntryValues]]. * * @param value The value to set for the key. */ - def setValue(value: String) { - val i = findIndexOfValue(value) - if (i > -1) setValueIndex(i) - } + def setValue(value: String): Unit = setValue(findIndexOfValue(value), value) /** * Sets the value to the given index from the entry values. * - * Remember to callChangeListener() if this extends Preference directly - * - * https://github.com/android/platform_frameworks_base/blob/ - * 4535e11fb7010f2b104d3f8b3954407b9f330e0f/core/java/ - * android/preference/ListPreference.java#L282 - * * @param index The index of the value to set. */ - def setValueIndex(index: Int) { - val changed = mSelectedIndex != index - if (changed || !mValueSet) { - mSelectedIndex = index - mValueSet = true - if (mEntryValues != null) { - val value = mEntryValues(index).toString - if (changed) callChangeListener(value) - persistString(value) - } - if (changed) notifyChanged - } + def setValueIndex(index: Int) = setValue(index, getValue(index)) + + private def setValue(index: Int, value: String) { + persistString(value) + mSelectedIndex = index mSpinner.setSelection(index) + notifyChanged } /** diff --git a/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala b/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala index ef93c9cc..afe29b74 100644 --- a/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala +++ b/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala @@ -28,7 +28,7 @@ final class NumberPickerPreference(context: Context, attrs: AttributeSet = null) def getMin = if (picker == null) 0 else picker.getMinValue def getMax = picker.getMaxValue def setValue(i: Int) { - if (i == getValue || !callChangeListener(i)) return + if (i == getValue) return picker.setValue(i) value = picker.getValue persistInt(value) @@ -49,7 +49,10 @@ final class NumberPickerPreference(context: Context, attrs: AttributeSet = null) override protected def onDialogClosed(positiveResult: Boolean) { picker.clearFocus // commit changes super.onDialogClosed(positiveResult) // forward compatibility - if (positiveResult) setValue(picker.getValue) else picker.setValue(value) + if (positiveResult) { + val value = picker.getValue + if (callChangeListener(value)) setValue(value) + } else picker.setValue(value) } override protected def onGetDefaultValue(a: TypedArray, index: Int) = a.getInt(index, getMin).asInstanceOf[AnyRef] override protected def onSetInitialValue(restorePersistedValue: Boolean, defaultValue: Any) {