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

Commit 8a2a8958 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Accessibility support to NumberPicker, DatePicker, and TimePicker

bug:3400707

Change-Id: I0d4b10e9c744e7221a9a7a74081bcee351abbaf2
parent 64a2c359
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.accessibility.AccessibilityEvent;
import android.widget.NumberPicker.OnValueChangeListener;

import java.text.ParseException;
@@ -353,6 +354,16 @@ public class DatePicker extends FrameLayout {
        return mIsEnabled;
    }

    @Override
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY
                | DateUtils.FORMAT_SHOW_YEAR;
        String selectedDateUtterance = DateUtils.formatDateTime(mContext,
                mCurrentDate.getTimeInMillis(), flags);
        event.getText().add(selectedDateUtterance);
        return true;
    }

    /**
     * Gets whether the {@link CalendarView} is shown.
     *
@@ -641,6 +652,7 @@ public class DatePicker extends FrameLayout {
     * Notifies the listener, if such, for a change in the selected date.
     */
    private void notifyDateChanged() {
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
        if (mOnDateChangedListener != null) {
            mOnDateChangedListener.onDateChanged(this, getYear(), getMonth(), getDayOfMonth());
        }
+25 −3
Original line number Diff line number Diff line
@@ -23,9 +23,11 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.widget.NumberPicker.OnValueChangeListener;

import java.text.DateFormatSymbols;
@@ -88,6 +90,8 @@ public class TimePicker extends FrameLayout {
    // callbacks
    private OnTimeChangedListener mOnTimeChangedListener;

    private Calendar mTempCalendar;

    /**
     * The callback interface used to indicate the time has been adjusted.
     */
@@ -214,12 +218,12 @@ public class TimePicker extends FrameLayout {
        updateAmPmControl();

        // initialize to current time
        Calendar calendar = Calendar.getInstance();
        mTempCalendar = Calendar.getInstance();
        setOnTimeChangedListener(NO_OP_CHANGE_LISTENER);

        // set to current time
        setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
        setCurrentMinute(calendar.get(Calendar.MINUTE));
        setCurrentHour(mTempCalendar.get(Calendar.HOUR_OF_DAY));
        setCurrentMinute(mTempCalendar.get(Calendar.MINUTE));

        if (!isEnabled()) {
            setEnabled(false);
@@ -406,6 +410,22 @@ public class TimePicker extends FrameLayout {
        return mHourSpinner.getBaseline();
    }

    @Override
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        int flags = DateUtils.FORMAT_SHOW_TIME;
        if (mIs24HourView) {
            flags |= DateUtils.FORMAT_24HOUR;
        } else {
            flags |= DateUtils.FORMAT_12HOUR;
        }
        mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour());
        mTempCalendar.set(Calendar.MINUTE, getCurrentMinute());
        String selectedDateUtterance = DateUtils.formatDateTime(mContext,
                mTempCalendar.getTimeInMillis(), flags);
        event.getText().add(selectedDateUtterance);
        return true;
    }

    private void updateHourControl() {
        if (is24HourView()) {
            mHourSpinner.setMinValue(0);
@@ -435,9 +455,11 @@ public class TimePicker extends FrameLayout {
                mAmPmButton.setVisibility(View.VISIBLE);
            }
        }
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
    }

    private void onTimeChanged() {
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
        if (mOnTimeChangedListener != null) {
            mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute());
        }
+4 −2
Original line number Diff line number Diff line
@@ -22,7 +22,8 @@
    <ImageButton android:id="@+id/increment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="?android:attr/numberPickerUpButtonStyle" />
        style="?android:attr/numberPickerUpButtonStyle"
        android:contentDescription="@string/number_picker_increment_button" />

    <EditText android:id="@+id/numberpicker_input"
        android:layout_width="fill_parent"
@@ -32,6 +33,7 @@
    <ImageButton android:id="@+id/decrement"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="?android:attr/numberPickerDownButtonStyle" />
        style="?android:attr/numberPickerDownButtonStyle"
        android:contentDescription="@string/number_picker_decrement_button" />

</merge>
+7 −0
Original line number Diff line number Diff line
@@ -2690,4 +2690,11 @@

    <!-- Choose Account Activity label -->
    <string name="choose_account_label">Select an account</string>

    <!-- NumberPicker - accessibility support -->
    <!-- Description of the button to increment the NumberPicker value. [CHAR LIMIT=NONE] -->
    <string name="number_picker_increment_button">Increment</string>
    <!-- Description of the button to decrement the NumberPicker value. [CHAR LIMIT=NONE] -->
    <string name="number_picker_decrement_button">Decrement</string>

</resources>