summaryrefslogtreecommitdiffstats
path: root/core/java/android/widget/NumberPicker.java
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2010-12-08 16:11:30 -0800
committerSvetoslav Ganov <svetoslavganov@google.com>2010-12-08 16:11:30 -0800
commita911d4a2b1be7e9ea909a579167826e4a5bac1a3 (patch)
tree4da929d1f70cb5d4547b6182cd884ece36795e5f /core/java/android/widget/NumberPicker.java
parent994e2cd01c1c7550dbe1973320879d166b23d169 (diff)
downloadframeworks_base-a911d4a2b1be7e9ea909a579167826e4a5bac1a3.zip
frameworks_base-a911d4a2b1be7e9ea909a579167826e4a5bac1a3.tar.gz
frameworks_base-a911d4a2b1be7e9ea909a579167826e4a5bac1a3.tar.bz2
bug_3259956 and bug_2166704
Change-Id: I71b4cc3c1111e7a4e78fb276d54a291c22fb2752
Diffstat (limited to 'core/java/android/widget/NumberPicker.java')
-rw-r--r--core/java/android/widget/NumberPicker.java28
1 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 805bc08..4766c53 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -843,10 +843,14 @@ public class NumberPicker extends LinearLayout {
* @see #setWrapSelectorWheel(boolean)
*/
public void setRange(int start, int end, String[] displayedValues, boolean wrapSelectorWheel) {
+ if (start == mStart && end == mEnd) {
+ return;
+ }
+
if (start < 0 || end < 0) {
throw new IllegalArgumentException("start and end must be > 0");
}
-
+
mDisplayedValues = displayedValues;
mStart = start;
mEnd = end;
@@ -863,8 +867,7 @@ public class NumberPicker extends LinearLayout {
mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
- // make sure cached string representations are dropped
- mSelectorIndexToStringCache.clear();
+ resetSelectorIndices();
}
/**
@@ -876,6 +879,9 @@ public class NumberPicker extends LinearLayout {
* of the number picker.
*/
public void setCurrent(int current) {
+ if (mCurrent == current) {
+ return;
+ }
if (current < mStart || current > mEnd) {
throw new IllegalArgumentException("current should be >= start and <= end");
}
@@ -1011,6 +1017,18 @@ public class NumberPicker extends LinearLayout {
}
/**
+ * Resets the selector indices and clear the cached
+ * string representation of these indices.
+ */
+ private void resetSelectorIndices() {
+ mSelectorIndexToStringCache.clear();
+ int[] selectorIdices = getSelectorIndices();
+ for (int i = 0; i < selectorIdices.length; i++) {
+ selectorIdices[i] = Integer.MIN_VALUE;
+ }
+ }
+
+ /**
* Sets the current value of this NumberPicker, and sets mPrevious to the
* previous value. If current is greater than mEnd less than mStart, the
* value of mCurrent is wrapped around. Subclasses can override this to
@@ -1177,9 +1195,9 @@ public class NumberPicker extends LinearLayout {
*/
private int getWrappedSelectorIndex(int selectorIndex) {
if (selectorIndex > mEnd) {
- return (Math.abs(selectorIndex) - mEnd);
+ return mStart + selectorIndex - mEnd - 1;
} else if (selectorIndex < mStart) {
- return (mEnd - Math.abs(selectorIndex));
+ return mEnd + selectorIndex - mStart + 1;
}
return selectorIndex;
}