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

Commit 014b8cfc authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Fix new TimePicker accessibility

- make AM/PM TextView accessible
- fix accessibility node loop (which is making the TalkBack service to crash)

Change-Id: Iea2152f0ab223039a6d92eafcd92f86c4055b316
parent 638fcf0d
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
@@ -44,6 +45,7 @@ import com.android.internal.R;
import java.text.DateFormatSymbols;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;

/**
 * A view for selecting the time of day, in either 24 hour or AM/PM mode.
@@ -120,6 +122,8 @@ class TimePickerDelegate extends TimePicker.AbstractTimePickerDelegate implement
    private String mMinutePickerDescription;
    private String mSelectMinutes;

    private Calendar mTempCalendar;

    public TimePickerDelegate(TimePicker delegator, Context context, AttributeSet attrs,
                              int defStyleAttr, int defStyleRes) {
        super(delegator, context);
@@ -505,24 +509,41 @@ class TimePickerDelegate extends TimePicker.AbstractTimePickerDelegate implement
        }
    }

    @Override
    public void setCurrentLocale(Locale locale) {
        super.setCurrentLocale(locale);
        mTempCalendar = Calendar.getInstance(locale);
    }

    @Override
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        return mRadialTimePickerView.dispatchPopulateAccessibilityEvent(event);
        onPopulateAccessibilityEvent(event);
        return true;
    }

    @Override
    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
        mRadialTimePickerView.onPopulateAccessibilityEvent(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 selectedDate = DateUtils.formatDateTime(mContext,
                mTempCalendar.getTimeInMillis(), flags);
        event.getText().add(selectedDate);
    }

    @Override
    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
        mRadialTimePickerView.onInitializeAccessibilityEvent(event);
        event.setClassName(TimePicker.class.getName());
    }

    @Override
    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
        mRadialTimePickerView.onInitializeAccessibilityNodeInfo(info);
        info.setClassName(TimePicker.class.getName());
    }

    /**
+1 −2
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@
            android:paddingRight="@dimen/timepicker_ampm_left_padding"
            android:layout_toRightOf="@+id/separator"
            android:layout_alignBaseline="@+id/separator"
            android:textAppearance="?android:attr/timePickerHeaderAmPmLabelTextAppearance"
            android:importantForAccessibility="no" />
            android:textAppearance="?android:attr/timePickerHeaderAmPmLabelTextAppearance" />

</RelativeLayout>