From 25ffc7ad950d9b2857abe9cb66ed53aed7a18ecf Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Thu, 11 Jun 2015 09:17:07 -0400 Subject: [PATCH] Accessibility: Read the time correctly in quick settings. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The problem is that, for 12-hour locales, we cut the "a" part of the time format out to show it in a separate TextView so it can be animated independently of the actual time. Unfortunately, while TTS is smart enough to pronounce "1:15 AM" as /wʌn fɪftin eɪ ɛm/, "AM" on its own looks like the English word "am" and is pronounced /æm/. To fix this, a TextClock must be able to accept separate formats for its content description than its presentation. With this capability we can place the complete 12-hour time format (including am/pm) in one of the views and suppress the other one, so that the utterance creates an identical experience to visual inspection: "1:15 AM" for all users. Bug: 21718000 Change-Id: Ic9920d71ae4d4ad41ba86d7bd96f9a19b07e2108 --- core/java/android/widget/TextClock.java | 29 ++++++++++++++++++++++ packages/SystemUI/res/layout/split_clock_view.xml | 3 ++- .../systemui/statusbar/policy/SplitClockView.java | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java index 5d7b56979218..bcde3158866a 100644 --- a/core/java/android/widget/TextClock.java +++ b/core/java/android/widget/TextClock.java @@ -120,12 +120,16 @@ public class TextClock extends TextView { private CharSequence mFormat12; private CharSequence mFormat24; + private CharSequence mDescFormat12; + private CharSequence mDescFormat24; @ExportedProperty private CharSequence mFormat; @ExportedProperty private boolean mHasSeconds; + private CharSequence mDescFormat; + private boolean mAttached; private Calendar mTime; @@ -301,6 +305,17 @@ public class TextClock extends TextView { } /** + * Like setFormat12Hour, but for the content description. + * @hide + */ + public void setContentDescriptionFormat12Hour(CharSequence format) { + mDescFormat12 = format; + + chooseFormat(); + onTimeChanged(); + } + + /** * Returns the formatting pattern used to display the date and/or time * in 24-hour mode. The formatting pattern syntax is described in * {@link DateFormat}. @@ -348,6 +363,17 @@ public class TextClock extends TextView { } /** + * Like setFormat24Hour, but for the content description. + * @hide + */ + public void setContentDescriptionFormat24Hour(CharSequence format) { + mDescFormat24 = format; + + chooseFormat(); + onTimeChanged(); + } + + /** * Sets whether this clock should always track the current user and not the user of the * current process. This is used for single instance processes like the systemUI who need * to display time for different users. @@ -460,8 +486,10 @@ public class TextClock extends TextView { if (format24Requested) { mFormat = abc(mFormat24, mFormat12, ld.timeFormat_Hm); + mDescFormat = abc(mDescFormat24, mDescFormat12, mFormat); } else { mFormat = abc(mFormat12, mFormat24, ld.timeFormat_hm); + mDescFormat = abc(mDescFormat12, mDescFormat24, mFormat); } boolean hadSeconds = mHasSeconds; @@ -547,6 +575,7 @@ public class TextClock extends TextView { private void onTimeChanged() { mTime.setTimeInMillis(System.currentTimeMillis()); setText(DateFormat.format(mFormat, mTime)); + setContentDescription(DateFormat.format(mDescFormat, mTime)); } /** @hide */ diff --git a/packages/SystemUI/res/layout/split_clock_view.xml b/packages/SystemUI/res/layout/split_clock_view.xml index 808460a88f46..d1269dabf286 100644 --- a/packages/SystemUI/res/layout/split_clock_view.xml +++ b/packages/SystemUI/res/layout/split_clock_view.xml @@ -35,6 +35,7 @@ android:singleLine="true" android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock" android:textSize="@dimen/qs_time_collapsed_size" + android:importantForAccessibility="no" /> @@ -46,4 +47,4 @@ android:singleLine="true" android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock" /> - \ No newline at end of file + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java index 50e3977c9214..faa1a28ace8b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java @@ -101,6 +101,8 @@ public class SplitClockView extends LinearLayout { } mTimeView.setFormat12Hour(timeString); mTimeView.setFormat24Hour(timeString); + mTimeView.setContentDescriptionFormat12Hour(formatString); + mTimeView.setContentDescriptionFormat24Hour(formatString); mAmPmView.setFormat12Hour(amPmString); mAmPmView.setFormat24Hour(amPmString); } -- 2.11.0