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:
committed by
Android (Google) Code Review
commit
c291a7bf7a
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user