Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90950d99 authored by Jason Monk's avatar Jason Monk
Browse files

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
parent e139434e
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -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);
            }
        }
+5 −6
Original line number Diff line number Diff line
@@ -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<SignalState> {
                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();