summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Sandler <dsandler@android.com>2015-06-11 09:17:07 -0400
committerDaniel Sandler <dsandler@android.com>2015-07-29 22:19:52 +0000
commit25ffc7ad950d9b2857abe9cb66ed53aed7a18ecf (patch)
treee740745d61069fbba1b8cdf1090ad89385363529
parent771d210ab2d0df9d6748eb56e3f7250377df1fc4 (diff)
downloadframeworks_base-25ffc7ad950d9b2857abe9cb66ed53aed7a18ecf.zip
frameworks_base-25ffc7ad950d9b2857abe9cb66ed53aed7a18ecf.tar.gz
frameworks_base-25ffc7ad950d9b2857abe9cb66ed53aed7a18ecf.tar.bz2
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
-rw-r--r--core/java/android/widget/TextClock.java29
-rw-r--r--packages/SystemUI/res/layout/split_clock_view.xml3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/SplitClockView.java2
3 files changed, 33 insertions, 1 deletions
diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java
index 5d7b569..bcde315 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 808460a..d1269da 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"
/>
<!-- Empty text view so we have the same height when expanded/collapsed-->
@@ -46,4 +47,4 @@
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
/>
-</com.android.systemui.statusbar.policy.SplitClockView> \ No newline at end of file
+</com.android.systemui.statusbar.policy.SplitClockView>
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 50e3977..faa1a28 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);
}