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:
Alan Viverette
2016-04-29 15:24:45 +00:00
committed by android-build-merger

View File

@@ -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,