diff options
| author | Dan Sandler <dsandler@android.com> | 2015-06-11 09:17:07 -0400 |
|---|---|---|
| committer | Daniel Sandler <dsandler@android.com> | 2015-07-29 22:19:52 +0000 |
| commit | 25ffc7ad950d9b2857abe9cb66ed53aed7a18ecf (patch) | |
| tree | e740745d61069fbba1b8cdf1090ad89385363529 /core/java/android/widget/TextClock.java | |
| parent | 771d210ab2d0df9d6748eb56e3f7250377df1fc4 (diff) | |
Accessibility: Read the time correctly in quick settings.
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
Diffstat (limited to 'core/java/android/widget/TextClock.java')
| -rw-r--r-- | core/java/android/widget/TextClock.java | 29 |
1 files changed, 29 insertions, 0 deletions
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 */ |
