Merge "The calendar view widget was jumping incorrectly to the next week while selectiong the last day of the week." into honeycomb

This commit is contained in:
Svetoslav Ganov
2011-01-26 22:59:23 -08:00
committed by Android (Google) Code Review
3 changed files with 26 additions and 11 deletions

View File

@@ -897,10 +897,13 @@ public class CalendarView extends FrameLayout {
throw new IllegalArgumentException("fromDate: " + mMinDate.getTime() throw new IllegalArgumentException("fromDate: " + mMinDate.getTime()
+ " does not precede toDate: " + date.getTime()); + " does not precede toDate: " + date.getTime());
} }
int fromDateDayOfWeek = mMinDate.get(Calendar.DAY_OF_WEEK); long endTimeMillis = date.getTimeInMillis()
long diff = (fromDateDayOfWeek - mFirstDayOfWeek) * MILLIS_IN_DAY; + date.getTimeZone().getOffset(date.getTimeInMillis());
long refDay = mMinDate.getTimeInMillis() - diff; long startTimeMillis = mMinDate.getTimeInMillis()
return (int) ((date.getTimeInMillis() - refDay) / MILLIS_IN_WEEK); + mMinDate.getTimeZone().getOffset(mMinDate.getTimeInMillis());
long dayOffsetMillis = (mMinDate.get(Calendar.DAY_OF_WEEK) - mFirstDayOfWeek)
* MILLIS_IN_DAY;
return (int) ((endTimeMillis - startTimeMillis + dayOffsetMillis) / MILLIS_IN_WEEK);
} }
/** /**
@@ -1180,6 +1183,7 @@ public class CalendarView extends FrameLayout {
mNumCells = mShowWeekNumber ? mDaysPerWeek + 1 : mDaysPerWeek; mNumCells = mShowWeekNumber ? mDaysPerWeek + 1 : mDaysPerWeek;
mWeek = weekNumber; mWeek = weekNumber;
mTempDate.setTimeInMillis(mMinDate.getTimeInMillis()); mTempDate.setTimeInMillis(mMinDate.getTimeInMillis());
mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek); mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek);
mTempDate.setFirstDayOfWeek(mFirstDayOfWeek); mTempDate.setFirstDayOfWeek(mFirstDayOfWeek);

View File

@@ -184,6 +184,8 @@ public class DatePicker extends FrameLayout {
// now set the date to the adjusted one // now set the date to the adjusted one
setDate(mTempDate.get(Calendar.YEAR), mTempDate.get(Calendar.MONTH), setDate(mTempDate.get(Calendar.YEAR), mTempDate.get(Calendar.MONTH),
mTempDate.get(Calendar.DAY_OF_MONTH)); mTempDate.get(Calendar.DAY_OF_MONTH));
updateSpinners();
updateCalendarView();
notifyDateChanged(); notifyDateChanged();
} }
}; };
@@ -195,6 +197,7 @@ public class DatePicker extends FrameLayout {
mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
public void onSelectedDayChange(CalendarView view, int year, int month, int monthDay) { public void onSelectedDayChange(CalendarView view, int year, int month, int monthDay) {
setDate(year, month, monthDay); setDate(year, month, monthDay);
updateSpinners();
notifyDateChanged(); notifyDateChanged();
} }
}); });
@@ -469,6 +472,8 @@ public class DatePicker extends FrameLayout {
return; return;
} }
setDate(year, month, dayOfMonth); setDate(year, month, dayOfMonth);
updateSpinners();
updateCalendarView();
notifyDateChanged(); notifyDateChanged();
} }
@@ -489,6 +494,8 @@ public class DatePicker extends FrameLayout {
SavedState ss = (SavedState) state; SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState()); super.onRestoreInstanceState(ss.getSuperState());
setDate(ss.mYear, ss.mMonth, ss.mDay); setDate(ss.mYear, ss.mMonth, ss.mDay);
updateSpinners();
updateCalendarView();
} }
/** /**
@@ -504,6 +511,8 @@ public class DatePicker extends FrameLayout {
public void init(int year, int monthOfYear, int dayOfMonth, public void init(int year, int monthOfYear, int dayOfMonth,
OnDateChangedListener onDateChangedListener) { OnDateChangedListener onDateChangedListener) {
setDate(year, monthOfYear, dayOfMonth); setDate(year, monthOfYear, dayOfMonth);
updateSpinners();
updateCalendarView();
mOnDateChangedListener = onDateChangedListener; mOnDateChangedListener = onDateChangedListener;
} }
@@ -553,8 +562,6 @@ public class DatePicker extends FrameLayout {
} else if (mCurrentDate.after(mMaxDate)) { } else if (mCurrentDate.after(mMaxDate)) {
mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis()); mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis());
} }
updateSpinners();
updateCalendarView();
} }
private void updateSpinners() { private void updateSpinners() {

View File

@@ -623,7 +623,11 @@ public class NumberPicker extends LinearLayout {
hideInputControls(); hideInputControls();
return true; return true;
} }
if (isEventInInputText(event)) { if (isEventInViewHitRect(event, mInputText)
|| (!mIncrementButton.isShown()
&& isEventInViewHitRect(event, mIncrementButton))
|| (!mDecrementButton.isShown()
&& isEventInViewHitRect(event, mDecrementButton))) {
mAdjustScrollerOnUpEvent = false; mAdjustScrollerOnUpEvent = false;
setDrawSelectorWheel(true); setDrawSelectorWheel(true);
hideInputControls(); hideInputControls();
@@ -708,7 +712,7 @@ public class NumberPicker extends LinearLayout {
public boolean dispatchTouchEvent(MotionEvent event) { public boolean dispatchTouchEvent(MotionEvent event) {
int action = event.getActionMasked(); int action = event.getActionMasked();
if ((action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) if ((action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP)
&& !isEventInInputText(event)) { && !isEventInViewHitRect(event, mInputText)) {
removeAllCallbacks(); removeAllCallbacks();
} }
return super.dispatchTouchEvent(event); return super.dispatchTouchEvent(event);
@@ -1177,10 +1181,10 @@ public class NumberPicker extends LinearLayout {
} }
/** /**
* @return If the <code>event</code> is in the input text. * @return If the <code>event</code> is in the <code>view</code>.
*/ */
private boolean isEventInInputText(MotionEvent event) { private boolean isEventInViewHitRect(MotionEvent event, View view) {
mInputText.getHitRect(mTempRect); view.getHitRect(mTempRect);
return mTempRect.contains((int) event.getX(), (int) event.getY()); return mTempRect.contains((int) event.getX(), (int) event.getY());
} }