Merge "Maintain internal consistency for TimePickerClockDelegate hour" into nyc-dev
am: 7544ac22e4
* commit '7544ac22e474547a3cbeaff0dcaf163bbbd4fca7':
Maintain internal consistency for TimePickerClockDelegate hour
Change-Id: I1b46f64e197303507c5b3cb3c402438e51e993c3
This commit is contained in:
@@ -38,6 +38,7 @@ import android.view.ViewGroup;
|
|||||||
import android.view.accessibility.AccessibilityEvent;
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
import android.view.accessibility.AccessibilityNodeInfo;
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
|
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
|
||||||
|
import android.widget.RadialTimePickerView.OnValueSelectedListener;
|
||||||
|
|
||||||
import com.android.internal.R;
|
import com.android.internal.R;
|
||||||
import com.android.internal.widget.NumericTextView;
|
import com.android.internal.widget.NumericTextView;
|
||||||
@@ -48,8 +49,7 @@ import java.util.Calendar;
|
|||||||
/**
|
/**
|
||||||
* A delegate implementing the radial clock-based TimePicker.
|
* A delegate implementing the radial clock-based TimePicker.
|
||||||
*/
|
*/
|
||||||
class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate implements
|
class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate {
|
||||||
RadialTimePickerView.OnValueSelectedListener {
|
|
||||||
/**
|
/**
|
||||||
* Delay in milliseconds before valid but potentially incomplete, for
|
* Delay in milliseconds before valid but potentially incomplete, for
|
||||||
* example "1" but not "12", keyboard edits are propagated from the
|
* example "1" but not "12", keyboard edits are propagated from the
|
||||||
@@ -88,8 +88,8 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
|
|
||||||
private boolean mIsEnabled = true;
|
private boolean mIsEnabled = true;
|
||||||
private boolean mAllowAutoAdvance;
|
private boolean mAllowAutoAdvance;
|
||||||
private int mInitialHourOfDay;
|
private int mCurrentHour;
|
||||||
private int mInitialMinute;
|
private int mCurrentMinute;
|
||||||
private boolean mIs24Hour;
|
private boolean mIs24Hour;
|
||||||
private boolean mIsAmPmAtStart;
|
private boolean mIsAmPmAtStart;
|
||||||
|
|
||||||
@@ -189,8 +189,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
|
|
||||||
mRadialTimePickerView = (RadialTimePickerView) mainView.findViewById(R.id.radial_picker);
|
mRadialTimePickerView = (RadialTimePickerView) mainView.findViewById(R.id.radial_picker);
|
||||||
mRadialTimePickerView.applyAttributes(attrs, defStyleAttr, defStyleRes);
|
mRadialTimePickerView.applyAttributes(attrs, defStyleAttr, defStyleRes);
|
||||||
|
mRadialTimePickerView.setOnValueSelectedListener(mOnValueSelectedListener);
|
||||||
setupListeners();
|
|
||||||
|
|
||||||
mAllowAutoAdvance = true;
|
mAllowAutoAdvance = true;
|
||||||
|
|
||||||
@@ -324,28 +323,24 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initialize(int hourOfDay, int minute, boolean is24HourView, int index) {
|
private void initialize(int hourOfDay, int minute, boolean is24HourView, int index) {
|
||||||
mInitialHourOfDay = hourOfDay;
|
mCurrentHour = hourOfDay;
|
||||||
mInitialMinute = minute;
|
mCurrentMinute = minute;
|
||||||
mIs24Hour = is24HourView;
|
mIs24Hour = is24HourView;
|
||||||
updateUI(index);
|
updateUI(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupListeners() {
|
|
||||||
mRadialTimePickerView.setOnValueSelectedListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateUI(int index) {
|
private void updateUI(int index) {
|
||||||
updateHeaderAmPm();
|
updateHeaderAmPm();
|
||||||
updateHeaderHour(mInitialHourOfDay, false);
|
updateHeaderHour(mCurrentHour, false);
|
||||||
updateHeaderSeparator();
|
updateHeaderSeparator();
|
||||||
updateHeaderMinute(mInitialMinute, false);
|
updateHeaderMinute(mCurrentMinute, false);
|
||||||
updateRadialPicker(index);
|
updateRadialPicker(index);
|
||||||
|
|
||||||
mDelegator.invalidate();
|
mDelegator.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRadialPicker(int index) {
|
private void updateRadialPicker(int index) {
|
||||||
mRadialTimePickerView.initialize(mInitialHourOfDay, mInitialMinute, mIs24Hour);
|
mRadialTimePickerView.initialize(mCurrentHour, mCurrentMinute, mIs24Hour);
|
||||||
setCurrentItemShowing(index, false, true);
|
setCurrentItemShowing(index, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,7 +353,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
final boolean isAmPmAtStart = dateTimePattern.startsWith("a");
|
final boolean isAmPmAtStart = dateTimePattern.startsWith("a");
|
||||||
setAmPmAtStart(isAmPmAtStart);
|
setAmPmAtStart(isAmPmAtStart);
|
||||||
|
|
||||||
updateAmPmLabelStates(mInitialHourOfDay < 12 ? AM : PM);
|
updateAmPmLabelStates(mCurrentHour < 12 ? AM : PM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,15 +383,25 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setHour(int hour) {
|
public void setHour(int hour) {
|
||||||
if (mInitialHourOfDay != hour) {
|
setHourInternal(hour, false, true);
|
||||||
mInitialHourOfDay = hour;
|
}
|
||||||
updateHeaderHour(hour, true);
|
|
||||||
updateHeaderAmPm();
|
private void setHourInternal(int hour, boolean isFromPicker, boolean announce) {
|
||||||
mRadialTimePickerView.setCurrentHour(hour);
|
if (mCurrentHour == hour) {
|
||||||
mRadialTimePickerView.setAmOrPm(mInitialHourOfDay < 12 ? AM : PM);
|
return;
|
||||||
mDelegator.invalidate();
|
|
||||||
onTimeChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCurrentHour = hour;
|
||||||
|
updateHeaderHour(hour, announce);
|
||||||
|
updateHeaderAmPm();
|
||||||
|
|
||||||
|
if (!isFromPicker) {
|
||||||
|
mRadialTimePickerView.setCurrentHour(hour);
|
||||||
|
mRadialTimePickerView.setAmOrPm(hour < 12 ? AM : PM);
|
||||||
|
}
|
||||||
|
|
||||||
|
mDelegator.invalidate();
|
||||||
|
onTimeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -421,13 +426,23 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setMinute(int minute) {
|
public void setMinute(int minute) {
|
||||||
if (mInitialMinute != minute) {
|
setMinuteInternal(minute, false);
|
||||||
mInitialMinute = minute;
|
}
|
||||||
updateHeaderMinute(minute, true);
|
|
||||||
mRadialTimePickerView.setCurrentMinute(minute);
|
private void setMinuteInternal(int minute, boolean isFromPicker) {
|
||||||
mDelegator.invalidate();
|
if (mCurrentMinute == minute) {
|
||||||
onTimeChanged();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCurrentMinute = minute;
|
||||||
|
updateHeaderMinute(minute, true);
|
||||||
|
|
||||||
|
if (!isFromPicker) {
|
||||||
|
mRadialTimePickerView.setCurrentMinute(minute);
|
||||||
|
}
|
||||||
|
|
||||||
|
mDelegator.invalidate();
|
||||||
|
onTimeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -448,7 +463,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
public void setIs24Hour(boolean is24Hour) {
|
public void setIs24Hour(boolean is24Hour) {
|
||||||
if (mIs24Hour != is24Hour) {
|
if (mIs24Hour != is24Hour) {
|
||||||
mIs24Hour = is24Hour;
|
mIs24Hour = is24Hour;
|
||||||
mInitialHourOfDay = getHour();
|
mCurrentHour = getHour();
|
||||||
|
|
||||||
updateHourFormat();
|
updateHourFormat();
|
||||||
updateUI(mRadialTimePickerView.getCurrentItemShowing());
|
updateUI(mRadialTimePickerView.getCurrentItemShowing());
|
||||||
@@ -562,34 +577,6 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
mPmLabel.setChecked(isPm);
|
mPmLabel.setChecked(isPm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Called by the picker for updating the header display.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) {
|
|
||||||
switch (pickerIndex) {
|
|
||||||
case HOUR_INDEX:
|
|
||||||
if (mAllowAutoAdvance && autoAdvance) {
|
|
||||||
updateHeaderHour(newValue, false);
|
|
||||||
setCurrentItemShowing(MINUTE_INDEX, true, false);
|
|
||||||
mDelegator.announceForAccessibility(newValue + ". " + mSelectMinutes);
|
|
||||||
} else {
|
|
||||||
updateHeaderHour(newValue, true);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MINUTE_INDEX:
|
|
||||||
updateHeaderMinute(newValue, true);
|
|
||||||
break;
|
|
||||||
case AMPM_INDEX:
|
|
||||||
updateAmPmLabelStates(newValue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mOnTimeChangedListener != null) {
|
|
||||||
mOnTimeChangedListener.onTimeChanged(mDelegator, getHour(), getMinute());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts hour-of-day (0-23) time into a localized hour number.
|
* Converts hour-of-day (0-23) time into a localized hour number.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -702,11 +689,43 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl
|
|||||||
private void setAmOrPm(int amOrPm) {
|
private void setAmOrPm(int amOrPm) {
|
||||||
updateAmPmLabelStates(amOrPm);
|
updateAmPmLabelStates(amOrPm);
|
||||||
|
|
||||||
if (mRadialTimePickerView.setAmOrPm(amOrPm) && mOnTimeChangedListener != null) {
|
if (mRadialTimePickerView.setAmOrPm(amOrPm)) {
|
||||||
mOnTimeChangedListener.onTimeChanged(mDelegator, getHour(), getMinute());
|
mCurrentHour = getHour();
|
||||||
|
|
||||||
|
if (mOnTimeChangedListener != null) {
|
||||||
|
mOnTimeChangedListener.onTimeChanged(mDelegator, getHour(), getMinute());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Listener for RadialTimePickerView interaction. */
|
||||||
|
private final OnValueSelectedListener mOnValueSelectedListener = new OnValueSelectedListener() {
|
||||||
|
@Override
|
||||||
|
public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) {
|
||||||
|
switch (pickerIndex) {
|
||||||
|
case HOUR_INDEX:
|
||||||
|
final boolean isTransition = mAllowAutoAdvance && autoAdvance;
|
||||||
|
setHourInternal(newValue, true, !isTransition);
|
||||||
|
if (isTransition) {
|
||||||
|
setCurrentItemShowing(MINUTE_INDEX, true, false);
|
||||||
|
mDelegator.announceForAccessibility(newValue + ". " + mSelectMinutes);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MINUTE_INDEX:
|
||||||
|
setMinuteInternal(newValue, true);
|
||||||
|
break;
|
||||||
|
case AMPM_INDEX:
|
||||||
|
updateAmPmLabelStates(newValue);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mOnTimeChangedListener != null) {
|
||||||
|
mOnTimeChangedListener.onTimeChanged(mDelegator, getHour(), getMinute());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Listener for keyboard interaction. */
|
||||||
private final OnValueChangedListener mDigitEnteredListener = new OnValueChangedListener() {
|
private final OnValueChangedListener mDigitEnteredListener = new OnValueChangedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onValueChanged(NumericTextView view, int value,
|
public void onValueChanged(NumericTextView view, int value,
|
||||||
|
|||||||
Reference in New Issue
Block a user