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()
+ " does not precede toDate: " + date.getTime());
}
int fromDateDayOfWeek = mMinDate.get(Calendar.DAY_OF_WEEK);
long diff = (fromDateDayOfWeek - mFirstDayOfWeek) * MILLIS_IN_DAY;
long refDay = mMinDate.getTimeInMillis() - diff;
return (int) ((date.getTimeInMillis() - refDay) / MILLIS_IN_WEEK);
long endTimeMillis = date.getTimeInMillis()
+ date.getTimeZone().getOffset(date.getTimeInMillis());
long startTimeMillis = mMinDate.getTimeInMillis()
+ 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;
mWeek = weekNumber;
mTempDate.setTimeInMillis(mMinDate.getTimeInMillis());
mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek);
mTempDate.setFirstDayOfWeek(mFirstDayOfWeek);

View File

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

View File

@@ -623,7 +623,11 @@ public class NumberPicker extends LinearLayout {
hideInputControls();
return true;
}
if (isEventInInputText(event)) {
if (isEventInViewHitRect(event, mInputText)
|| (!mIncrementButton.isShown()
&& isEventInViewHitRect(event, mIncrementButton))
|| (!mDecrementButton.isShown()
&& isEventInViewHitRect(event, mDecrementButton))) {
mAdjustScrollerOnUpEvent = false;
setDrawSelectorWheel(true);
hideInputControls();
@@ -708,7 +712,7 @@ public class NumberPicker extends LinearLayout {
public boolean dispatchTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
if ((action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP)
&& !isEventInInputText(event)) {
&& !isEventInViewHitRect(event, mInputText)) {
removeAllCallbacks();
}
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) {
mInputText.getHitRect(mTempRect);
private boolean isEventInViewHitRect(MotionEvent event, View view) {
view.getHitRect(mTempRect);
return mTempRect.contains((int) event.getX(), (int) event.getY());
}