Fixed accessibility issues with quick settings

The dual mode tiles now have better accessibility descriptions,
where the label is now seperate from the clickable button.
Also fixed an anouncment problem with the battery indicators.
Finally fixed an issue where GPRS null was anounced when no signal
was available.

Bug: 15682124
Bug: 15696954
Change-Id: Ica2b70173e64d51747b100d0b686875fc8076e6f
This commit is contained in:
Selim Cinek
2014-08-15 19:59:23 +02:00
parent 65c09b10ca
commit e5557a972c
9 changed files with 40 additions and 9 deletions

View File

@@ -60,7 +60,8 @@
android:paddingEnd="@dimen/battery_level_padding_end"
android:textColor="#ffffff"
android:visibility="gone"
android:textSize="@dimen/battery_level_text_size"/>
android:textSize="@dimen/battery_level_text_size"
android:importantForAccessibility="noHideDescendants"/>
</LinearLayout>
<com.android.keyguard.CarrierText

View File

@@ -72,7 +72,8 @@
android:layout_marginStart="@dimen/header_battery_margin_expanded"
android:paddingEnd="@dimen/battery_level_padding_end"
android:textColor="#ffffff"
android:textSize="@dimen/battery_level_text_size"/>
android:textSize="@dimen/battery_level_text_size"
android:importantForAccessibility="noHideDescendants"/>
</LinearLayout>
<TextView

View File

@@ -273,6 +273,13 @@
<!-- Content description of the WIFI signal when it is full for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_wifi_signal_full">Wifi signal full.</string>
<!-- Content description of the wifi label showing what we are connected to. [CHAR LIMIT=NONE] -->
<string name="accessibility_wifi_name">Connected to <xliff:g id="wifi" example="Home Network">%s</xliff:g>.</string>
<!-- Content description of the bluetooth label showing what we are connected to. [CHAR LIMIT=NONE] -->
<string name="accessibility_bluetooth_name">Connected to <xliff:g id="bluetooth" example="Car Audio">%s</xliff:g>.</string>
<!-- Content description of the WiMAX signal when no signal for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_no_wimax">No WiMAX.</string>
<!-- Content description of the WiMAX signal when it is one bar for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
@@ -398,7 +405,7 @@
<!-- Content description of the user tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_user">User <xliff:g id="user" example="John Doe">%s</xliff:g>.</string>
<!-- Content description of the wifi tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_wifi"><xliff:g id="signal" example="Three bars">%1$s</xliff:g>. <xliff:g id="network" example="MyWifiNetwork">%2$s</xliff:g></string>
<string name="accessibility_quick_settings_wifi"><xliff:g id="signal" example="Three bars">%1$s</xliff:g>.</string>
<!-- Content description of the mobile data tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_mobile">Mobile <xliff:g id="signal" example="Three bars">%1$s</xliff:g>. <xliff:g id="type" example="4G">%2$s</xliff:g>. <xliff:g id="network" example="T-Mobile">%3$s</xliff:g>.</string>
<!-- Content description of the battery tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->

View File

@@ -345,8 +345,8 @@ public class QSPanel extends ViewGroup {
}
for (TileRecord record : mRecords) {
if (record.tileView.getVisibility() == GONE) continue;
record.tileView.setDual(record.tile.supportsDualTargets());
if (record.tileView.getVisibility() == GONE) continue;
final int cw = record.row == 0 ? mLargeCellWidth : mCellWidth;
final int ch = record.row == 0 ? mLargeCellHeight : mCellHeight;
record.tileView.measure(exactly(cw), exactly(ch));

View File

@@ -286,6 +286,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
public Drawable icon;
public String label;
public String contentDescription;
public String dualLabelContentDescription;
public boolean copyTo(State other) {
if (other == null) throw new IllegalArgumentException();
@@ -294,12 +295,15 @@ public abstract class QSTile<TState extends State> implements Listenable {
|| other.iconId != iconId
|| !Objects.equals(other.icon, icon)
|| !Objects.equals(other.label, label)
|| !Objects.equals(other.contentDescription, contentDescription);
|| !Objects.equals(other.contentDescription, contentDescription)
|| !Objects.equals(other.dualLabelContentDescription,
dualLabelContentDescription);
other.visible = visible;
other.iconId = iconId;
other.icon = icon;
other.label = label;
other.contentDescription = contentDescription;
other.dualLabelContentDescription = dualLabelContentDescription;
return changed;
}
@@ -315,6 +319,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
sb.append(",icon=").append(icon);
sb.append(",label=").append(label);
sb.append(",contentDescription=").append(contentDescription);
sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription);
return sb.append(']');
}
}

View File

@@ -87,6 +87,7 @@ public class QSTileView extends ViewGroup {
private void recreateLabel() {
CharSequence labelText = null;
CharSequence labelDescription = null;
if (mLabel != null) {
labelText = mLabel.getText();
removeView(mLabel);
@@ -94,6 +95,7 @@ public class QSTileView extends ViewGroup {
}
if (mDualLabel != null) {
labelText = mDualLabel.getText();
labelDescription = mLabel.getContentDescription();
removeView(mDualLabel);
mDualLabel = null;
}
@@ -113,6 +115,9 @@ public class QSTileView extends ViewGroup {
if (labelText != null) {
mDualLabel.setText(labelText);
}
if (labelDescription != null) {
mDualLabel.setContentDescription(labelDescription);
}
addView(mDualLabel);
} else {
mLabel = new TextView(mContext);
@@ -228,6 +233,7 @@ public class QSTileView extends ViewGroup {
}
if (mDual) {
mDualLabel.setText(state.label);
mDualLabel.setContentDescription(state.dualLabelContentDescription);
} else {
mLabel.setText(state.label);
}

View File

@@ -114,6 +114,12 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
}
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_bluetooth, stateContentDescription);
String bluetoothName = state.label;
if (connected) {
bluetoothName = state.dualLabelContentDescription = mContext.getString(
R.string.accessibility_bluetooth_name, state.label);
}
state.dualLabelContentDescription = bluetoothName;
}
private final BluetoothController.Callback mCallback = new BluetoothController.Callback() {

View File

@@ -132,8 +132,12 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
}
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_wifi,
signalContentDescription,
state.connected ? state.label : "");
signalContentDescription);
String wifiName = state.label;
if (state.connected) {
wifiName = r.getString(R.string.accessibility_wifi_name, state.label);
}
state.dualLabelContentDescription = wifiName;
}
private static String removeDoubleQuotes(String string) {

View File

@@ -602,6 +602,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
mDataSignalIconId = R.drawable.stat_sys_signal_null;
mContentDescriptionPhoneSignal = mContext.getString(
AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]);
} else {
if (mSignalStrength == null) {
if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null");
@@ -665,8 +667,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
mDataTypeIconId = 0;
mQSDataTypeIconId = 0;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_gprs);
mContentDescriptionDataType = "";
break;
} else {
// fall through