summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuchi Amalapurapu <asuchitra@google.com>2009-07-13 16:24:58 -0700
committerSuchi Amalapurapu <asuchitra@google.com>2009-07-14 15:37:20 -0700
commit2bf761c20253222a763bce9a63d14c48ab08a556 (patch)
tree718d34d22b8a0fa618a2349ddd5a95639ed5be8d
parentea5c044412f6853d686e93b8bef07f4729b6ad26 (diff)
downloadframeworks_base-2bf761c20253222a763bce9a63d14c48ab08a556.zip
frameworks_base-2bf761c20253222a763bce9a63d14c48ab08a556.tar.gz
frameworks_base-2bf761c20253222a763bce9a63d14c48ab08a556.tar.bz2
Fix couple of issues in DatePicker
The NumberPicker's listener needs to be invoked only if the current value changes when validating input. This removes the some unwanted duplicate calls to onChanged. Adjust day for month and leap years. note that updateDaySpinner directly sets the value on day picker and doesn't invoke the listener twice
-rw-r--r--core/java/android/widget/DatePicker.java15
-rw-r--r--core/java/com/android/internal/widget/NumberPicker.java8
2 files changed, 20 insertions, 3 deletions
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index 54f2707..3b9f1de 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -110,6 +110,8 @@ public class DatePicker extends FrameLayout {
* subtract by one to ensure our internal state is always 0-11
*/
mMonth = newVal - 1;
+ // Adjust max day of the month
+ adjustMaxDay();
if (mOnDateChangedListener != null) {
mOnDateChangedListener.onDateChanged(DatePicker.this, mYear, mMonth, mDay);
}
@@ -121,9 +123,12 @@ public class DatePicker extends FrameLayout {
mYearPicker.setOnChangeListener(new OnChangedListener() {
public void onChanged(NumberPicker picker, int oldVal, int newVal) {
mYear = newVal;
+ // Adjust max day for leap years if needed
+ adjustMaxDay();
if (mOnDateChangedListener != null) {
mOnDateChangedListener.onDateChanged(DatePicker.this, mYear, mMonth, mDay);
}
+ updateDaySpinner();
}
});
@@ -318,4 +323,14 @@ public class DatePicker extends FrameLayout {
public int getDayOfMonth() {
return mDay;
}
+
+ private void adjustMaxDay(){
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.YEAR, mYear);
+ cal.set(Calendar.MONTH, mMonth);
+ int max = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
+ if (mDay > max) {
+ mDay = max;
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/NumberPicker.java b/core/java/com/android/internal/widget/NumberPicker.java
index 2f08c8d..0424ced 100644
--- a/core/java/com/android/internal/widget/NumberPicker.java
+++ b/core/java/com/android/internal/widget/NumberPicker.java
@@ -243,9 +243,11 @@ public class NumberPicker extends LinearLayout implements OnClickListener,
private void validateCurrentView(CharSequence str) {
int val = getSelectedPos(str.toString());
if ((val >= mStart) && (val <= mEnd)) {
- mPrevious = mCurrent;
- mCurrent = val;
- notifyChange();
+ if (mCurrent != val) {
+ mPrevious = mCurrent;
+ mCurrent = val;
+ notifyChange();
+ }
}
updateView();
}