diff options
author | Doris Liu <tianliu@google.com> | 2015-06-20 00:23:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-20 00:23:30 +0000 |
commit | 4a79992591bd9971764b504bfe10cad656edf632 (patch) | |
tree | 42c4addc5a92d69b471082938c283c5df68bb68b | |
parent | bcca4ac4fb4fa66f2e4196437998c08e4dbed1d3 (diff) | |
parent | bcfdead943ace3bc3f870979849db1885466ebf3 (diff) | |
download | frameworks_base-4a79992591bd9971764b504bfe10cad656edf632.zip frameworks_base-4a79992591bd9971764b504bfe10cad656edf632.tar.gz frameworks_base-4a79992591bd9971764b504bfe10cad656edf632.tar.bz2 |
Merge "Fix NumberPicker.setWrapSelectorWheel(boolean) not respecting user choice" into mnc-dev
-rw-r--r-- | core/java/android/widget/NumberPicker.java | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index e7d9226..b5fae4e 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -149,6 +149,11 @@ public class NumberPicker extends LinearLayout { private static final int SIZE_UNSPECIFIED = -1; /** + * User choice on whether the selector wheel should be wrapped. + */ + private boolean mWrapSelectorWheelPreferred = true; + + /** * Use a custom NumberPicker formatting callback to use two-digit minutes * strings like "01". Keeping a static formatter etc. is the most efficient * way to do this; it avoids creating temporary objects on every call to @@ -1353,10 +1358,21 @@ public class NumberPicker extends LinearLayout { * @param wrapSelectorWheel Whether to wrap. */ public void setWrapSelectorWheel(boolean wrapSelectorWheel) { + mWrapSelectorWheelPreferred = wrapSelectorWheel; + updateWrapSelectorWheel(); + + } + + /** + * Whether or not the selector wheel should be wrapped is determined by user choice and whether + * the choice is allowed. The former comes from {@link #setWrapSelectorWheel(boolean)}, the + * latter is calculated based on min & max value set vs selector's visual length. Therefore, + * this method should be called any time any of the 3 values (i.e. user choice, min and max + * value) gets updated. + */ + private void updateWrapSelectorWheel() { final boolean wrappingAllowed = (mMaxValue - mMinValue) >= mSelectorIndices.length; - if ((!wrapSelectorWheel || wrappingAllowed) && wrapSelectorWheel != mWrapSelectorWheel) { - mWrapSelectorWheel = wrapSelectorWheel; - } + mWrapSelectorWheel = wrappingAllowed && mWrapSelectorWheelPreferred; } /** @@ -1412,8 +1428,7 @@ public class NumberPicker extends LinearLayout { if (mMinValue > mValue) { mValue = mMinValue; } - boolean wrapSelectorWheel = mMaxValue - mMinValue > mSelectorIndices.length; - setWrapSelectorWheel(wrapSelectorWheel); + updateWrapSelectorWheel(); initializeSelectorWheelIndices(); updateInputTextView(); tryComputeMaxWidth(); @@ -1450,8 +1465,7 @@ public class NumberPicker extends LinearLayout { if (mMaxValue < mValue) { mValue = mMaxValue; } - boolean wrapSelectorWheel = mMaxValue - mMinValue > mSelectorIndices.length; - setWrapSelectorWheel(wrapSelectorWheel); + updateWrapSelectorWheel(); initializeSelectorWheelIndices(); updateInputTextView(); tryComputeMaxWidth(); |