OSDN Git Service

DatePicker A11Y fix time announced for date widgets
authorAndrei Stingaceanu <stg@google.com>
Thu, 16 Jun 2016 11:00:39 +0000 (12:00 +0100)
committerAndrei Stingaceanu <stg@google.com>
Thu, 16 Jun 2016 11:09:52 +0000 (12:09 +0100)
* introduced a new method (getFormattedCurrentDate) which formats
the date for all DatePickerDelegates
* implemented (moved) onPopulateAccessibilityEvent in the
AbstractDatePickerDelegate thus all announcements for date pickers
use the same format
* note: added FORMAT_SHOW_WEEKDAY to the current format because
I find the information valuable

E.g:
* Before: "Thu Jun 16 11:49:14 GMT+01:00 2016"
* Now: "Thursday, 16 June 2016"

Bug: 29099922
Change-Id: I94447067f10659747ae310f9e07cf3f487c97e05

core/java/android/widget/DatePicker.java
core/java/android/widget/DatePickerCalendarDelegate.java
core/java/android/widget/DatePickerSpinnerDelegate.java

index 56a8966..e196cf0 100644 (file)
@@ -27,6 +27,7 @@ import android.icu.util.Calendar;
 import android.icu.util.TimeZone;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.text.format.DateUtils;
 import android.util.AttributeSet;
 import android.util.SparseArray;
 import android.view.View;
@@ -500,6 +501,8 @@ public class DatePicker extends FrameLayout {
         // The context
         protected Context mContext;
 
+        protected Calendar mCurrentDate;
+
         // The current locale
         protected Locale mCurrentLocale;
 
@@ -541,6 +544,17 @@ public class DatePicker extends FrameLayout {
             // Stub.
         }
 
+        @Override
+        public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+            event.getText().add(getFormattedCurrentDate());
+        }
+
+        protected String getFormattedCurrentDate() {
+           return DateUtils.formatDateTime(mContext, mCurrentDate.getTimeInMillis(),
+                   DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR
+                           | DateUtils.FORMAT_SHOW_WEEKDAY);
+        }
+
         /**
          * Class for managing state storing/restoring.
          */
index 9488d41..1bf0c87 100755 (executable)
@@ -29,7 +29,6 @@ import android.icu.text.SimpleDateFormat;
 import android.icu.util.Calendar;
 import android.os.Parcelable;
 import android.text.format.DateFormat;
-import android.text.format.DateUtils;
 import android.util.AttributeSet;
 import android.util.StateSet;
 import android.view.HapticFeedbackConstants;
@@ -84,7 +83,6 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
 
     private int mCurrentView = UNINITIALIZED;
 
-    private final Calendar mCurrentDate;
     private final Calendar mTempDate;
     private final Calendar mMinDate;
     private final Calendar mMaxDate;
@@ -324,10 +322,7 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
 
         // TODO: This should use live regions.
         if (announce) {
-            final long millis = mCurrentDate.getTimeInMillis();
-            final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR;
-            final String fullDateText = DateUtils.formatDateTime(mContext, millis, flags);
-            mAnimator.announceForAccessibility(fullDateText);
+            mAnimator.announceForAccessibility(getFormattedCurrentDate());
         }
     }
 
@@ -582,11 +577,6 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
         return true;
     }
 
-    @Override
-    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
-        event.getText().add(mCurrentDate.getTime().toString());
-    }
-
     public CharSequence getAccessibilityClassName() {
         return DatePicker.class.getName();
     }
index 1a6d351..9ecf8a5 100644 (file)
@@ -24,7 +24,6 @@ import android.os.Parcelable;
 import android.text.InputType;
 import android.text.TextUtils;
 import android.text.format.DateFormat;
-import android.text.format.DateUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -87,8 +86,6 @@ class DatePickerSpinnerDelegate extends AbstractDatePickerDelegate {
 
     private Calendar mMaxDate;
 
-    private Calendar mCurrentDate;
-
     private boolean mIsEnabled = DEFAULT_ENABLED_STATE;
 
     DatePickerSpinnerDelegate(DatePicker delegator, Context context, AttributeSet attrs,
@@ -398,14 +395,6 @@ class DatePickerSpinnerDelegate extends AbstractDatePickerDelegate {
         return true;
     }
 
-    @Override
-    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
-        final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR;
-        String selectedDateUtterance = DateUtils.formatDateTime(mContext,
-                mCurrentDate.getTimeInMillis(), flags);
-        event.getText().add(selectedDateUtterance);
-    }
-
     /**
      * Sets the current locale.
      *