From 90950d998cffa25ba0c01e503c9dc6616230dabd Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 20 Jun 2017 13:16:05 -0400 Subject: [PATCH] Fix QS wifi accessibility announcements The state was being inverted in events to try to get clicks correct, but events can occur at other times, so really we want to invert the state between when the click happens and when the next state change occurs. Also add a toString to fix equals checks on the content description to make the announcements less noisy. Test: manual Change-Id: Ie4159664e9a81fd1719dbf7c06fba5e7b827cc6d Fixes: 62679498 --- .../systemui/qs/tileimpl/QSTileBaseView.java | 24 +++++++++++++++---- .../android/systemui/qs/tiles/WifiTile.java | 11 ++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java index 2d0fe6f63219e..4d0e60d505f67 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java @@ -32,6 +32,7 @@ import android.widget.Switch; import com.android.systemui.R; import com.android.systemui.plugins.qs.*; +import com.android.systemui.plugins.qs.QSTile.BooleanState; public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { @@ -44,6 +45,7 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { private String mAccessibilityClass; private boolean mTileState; private boolean mCollapsedView; + private boolean mClicked; public QSTileBaseView(Context context, QSIconView icon) { this(context, icon, false); @@ -153,7 +155,11 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { setContentDescription(state.contentDescription); mAccessibilityClass = state.expandedAccessibilityClassName; if (state instanceof QSTile.BooleanState) { - mTileState = ((QSTile.BooleanState) state).value; + boolean newState = ((BooleanState) state).value; + if (mTileState != newState) { + mClicked = false; + mTileState = newState; + } } } @@ -172,16 +178,23 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { return mIcon; } + @Override + public boolean performClick() { + mClicked = true; + return super.performClick(); + } + @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); if (!TextUtils.isEmpty(mAccessibilityClass)) { event.setClassName(mAccessibilityClass); if (Switch.class.getName().equals(mAccessibilityClass)) { + boolean b = mClicked ? !mTileState : mTileState; String label = getResources() - .getString(!mTileState ? R.string.switch_bar_on : R.string.switch_bar_off); + .getString(b ? R.string.switch_bar_on : R.string.switch_bar_off); event.setContentDescription(label); - event.setChecked(!mTileState); + event.setChecked(b); } } } @@ -192,10 +205,11 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { if (!TextUtils.isEmpty(mAccessibilityClass)) { info.setClassName(mAccessibilityClass); if (Switch.class.getName().equals(mAccessibilityClass)) { + boolean b = mClicked ? !mTileState : mTileState; String label = getResources() - .getString(mTileState ? R.string.switch_bar_on : R.string.switch_bar_off); + .getString(b ? R.string.switch_bar_on : R.string.switch_bar_off); info.setText(label); - info.setChecked(mTileState); + info.setChecked(b); info.setCheckable(true); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 76f6e7d7d2430..f26afcc38440a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -32,17 +32,16 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.wifi.AccessPoint; import com.android.systemui.Dependency; import com.android.systemui.R; -import com.android.systemui.R.string; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.DetailAdapter; -import com.android.systemui.qs.QSDetailItems; -import com.android.systemui.qs.QSDetailItems.Item; -import com.android.systemui.qs.QSHost; import com.android.systemui.plugins.qs.QSIconView; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile.SignalState; -import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.qs.QSDetailItems; +import com.android.systemui.qs.QSDetailItems.Item; +import com.android.systemui.qs.QSHost; import com.android.systemui.qs.SignalTileView; +import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.AccessPointController; import com.android.systemui.statusbar.policy.NetworkController.IconState; @@ -180,7 +179,7 @@ public class WifiTile extends QSTileImpl { minimalContentDescription.append(removeDoubleQuotes(cb.enabledDesc)); } } - state.contentDescription = minimalContentDescription; + state.contentDescription = minimalContentDescription.toString(); state.dualLabelContentDescription = r.getString( R.string.accessibility_quick_settings_open_settings, getTileLabel()); state.expandedAccessibilityClassName = Switch.class.getName();