Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d52809b authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Prevent excessive accessibility announcements in TimePicker" into lmp-mr1-dev

parents 46b4920a 26c563b0
Loading
Loading
Loading
Loading
+30 −17
Original line number Original line Diff line number Diff line
@@ -105,6 +105,10 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
    private String mMinutePickerDescription;
    private String mMinutePickerDescription;
    private String mSelectMinutes;
    private String mSelectMinutes;


    // Most recent time announcement values for accessibility.
    private CharSequence mLastAnnouncedText;
    private boolean mLastAnnouncedIsHour;

    private Calendar mTempCalendar;
    private Calendar mTempCalendar;


    public TimePickerSpinnerDelegate(TimePicker delegator, Context context, AttributeSet attrs,
    public TimePickerSpinnerDelegate(TimePicker delegator, Context context, AttributeSet attrs,
@@ -224,11 +228,11 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
        // Enable or disable the AM/PM view.
        // Enable or disable the AM/PM view.
        updateHeaderAmPm();
        updateHeaderAmPm();
        // Update Hour and Minutes
        // Update Hour and Minutes
        updateHeaderHour(mInitialHourOfDay, true);
        updateHeaderHour(mInitialHourOfDay, false);
        // Update time separator
        // Update time separator
        updateHeaderSeparator();
        updateHeaderSeparator();
        // Update Minutes
        // Update Minutes
        updateHeaderMinute(mInitialMinute);
        updateHeaderMinute(mInitialMinute, false);
        // Invalidate everything
        // Invalidate everything
        mDelegator.invalidate();
        mDelegator.invalidate();
    }
    }
@@ -293,7 +297,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
            return;
            return;
        }
        }
        mInitialHourOfDay = currentHour;
        mInitialHourOfDay = currentHour;
        updateHeaderHour(currentHour, true /* accessibility announce */);
        updateHeaderHour(currentHour, true);
        updateHeaderAmPm();
        updateHeaderAmPm();
        mRadialTimePickerView.setCurrentHour(currentHour);
        mRadialTimePickerView.setCurrentHour(currentHour);
        mRadialTimePickerView.setAmOrPm(mInitialHourOfDay < 12 ? AM : PM);
        mRadialTimePickerView.setAmOrPm(mInitialHourOfDay < 12 ? AM : PM);
@@ -329,7 +333,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
            return;
            return;
        }
        }
        mInitialMinute = currentMinute;
        mInitialMinute = currentMinute;
        updateHeaderMinute(currentMinute);
        updateHeaderMinute(currentMinute, true);
        mRadialTimePickerView.setCurrentMinute(currentMinute);
        mRadialTimePickerView.setCurrentMinute(currentMinute);
        mDelegator.invalidate();
        mDelegator.invalidate();
        onTimeChanged();
        onTimeChanged();
@@ -357,7 +361,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
        generateLegalTimesTree();
        generateLegalTimesTree();
        int hour = mRadialTimePickerView.getCurrentHour();
        int hour = mRadialTimePickerView.getCurrentHour();
        mInitialHourOfDay = hour;
        mInitialHourOfDay = hour;
        updateHeaderHour(hour, false /* no accessibility announce */);
        updateHeaderHour(hour, false);
        updateHeaderAmPm();
        updateHeaderAmPm();
        updateRadialPicker(mRadialTimePickerView.getCurrentItemShowing());
        updateRadialPicker(mRadialTimePickerView.getCurrentItemShowing());
        mDelegator.invalidate();
        mDelegator.invalidate();
@@ -604,19 +608,17 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
    @Override
    @Override
    public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) {
    public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) {
        if (pickerIndex == HOUR_INDEX) {
        if (pickerIndex == HOUR_INDEX) {
            updateHeaderHour(newValue, false);
            String announcement = String.format("%d", newValue);
            if (mAllowAutoAdvance && autoAdvance) {
            if (mAllowAutoAdvance && autoAdvance) {
                updateHeaderHour(newValue, false);
                setCurrentItemShowing(MINUTE_INDEX, true, false);
                setCurrentItemShowing(MINUTE_INDEX, true, false);
                announcement += ". " + mSelectMinutes;
                mRadialTimePickerView.announceForAccessibility(newValue + ". " + mSelectMinutes);
            } else {
            } else {
                updateHeaderHour(newValue, true);
                mRadialTimePickerView.setContentDescription(
                mRadialTimePickerView.setContentDescription(
                        mHourPickerDescription + ": " + newValue);
                        mHourPickerDescription + ": " + newValue);
            }
            }

            mRadialTimePickerView.announceForAccessibility(announcement);
        } else if (pickerIndex == MINUTE_INDEX){
        } else if (pickerIndex == MINUTE_INDEX){
            updateHeaderMinute(newValue);
            updateHeaderMinute(newValue, true);
            mRadialTimePickerView.setContentDescription(mMinutePickerDescription + ": " + newValue);
            mRadialTimePickerView.setContentDescription(mMinutePickerDescription + ": " + newValue);
        } else if (pickerIndex == AMPM_INDEX) {
        } else if (pickerIndex == AMPM_INDEX) {
            updateAmPmLabelStates(newValue);
            updateAmPmLabelStates(newValue);
@@ -664,7 +666,16 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
        CharSequence text = String.format(format, value);
        CharSequence text = String.format(format, value);
        mHourView.setText(text);
        mHourView.setText(text);
        if (announce) {
        if (announce) {
            mRadialTimePickerView.announceForAccessibility(text);
            tryAnnounceForAccessibility(text, true);
        }
    }

    private void tryAnnounceForAccessibility(CharSequence text, boolean isHour) {
        if (mLastAnnouncedIsHour != isHour || !text.equals(mLastAnnouncedText)) {
            // TODO: Find a better solution, potentially live regions?
            mDelegator.announceForAccessibility(text);
            mLastAnnouncedText = text;
            mLastAnnouncedIsHour = isHour;
        }
        }
    }
    }


@@ -715,13 +726,15 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
        return -1;
        return -1;
    }
    }


    private void updateHeaderMinute(int value) {
    private void updateHeaderMinute(int value, boolean announceForAccessibility) {
        if (value == 60) {
        if (value == 60) {
            value = 0;
            value = 0;
        }
        }
        CharSequence text = String.format(mCurrentLocale, "%02d", value);
        final CharSequence text = String.format(mCurrentLocale, "%02d", value);
        mRadialTimePickerView.announceForAccessibility(text);
        mMinuteView.setText(text);
        mMinuteView.setText(text);
        if (announceForAccessibility) {
            tryAnnounceForAccessibility(text, false);
        }
    }
    }


    /**
    /**
@@ -921,8 +934,8 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im
        if (!allowEmptyDisplay && mTypedTimes.isEmpty()) {
        if (!allowEmptyDisplay && mTypedTimes.isEmpty()) {
            int hour = mRadialTimePickerView.getCurrentHour();
            int hour = mRadialTimePickerView.getCurrentHour();
            int minute = mRadialTimePickerView.getCurrentMinute();
            int minute = mRadialTimePickerView.getCurrentMinute();
            updateHeaderHour(hour, true);
            updateHeaderHour(hour, false);
            updateHeaderMinute(minute);
            updateHeaderMinute(minute, false);
            if (!mIs24HourView) {
            if (!mIs24HourView) {
                updateAmPmLabelStates(hour < 12 ? AM : PM);
                updateAmPmLabelStates(hour < 12 ? AM : PM);
            }
            }