Loading packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java +4 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ public interface QSTile { public CharSequence label; public CharSequence secondaryLabel; public CharSequence contentDescription; public CharSequence stateDescription; public CharSequence dualLabelContentDescription; public boolean disabledByPolicy; public boolean dualTarget = false; Loading @@ -135,6 +136,7 @@ public interface QSTile { || !Objects.equals(other.label, label) || !Objects.equals(other.secondaryLabel, secondaryLabel) || !Objects.equals(other.contentDescription, contentDescription) || !Objects.equals(other.stateDescription, stateDescription) || !Objects.equals(other.dualLabelContentDescription, dualLabelContentDescription) || !Objects.equals(other.expandedAccessibilityClassName, Loading @@ -151,6 +153,7 @@ public interface QSTile { other.label = label; other.secondaryLabel = secondaryLabel; other.contentDescription = contentDescription; other.stateDescription = stateDescription; other.dualLabelContentDescription = dualLabelContentDescription; other.expandedAccessibilityClassName = expandedAccessibilityClassName; other.disabledByPolicy = disabledByPolicy; Loading @@ -177,6 +180,7 @@ public interface QSTile { sb.append(",label=").append(label); sb.append(",secondaryLabel=").append(secondaryLabel); sb.append(",contentDescription=").append(contentDescription); sb.append(",stateDescription=").append(stateDescription); sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription); sb.append(",expandedAccessibilityClassName=").append(expandedAccessibilityClassName); sb.append(",disabledByPolicy=").append(disabledByPolicy); Loading packages/SystemUI/res/values/strings.xml +3 −2 Original line number Diff line number Diff line Loading @@ -2032,6 +2032,9 @@ <!-- Label for feature switch [CHAR LIMIT=30] --> <string name="switch_bar_off">Off</string> <!-- The tile in quick settings is unavailable. [CHAR LIMIT=32] --> <string name="tile_unavailable">Unavailable</string> <!-- SysUI Tuner: Button that leads to the navigation bar customization screen [CHAR LIMIT=60] --> <string name="nav_bar">Navigation bar</string> Loading Loading @@ -2586,6 +2589,4 @@ <string name="controls_favorite_default_title">Controls</string> <!-- Controls management controls screen subtitle [CHAR LIMIT=NONE] --> <string name="controls_favorite_subtitle">Choose controls for quick access</string> </resources> packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +7 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener mTile.setLabel(tile.getLabel()); mTile.setSubtitle(tile.getSubtitle()); mTile.setContentDescription(tile.getContentDescription()); mTile.setStateDescription(tile.getStateDescription()); mTile.setState(tile.getState()); } Loading Loading @@ -345,6 +346,12 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener state.contentDescription = state.label; } if (mTile.getStateDescription() != null) { state.stateDescription = mTile.getStateDescription(); } else { state.stateDescription = null; } if (state instanceof BooleanState) { state.expandedAccessibilityClassName = Switch.class.getName(); ((BooleanState) state).value = (state.state == Tile.STATE_ACTIVE); Loading packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java +29 −19 Original line number Diff line number Diff line Loading @@ -63,7 +63,6 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { private String mAccessibilityClass; private boolean mTileState; private boolean mCollapsedView; private boolean mClicked; private boolean mShowRippleEffect = true; private final ImageView mBg; Loading Loading @@ -230,13 +229,35 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { setLongClickable(state.handlesLongClick); mIcon.setIcon(state, allowAnimations); setContentDescription(state.contentDescription); final StringBuilder stateDescription = new StringBuilder(); switch (state.state) { case Tile.STATE_UNAVAILABLE: stateDescription.append(mContext.getString(R.string.tile_unavailable)); break; case Tile.STATE_INACTIVE: if (state instanceof QSTile.BooleanState) { stateDescription.append(mContext.getString(R.string.switch_bar_off)); } break; case Tile.STATE_ACTIVE: if (state instanceof QSTile.BooleanState) { stateDescription.append(mContext.getString(R.string.switch_bar_on)); } break; default: break; } if (!TextUtils.isEmpty(state.stateDescription)) { stateDescription.append(", "); stateDescription.append(state.stateDescription); } setStateDescription(stateDescription.toString()); mAccessibilityClass = state.state == Tile.STATE_UNAVAILABLE ? null : state.expandedAccessibilityClassName; if (state instanceof QSTile.BooleanState) { boolean newState = ((BooleanState) state).value; if (mTileState != newState) { mClicked = false; mTileState = newState; } } Loading Loading @@ -287,24 +308,11 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { return mIconFrame; } @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(b ? R.string.switch_bar_on : R.string.switch_bar_off); event.setContentDescription(label); event.setChecked(b); } } } Loading @@ -316,11 +324,13 @@ 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(b ? R.string.switch_bar_on : R.string.switch_bar_off); String label = getResources().getString( mTileState ? R.string.switch_bar_on : R.string.switch_bar_off); // Set the text here for tests in // android.platform.test.scenario.sysui.quicksettings. Can be removed when // UiObject2 has a new getStateDescription() API and tests are updated. info.setText(label); info.setChecked(b); info.setChecked(mTileState); info.setCheckable(true); if (isLongClickable()) { info.addAction( Loading packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +6 −4 Original line number Diff line number Diff line Loading @@ -134,25 +134,27 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { state.label = mContext.getString(R.string.quick_settings_bluetooth_label); state.secondaryLabel = TextUtils.emptyIfNull( getSecondaryLabel(enabled, connecting, connected, state.isTransient)); state.contentDescription = state.label; state.stateDescription = ""; if (enabled) { if (connected) { state.icon = new BluetoothConnectedTileIcon(); if (!TextUtils.isEmpty(mController.getConnectedDeviceName())) { state.label = mController.getConnectedDeviceName(); } state.contentDescription = state.stateDescription = mContext.getString(R.string.accessibility_bluetooth_name, state.label) + ", " + state.secondaryLabel; } else if (state.isTransient) { state.icon = ResourceIcon.get( com.android.internal.R.drawable.ic_bluetooth_transient_animation); state.contentDescription = state.secondaryLabel; state.stateDescription = state.secondaryLabel; } else { state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_bluetooth); state.contentDescription = mContext.getString( R.string.accessibility_quick_settings_bluetooth) + "," + mContext.getString(R.string.accessibility_not_connected); R.string.accessibility_quick_settings_bluetooth); state.stateDescription = mContext.getString(R.string.accessibility_not_connected); } state.state = Tile.STATE_ACTIVE; } else { Loading Loading
packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java +4 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ public interface QSTile { public CharSequence label; public CharSequence secondaryLabel; public CharSequence contentDescription; public CharSequence stateDescription; public CharSequence dualLabelContentDescription; public boolean disabledByPolicy; public boolean dualTarget = false; Loading @@ -135,6 +136,7 @@ public interface QSTile { || !Objects.equals(other.label, label) || !Objects.equals(other.secondaryLabel, secondaryLabel) || !Objects.equals(other.contentDescription, contentDescription) || !Objects.equals(other.stateDescription, stateDescription) || !Objects.equals(other.dualLabelContentDescription, dualLabelContentDescription) || !Objects.equals(other.expandedAccessibilityClassName, Loading @@ -151,6 +153,7 @@ public interface QSTile { other.label = label; other.secondaryLabel = secondaryLabel; other.contentDescription = contentDescription; other.stateDescription = stateDescription; other.dualLabelContentDescription = dualLabelContentDescription; other.expandedAccessibilityClassName = expandedAccessibilityClassName; other.disabledByPolicy = disabledByPolicy; Loading @@ -177,6 +180,7 @@ public interface QSTile { sb.append(",label=").append(label); sb.append(",secondaryLabel=").append(secondaryLabel); sb.append(",contentDescription=").append(contentDescription); sb.append(",stateDescription=").append(stateDescription); sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription); sb.append(",expandedAccessibilityClassName=").append(expandedAccessibilityClassName); sb.append(",disabledByPolicy=").append(disabledByPolicy); Loading
packages/SystemUI/res/values/strings.xml +3 −2 Original line number Diff line number Diff line Loading @@ -2032,6 +2032,9 @@ <!-- Label for feature switch [CHAR LIMIT=30] --> <string name="switch_bar_off">Off</string> <!-- The tile in quick settings is unavailable. [CHAR LIMIT=32] --> <string name="tile_unavailable">Unavailable</string> <!-- SysUI Tuner: Button that leads to the navigation bar customization screen [CHAR LIMIT=60] --> <string name="nav_bar">Navigation bar</string> Loading Loading @@ -2586,6 +2589,4 @@ <string name="controls_favorite_default_title">Controls</string> <!-- Controls management controls screen subtitle [CHAR LIMIT=NONE] --> <string name="controls_favorite_subtitle">Choose controls for quick access</string> </resources>
packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +7 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener mTile.setLabel(tile.getLabel()); mTile.setSubtitle(tile.getSubtitle()); mTile.setContentDescription(tile.getContentDescription()); mTile.setStateDescription(tile.getStateDescription()); mTile.setState(tile.getState()); } Loading Loading @@ -345,6 +346,12 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener state.contentDescription = state.label; } if (mTile.getStateDescription() != null) { state.stateDescription = mTile.getStateDescription(); } else { state.stateDescription = null; } if (state instanceof BooleanState) { state.expandedAccessibilityClassName = Switch.class.getName(); ((BooleanState) state).value = (state.state == Tile.STATE_ACTIVE); Loading
packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java +29 −19 Original line number Diff line number Diff line Loading @@ -63,7 +63,6 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { private String mAccessibilityClass; private boolean mTileState; private boolean mCollapsedView; private boolean mClicked; private boolean mShowRippleEffect = true; private final ImageView mBg; Loading Loading @@ -230,13 +229,35 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { setLongClickable(state.handlesLongClick); mIcon.setIcon(state, allowAnimations); setContentDescription(state.contentDescription); final StringBuilder stateDescription = new StringBuilder(); switch (state.state) { case Tile.STATE_UNAVAILABLE: stateDescription.append(mContext.getString(R.string.tile_unavailable)); break; case Tile.STATE_INACTIVE: if (state instanceof QSTile.BooleanState) { stateDescription.append(mContext.getString(R.string.switch_bar_off)); } break; case Tile.STATE_ACTIVE: if (state instanceof QSTile.BooleanState) { stateDescription.append(mContext.getString(R.string.switch_bar_on)); } break; default: break; } if (!TextUtils.isEmpty(state.stateDescription)) { stateDescription.append(", "); stateDescription.append(state.stateDescription); } setStateDescription(stateDescription.toString()); mAccessibilityClass = state.state == Tile.STATE_UNAVAILABLE ? null : state.expandedAccessibilityClassName; if (state instanceof QSTile.BooleanState) { boolean newState = ((BooleanState) state).value; if (mTileState != newState) { mClicked = false; mTileState = newState; } } Loading Loading @@ -287,24 +308,11 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { return mIconFrame; } @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(b ? R.string.switch_bar_on : R.string.switch_bar_off); event.setContentDescription(label); event.setChecked(b); } } } Loading @@ -316,11 +324,13 @@ 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(b ? R.string.switch_bar_on : R.string.switch_bar_off); String label = getResources().getString( mTileState ? R.string.switch_bar_on : R.string.switch_bar_off); // Set the text here for tests in // android.platform.test.scenario.sysui.quicksettings. Can be removed when // UiObject2 has a new getStateDescription() API and tests are updated. info.setText(label); info.setChecked(b); info.setChecked(mTileState); info.setCheckable(true); if (isLongClickable()) { info.addAction( Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +6 −4 Original line number Diff line number Diff line Loading @@ -134,25 +134,27 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { state.label = mContext.getString(R.string.quick_settings_bluetooth_label); state.secondaryLabel = TextUtils.emptyIfNull( getSecondaryLabel(enabled, connecting, connected, state.isTransient)); state.contentDescription = state.label; state.stateDescription = ""; if (enabled) { if (connected) { state.icon = new BluetoothConnectedTileIcon(); if (!TextUtils.isEmpty(mController.getConnectedDeviceName())) { state.label = mController.getConnectedDeviceName(); } state.contentDescription = state.stateDescription = mContext.getString(R.string.accessibility_bluetooth_name, state.label) + ", " + state.secondaryLabel; } else if (state.isTransient) { state.icon = ResourceIcon.get( com.android.internal.R.drawable.ic_bluetooth_transient_animation); state.contentDescription = state.secondaryLabel; state.stateDescription = state.secondaryLabel; } else { state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_bluetooth); state.contentDescription = mContext.getString( R.string.accessibility_quick_settings_bluetooth) + "," + mContext.getString(R.string.accessibility_not_connected); R.string.accessibility_quick_settings_bluetooth); state.stateDescription = mContext.getString(R.string.accessibility_not_connected); } state.state = Tile.STATE_ACTIVE; } else { Loading