Merge "Quicksettings accessibility." into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
450f91b529
@@ -47,7 +47,8 @@
|
|||||||
android:textAppearance="@style/TextAppearance.QS.DetailButton"
|
android:textAppearance="@style/TextAppearance.QS.DetailButton"
|
||||||
android:textColor="#64FFFFFF"
|
android:textColor="#64FFFFFF"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:text="@string/qs_edit" />
|
android:text="@string/qs_edit"
|
||||||
|
android:contentDescription="@string/accessibility_quick_settings_edit"/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
android:clipChildren="false"
|
android:clipChildren="false"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:baselineAligned="false"
|
android:baselineAligned="false"
|
||||||
|
android:clickable="false"
|
||||||
>
|
>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -64,7 +65,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@drawable/ripple_drawable"
|
android:background="@drawable/ripple_drawable"
|
||||||
android:src="@drawable/ic_settings"
|
android:src="@drawable/ic_settings"
|
||||||
android:contentDescription="@string/accessibility_desc_settings" />
|
android:contentDescription="@string/accessibility_quick_settings_settings" />
|
||||||
<com.android.systemui.statusbar.AlphaOptimizedImageView android:id="@+id/tuner_icon"
|
<com.android.systemui.statusbar.AlphaOptimizedImageView android:id="@+id/tuner_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@@ -102,7 +103,8 @@
|
|||||||
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.EmergencyCallsOnly"
|
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.EmergencyCallsOnly"
|
||||||
android:text="@*android:string/emergency_calls_only"
|
android:text="@*android:string/emergency_calls_only"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:gravity="center_vertical" />
|
android:gravity="center_vertical"
|
||||||
|
android:focusable="true" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/date_time_alarm_group"
|
android:id="@+id/date_time_alarm_group"
|
||||||
@@ -118,7 +120,8 @@
|
|||||||
android:id="@+id/date_time_group"
|
android:id="@+id/date_time_group"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="19dp"
|
android:layout_height="19dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:focusable="true" >
|
||||||
|
|
||||||
<include layout="@layout/split_clock_view"
|
<include layout="@layout/split_clock_view"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -176,7 +179,11 @@
|
|||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:clipChildren="false"
|
android:clipChildren="false"
|
||||||
android:clipToPadding="false" />
|
android:clipToPadding="false"
|
||||||
|
android:importantForAccessibility="yes"
|
||||||
|
android:focusable="true"
|
||||||
|
android:accessibilityTraversalAfter="@id/date_time_group"
|
||||||
|
android:accessibilityTraversalBefore="@id/expand_indicator" />
|
||||||
|
|
||||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||||
android:id="@+id/qs_detail_header_progress"
|
android:id="@+id/qs_detail_header_progress"
|
||||||
|
|||||||
@@ -203,6 +203,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
|
|||||||
public TilePage(Context context, AttributeSet attrs) {
|
public TilePage(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
updateResources();
|
updateResources();
|
||||||
|
setContentDescription(mContext.getString(R.string.accessibility_desc_quick_settings));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -272,12 +272,16 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setTiles(Collection<QSTile<?>> tiles) {
|
public void setTiles(Collection<QSTile<?>> tiles) {
|
||||||
|
setTiles(tiles, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTiles(Collection<QSTile<?>> tiles, boolean collapsedView) {
|
||||||
for (TileRecord record : mRecords) {
|
for (TileRecord record : mRecords) {
|
||||||
mTileLayout.removeTile(record);
|
mTileLayout.removeTile(record);
|
||||||
}
|
}
|
||||||
mRecords.clear();
|
mRecords.clear();
|
||||||
for (QSTile<?> tile : tiles) {
|
for (QSTile<?> tile : tiles) {
|
||||||
addTile(tile);
|
addTile(tile, collapsedView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,14 +289,14 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
|
|||||||
r.tileView.onStateChanged(state);
|
r.tileView.onStateChanged(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected QSTileBaseView createTileView(QSTile<?> tile) {
|
protected QSTileBaseView createTileView(QSTile<?> tile, boolean collapsedView) {
|
||||||
return new QSTileView(mContext, tile.createTileView(mContext));
|
return new QSTileView(mContext, tile.createTileView(mContext), collapsedView);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addTile(final QSTile<?> tile) {
|
protected void addTile(final QSTile<?> tile, boolean collapsedView) {
|
||||||
final TileRecord r = new TileRecord();
|
final TileRecord r = new TileRecord();
|
||||||
r.tile = tile;
|
r.tile = tile;
|
||||||
r.tileView = createTileView(tile);
|
r.tileView = createTileView(tile, collapsedView);
|
||||||
final QSTile.Callback callback = new QSTile.Callback() {
|
final QSTile.Callback callback = new QSTile.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void onStateChanged(QSTile.State state) {
|
public void onStateChanged(QSTile.State state) {
|
||||||
|
|||||||
@@ -513,9 +513,12 @@ public abstract class QSTile<TState extends State> implements Listenable {
|
|||||||
public CharSequence label;
|
public CharSequence label;
|
||||||
public CharSequence contentDescription;
|
public CharSequence contentDescription;
|
||||||
public CharSequence dualLabelContentDescription;
|
public CharSequence dualLabelContentDescription;
|
||||||
|
public CharSequence minimalContentDescription;
|
||||||
public boolean autoMirrorDrawable = true;
|
public boolean autoMirrorDrawable = true;
|
||||||
public boolean disabledByPolicy;
|
public boolean disabledByPolicy;
|
||||||
public EnforcedAdmin enforcedAdmin;
|
public EnforcedAdmin enforcedAdmin;
|
||||||
|
public String minimalAccessibilityClassName;
|
||||||
|
public String expandedAccessibilityClassName;
|
||||||
|
|
||||||
public boolean copyTo(State other) {
|
public boolean copyTo(State other) {
|
||||||
if (other == null) throw new IllegalArgumentException();
|
if (other == null) throw new IllegalArgumentException();
|
||||||
@@ -526,12 +529,21 @@ public abstract class QSTile<TState extends State> implements Listenable {
|
|||||||
|| !Objects.equals(other.autoMirrorDrawable, autoMirrorDrawable)
|
|| !Objects.equals(other.autoMirrorDrawable, autoMirrorDrawable)
|
||||||
|| !Objects.equals(other.dualLabelContentDescription,
|
|| !Objects.equals(other.dualLabelContentDescription,
|
||||||
dualLabelContentDescription)
|
dualLabelContentDescription)
|
||||||
|
|| !Objects.equals(other.minimalContentDescription,
|
||||||
|
minimalContentDescription)
|
||||||
|
|| !Objects.equals(other.minimalAccessibilityClassName,
|
||||||
|
minimalAccessibilityClassName)
|
||||||
|
|| !Objects.equals(other.expandedAccessibilityClassName,
|
||||||
|
expandedAccessibilityClassName)
|
||||||
|| !Objects.equals(other.disabledByPolicy, disabledByPolicy)
|
|| !Objects.equals(other.disabledByPolicy, disabledByPolicy)
|
||||||
|| !Objects.equals(other.enforcedAdmin, enforcedAdmin);
|
|| !Objects.equals(other.enforcedAdmin, enforcedAdmin);
|
||||||
other.icon = icon;
|
other.icon = icon;
|
||||||
other.label = label;
|
other.label = label;
|
||||||
other.contentDescription = contentDescription;
|
other.contentDescription = contentDescription;
|
||||||
other.dualLabelContentDescription = dualLabelContentDescription;
|
other.dualLabelContentDescription = dualLabelContentDescription;
|
||||||
|
other.minimalContentDescription = minimalContentDescription;
|
||||||
|
other.minimalAccessibilityClassName = minimalAccessibilityClassName;
|
||||||
|
other.expandedAccessibilityClassName = expandedAccessibilityClassName;
|
||||||
other.autoMirrorDrawable = autoMirrorDrawable;
|
other.autoMirrorDrawable = autoMirrorDrawable;
|
||||||
other.disabledByPolicy = disabledByPolicy;
|
other.disabledByPolicy = disabledByPolicy;
|
||||||
if (enforcedAdmin == null) {
|
if (enforcedAdmin == null) {
|
||||||
@@ -555,6 +567,9 @@ public abstract class QSTile<TState extends State> implements Listenable {
|
|||||||
sb.append(",label=").append(label);
|
sb.append(",label=").append(label);
|
||||||
sb.append(",contentDescription=").append(contentDescription);
|
sb.append(",contentDescription=").append(contentDescription);
|
||||||
sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription);
|
sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription);
|
||||||
|
sb.append(",minimalContentDescription=").append(minimalContentDescription);
|
||||||
|
sb.append(",minimalAccessibilityClassName=").append(minimalAccessibilityClassName);
|
||||||
|
sb.append(",expandedAccessibilityClassName=").append(expandedAccessibilityClassName);
|
||||||
sb.append(",autoMirrorDrawable=").append(autoMirrorDrawable);
|
sb.append(",autoMirrorDrawable=").append(autoMirrorDrawable);
|
||||||
sb.append(",disabledByPolicy=").append(disabledByPolicy);
|
sb.append(",disabledByPolicy=").append(disabledByPolicy);
|
||||||
sb.append(",enforcedAdmin=").append(enforcedAdmin);
|
sb.append(",enforcedAdmin=").append(enforcedAdmin);
|
||||||
@@ -581,8 +596,7 @@ public abstract class QSTile<TState extends State> implements Listenable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class SignalState extends State {
|
public static final class SignalState extends BooleanState {
|
||||||
public boolean enabled;
|
|
||||||
public boolean connected;
|
public boolean connected;
|
||||||
public boolean activityIn;
|
public boolean activityIn;
|
||||||
public boolean activityOut;
|
public boolean activityOut;
|
||||||
@@ -593,12 +607,10 @@ public abstract class QSTile<TState extends State> implements Listenable {
|
|||||||
@Override
|
@Override
|
||||||
public boolean copyTo(State other) {
|
public boolean copyTo(State other) {
|
||||||
final SignalState o = (SignalState) other;
|
final SignalState o = (SignalState) other;
|
||||||
final boolean changed = o.enabled != enabled
|
final boolean changed = o.connected != connected || o.activityIn != activityIn
|
||||||
|| o.connected != connected || o.activityIn != activityIn
|
|
||||||
|| o.activityOut != activityOut
|
|| o.activityOut != activityOut
|
||||||
|| o.overlayIconId != overlayIconId
|
|| o.overlayIconId != overlayIconId
|
||||||
|| o.isOverlayIconWide != isOverlayIconWide;
|
|| o.isOverlayIconWide != isOverlayIconWide;
|
||||||
o.enabled = enabled;
|
|
||||||
o.connected = connected;
|
o.connected = connected;
|
||||||
o.activityIn = activityIn;
|
o.activityIn = activityIn;
|
||||||
o.activityOut = activityOut;
|
o.activityOut = activityOut;
|
||||||
@@ -611,7 +623,6 @@ public abstract class QSTile<TState extends State> implements Listenable {
|
|||||||
@Override
|
@Override
|
||||||
protected StringBuilder toStringBuilder() {
|
protected StringBuilder toStringBuilder() {
|
||||||
final StringBuilder rt = super.toStringBuilder();
|
final StringBuilder rt = super.toStringBuilder();
|
||||||
rt.insert(rt.length() - 1, ",enabled=" + enabled);
|
|
||||||
rt.insert(rt.length() - 1, ",connected=" + connected);
|
rt.insert(rt.length() - 1, ",connected=" + connected);
|
||||||
rt.insert(rt.length() - 1, ",activityIn=" + activityIn);
|
rt.insert(rt.length() - 1, ",activityIn=" + activityIn);
|
||||||
rt.insert(rt.length() - 1, ",activityOut=" + activityOut);
|
rt.insert(rt.length() - 1, ",activityOut=" + activityOut);
|
||||||
|
|||||||
@@ -22,8 +22,12 @@ import android.graphics.drawable.RippleDrawable;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
|
|
||||||
@@ -33,8 +37,15 @@ public class QSTileBaseView extends LinearLayout {
|
|||||||
private QSIconView mIcon;
|
private QSIconView mIcon;
|
||||||
private RippleDrawable mRipple;
|
private RippleDrawable mRipple;
|
||||||
private Drawable mTileBackground;
|
private Drawable mTileBackground;
|
||||||
|
private String mAccessibilityClass;
|
||||||
|
private boolean mTileState;
|
||||||
|
private boolean mCollapsedView;
|
||||||
|
|
||||||
public QSTileBaseView(Context context, QSIconView icon) {
|
public QSTileBaseView(Context context, QSIconView icon) {
|
||||||
|
this(context, icon, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public QSTileBaseView(Context context, QSIconView icon, boolean collapsedView) {
|
||||||
super(context);
|
super(context);
|
||||||
mIcon = icon;
|
mIcon = icon;
|
||||||
addView(mIcon);
|
addView(mIcon);
|
||||||
@@ -51,6 +62,7 @@ public class QSTileBaseView extends LinearLayout {
|
|||||||
setPadding(0, padding, 0, padding);
|
setPadding(0, padding, 0, padding);
|
||||||
setClipChildren(false);
|
setClipChildren(false);
|
||||||
setClipToPadding(false);
|
setClipToPadding(false);
|
||||||
|
mCollapsedView = collapsedView;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable newTileBackground() {
|
private Drawable newTileBackground() {
|
||||||
@@ -116,13 +128,54 @@ public class QSTileBaseView extends LinearLayout {
|
|||||||
|
|
||||||
protected void handleStateChanged(QSTile.State state) {
|
protected void handleStateChanged(QSTile.State state) {
|
||||||
mIcon.setIcon(state);
|
mIcon.setIcon(state);
|
||||||
setContentDescription(state.contentDescription);
|
if (mCollapsedView && !TextUtils.isEmpty(state.minimalContentDescription)) {
|
||||||
|
setContentDescription(state.minimalContentDescription);
|
||||||
|
} else {
|
||||||
|
setContentDescription(state.contentDescription);
|
||||||
|
}
|
||||||
|
if (mCollapsedView) {
|
||||||
|
mAccessibilityClass = state.minimalAccessibilityClassName;
|
||||||
|
} else {
|
||||||
|
mAccessibilityClass = state.expandedAccessibilityClassName;
|
||||||
|
}
|
||||||
|
if (state instanceof QSTile.BooleanState) {
|
||||||
|
mTileState = ((QSTile.BooleanState) state).value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public QSIconView getIcon() {
|
public QSIconView getIcon() {
|
||||||
return mIcon;
|
return mIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
|
||||||
|
super.onInitializeAccessibilityEvent(event);
|
||||||
|
if (!TextUtils.isEmpty(mAccessibilityClass)) {
|
||||||
|
event.setClassName(mAccessibilityClass);
|
||||||
|
if (Switch.class.getName().equals(mAccessibilityClass)) {
|
||||||
|
String label = getResources()
|
||||||
|
.getString(mTileState ? R.string.switch_bar_on : R.string.switch_bar_off);
|
||||||
|
event.setContentDescription(label);
|
||||||
|
event.setChecked(mTileState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||||
|
super.onInitializeAccessibilityNodeInfo(info);
|
||||||
|
if (!TextUtils.isEmpty(mAccessibilityClass)) {
|
||||||
|
info.setClassName(mAccessibilityClass);
|
||||||
|
if (Switch.class.getName().equals(mAccessibilityClass)) {
|
||||||
|
String label = getResources()
|
||||||
|
.getString(mTileState ? R.string.switch_bar_on : R.string.switch_bar_off);
|
||||||
|
info.setText(label);
|
||||||
|
info.setChecked(mTileState);
|
||||||
|
info.setCheckable(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class H extends Handler {
|
private class H extends Handler {
|
||||||
private static final int STATE_CHANGED = 1;
|
private static final int STATE_CHANGED = 1;
|
||||||
public H() {
|
public H() {
|
||||||
|
|||||||
@@ -40,7 +40,11 @@ public class QSTileView extends QSTileBaseView {
|
|||||||
private ImageView mPadLock;
|
private ImageView mPadLock;
|
||||||
|
|
||||||
public QSTileView(Context context, QSIconView icon) {
|
public QSTileView(Context context, QSIconView icon) {
|
||||||
super(context, icon);
|
this(context, icon, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public QSTileView(Context context, QSIconView icon, boolean collapsedView) {
|
||||||
|
super(context, icon, collapsedView);
|
||||||
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
final Resources res = context.getResources();
|
final Resources res = context.getResources();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import android.view.Gravity;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.Space;
|
import android.widget.Space;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.qs.QSTile.SignalState;
|
import com.android.systemui.qs.QSTile.SignalState;
|
||||||
import com.android.systemui.qs.QSTile.State;
|
import com.android.systemui.qs.QSTile.State;
|
||||||
@@ -93,8 +94,8 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected QSTileBaseView createTileView(QSTile<?> tile) {
|
protected QSTileBaseView createTileView(QSTile<?> tile, boolean collapsedView) {
|
||||||
return new QSTileBaseView(mContext, tile.createTileView(mContext));
|
return new QSTileBaseView(mContext, tile.createTileView(mContext), collapsedView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -133,7 +134,7 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.setTiles(quickTiles);
|
super.setTiles(quickTiles, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Tunable mNumTiles = new Tunable() {
|
private final Tunable mNumTiles = new Tunable() {
|
||||||
@@ -150,6 +151,7 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
private static class HeaderTileLayout extends LinearLayout implements QSTileLayout {
|
private static class HeaderTileLayout extends LinearLayout implements QSTileLayout {
|
||||||
|
|
||||||
private final Space mEndSpacer;
|
private final Space mEndSpacer;
|
||||||
|
protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
|
||||||
|
|
||||||
public HeaderTileLayout(Context context) {
|
public HeaderTileLayout(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
@@ -185,6 +187,7 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
// Add a spacer.
|
// Add a spacer.
|
||||||
addView(new Space(mContext), getChildCount() - 1 /* Leave icon at end */,
|
addView(new Space(mContext), getChildCount() - 1 /* Leave icon at end */,
|
||||||
generateSpaceParams());
|
generateSpaceParams());
|
||||||
|
mRecords.add(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LayoutParams generateSpaceParams() {
|
private LayoutParams generateSpaceParams() {
|
||||||
@@ -209,6 +212,7 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
removeViewAt(childIndex);
|
removeViewAt(childIndex);
|
||||||
// Remove its spacer as well.
|
// Remove its spacer as well.
|
||||||
removeViewAt(childIndex);
|
removeViewAt(childIndex);
|
||||||
|
mRecords.remove(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getChildIndex(QSTileBaseView tileView) {
|
private int getChildIndex(QSTileBaseView tileView) {
|
||||||
@@ -236,5 +240,21 @@ public class QuickQSPanel extends QSPanel {
|
|||||||
public boolean hasOverlappingRendering() {
|
public boolean hasOverlappingRendering() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||||
|
if (mRecords != null && mRecords.size() > 0) {
|
||||||
|
View previousView = this;
|
||||||
|
for (TileRecord record : mRecords) {
|
||||||
|
if (record.tileView.getVisibility() == GONE) continue;
|
||||||
|
previousView = record.tileView.updateAccessibilityOrder(previousView);
|
||||||
|
}
|
||||||
|
mRecords.get(0).tileView.setAccessibilityTraversalAfter(
|
||||||
|
R.id.alarm_status_collapsed);
|
||||||
|
mRecords.get(mRecords.size() - 1).tileView.setAccessibilityTraversalBefore(
|
||||||
|
R.id.expand_indicator);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout {
|
|||||||
|
|
||||||
public TileLayout(Context context, AttributeSet attrs) {
|
public TileLayout(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
setFocusableInTouchMode(true);
|
||||||
updateResources();
|
updateResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import android.content.IntentFilter;
|
|||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.provider.Settings.Global;
|
import android.provider.Settings.Global;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -88,13 +89,12 @@ public class AirplaneModeTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.label = mContext.getString(R.string.airplane_mode);
|
state.label = mContext.getString(R.string.airplane_mode);
|
||||||
if (airplaneMode) {
|
if (airplaneMode) {
|
||||||
state.icon = mEnable;
|
state.icon = mEnable;
|
||||||
state.contentDescription = mContext.getString(
|
|
||||||
R.string.accessibility_quick_settings_airplane_on);
|
|
||||||
} else {
|
} else {
|
||||||
state.icon = mDisable;
|
state.icon = mDisable;
|
||||||
state.contentDescription = mContext.getString(
|
|
||||||
R.string.accessibility_quick_settings_airplane_off);
|
|
||||||
}
|
}
|
||||||
|
state.contentDescription = state.label;
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.view.View;
|
|||||||
import android.view.View.OnAttachStateChangeListener;
|
import android.view.View.OnAttachStateChangeListener;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.Checkable;
|
import android.widget.Checkable;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -131,7 +132,13 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll
|
|||||||
};
|
};
|
||||||
state.label = percentage;
|
state.label = percentage;
|
||||||
state.contentDescription = mContext.getString(R.string.accessibility_quick_settings_battery,
|
state.contentDescription = mContext.getString(R.string.accessibility_quick_settings_battery,
|
||||||
percentage);
|
percentage) + "," +
|
||||||
|
(mPowerSave ? mContext.getString(R.string.battery_saver_notification_title)
|
||||||
|
: mCharging ? mContext.getString(R.string.expanded_header_battery_charging)
|
||||||
|
: "")
|
||||||
|
+ "," + mContext.getString(R.string.accessibility_battery_details);
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Button.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import android.provider.Settings;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -107,22 +109,31 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
|
|||||||
final boolean connecting = mController.isBluetoothConnecting();
|
final boolean connecting = mController.isBluetoothConnecting();
|
||||||
state.value = enabled;
|
state.value = enabled;
|
||||||
state.autoMirrorDrawable = false;
|
state.autoMirrorDrawable = false;
|
||||||
|
state.minimalContentDescription =
|
||||||
|
mContext.getString(R.string.accessibility_quick_settings_bluetooth);
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
state.label = null;
|
state.label = null;
|
||||||
if (connected) {
|
if (connected) {
|
||||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connected);
|
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connected);
|
||||||
state.contentDescription = mContext.getString(
|
|
||||||
R.string.accessibility_quick_settings_bluetooth_connected);
|
|
||||||
state.label = mController.getLastDeviceName();
|
state.label = mController.getLastDeviceName();
|
||||||
|
state.contentDescription = mContext.getString(
|
||||||
|
R.string.accessibility_bluetooth_name, state.label);
|
||||||
|
state.minimalContentDescription = state.minimalContentDescription + ","
|
||||||
|
+ state.contentDescription;
|
||||||
} else if (connecting) {
|
} else if (connecting) {
|
||||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connecting);
|
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connecting);
|
||||||
state.contentDescription = mContext.getString(
|
state.contentDescription = mContext.getString(
|
||||||
R.string.accessibility_quick_settings_bluetooth_connecting);
|
R.string.accessibility_quick_settings_bluetooth_connecting);
|
||||||
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
||||||
|
state.minimalContentDescription = state.minimalContentDescription + ","
|
||||||
|
+ state.contentDescription;
|
||||||
} else {
|
} else {
|
||||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_on);
|
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_on);
|
||||||
state.contentDescription = mContext.getString(
|
state.contentDescription = mContext.getString(
|
||||||
R.string.accessibility_quick_settings_bluetooth_on);
|
R.string.accessibility_quick_settings_bluetooth_on) + ","
|
||||||
|
+ mContext.getString(R.string.accessibility_not_connected);
|
||||||
|
state.minimalContentDescription = state.minimalContentDescription + ","
|
||||||
|
+ mContext.getString(R.string.accessibility_not_connected);
|
||||||
}
|
}
|
||||||
if (TextUtils.isEmpty(state.label)) {
|
if (TextUtils.isEmpty(state.label)) {
|
||||||
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
|
||||||
@@ -140,6 +151,10 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
|
|||||||
R.string.accessibility_bluetooth_name, state.label);
|
R.string.accessibility_bluetooth_name, state.label);
|
||||||
}
|
}
|
||||||
state.dualLabelContentDescription = bluetoothName;
|
state.dualLabelContentDescription = bluetoothName;
|
||||||
|
state.contentDescription = state.contentDescription + "," + mContext.getString(
|
||||||
|
R.string.accessibility_quick_settings_open_settings, getTileLabel());
|
||||||
|
state.expandedAccessibilityClassName = Button.class.getName();
|
||||||
|
state.minimalAccessibilityClassName = Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import android.util.Log;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnAttachStateChangeListener;
|
import android.view.View.OnAttachStateChangeListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -115,6 +116,7 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
|
|||||||
@Override
|
@Override
|
||||||
protected void handleUpdateState(BooleanState state, Object arg) {
|
protected void handleUpdateState(BooleanState state, Object arg) {
|
||||||
state.label = mContext.getString(R.string.quick_settings_cast_title);
|
state.label = mContext.getString(R.string.quick_settings_cast_title);
|
||||||
|
state.contentDescription = state.label;
|
||||||
state.value = false;
|
state.value = false;
|
||||||
state.autoMirrorDrawable = false;
|
state.autoMirrorDrawable = false;
|
||||||
final Set<CastDevice> devices = mController.getCastDevices();
|
final Set<CastDevice> devices = mController.getCastDevices();
|
||||||
@@ -123,6 +125,8 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
|
|||||||
if (device.state == CastDevice.STATE_CONNECTED) {
|
if (device.state == CastDevice.STATE_CONNECTED) {
|
||||||
state.value = true;
|
state.value = true;
|
||||||
state.label = getDeviceName(device);
|
state.label = getDeviceName(device);
|
||||||
|
state.contentDescription = state.contentDescription + "," +
|
||||||
|
mContext.getString(R.string.accessibility_cast_name, state.label);
|
||||||
} else if (device.state == CastDevice.STATE_CONNECTING) {
|
} else if (device.state == CastDevice.STATE_CONNECTING) {
|
||||||
connecting = true;
|
connecting = true;
|
||||||
}
|
}
|
||||||
@@ -133,6 +137,10 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_qs_cast_on
|
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_qs_cast_on
|
||||||
: R.drawable.ic_qs_cast_off);
|
: R.drawable.ic_qs_cast_off);
|
||||||
mDetailAdapter.updateItems(devices);
|
mDetailAdapter.updateItems(devices);
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName =
|
||||||
|
Button.class.getName();
|
||||||
|
state.contentDescription = state.contentDescription + ","
|
||||||
|
+ mContext.getString(R.string.accessibility_quick_settings_open_details);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import android.content.res.Resources;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -132,13 +134,28 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
|
|||||||
final String signalContentDesc = cb.enabled && (cb.mobileSignalIconId > 0)
|
final String signalContentDesc = cb.enabled && (cb.mobileSignalIconId > 0)
|
||||||
? cb.signalContentDescription
|
? cb.signalContentDescription
|
||||||
: r.getString(R.string.accessibility_no_signal);
|
: r.getString(R.string.accessibility_no_signal);
|
||||||
final String dataContentDesc = cb.enabled && (cb.dataTypeIconId > 0) && !cb.wifiEnabled
|
|
||||||
? cb.dataContentDescription
|
if (cb.noSim) {
|
||||||
: r.getString(R.string.accessibility_no_data);
|
state.contentDescription = state.label;
|
||||||
state.contentDescription = r.getString(
|
} else {
|
||||||
R.string.accessibility_quick_settings_mobile,
|
String enabledDesc = cb.enabled ? r.getString(R.string.accessibility_cell_data_on)
|
||||||
signalContentDesc, dataContentDesc,
|
: r.getString(R.string.accessibility_cell_data_off);
|
||||||
state.label);
|
|
||||||
|
state.contentDescription = r.getString(
|
||||||
|
R.string.accessibility_quick_settings_mobile,
|
||||||
|
enabledDesc, signalContentDesc,
|
||||||
|
state.label);
|
||||||
|
state.minimalContentDescription = r.getString(
|
||||||
|
R.string.accessibility_quick_settings_mobile,
|
||||||
|
r.getString(R.string.accessibility_cell_data), signalContentDesc,
|
||||||
|
state.label);
|
||||||
|
}
|
||||||
|
state.contentDescription = state.contentDescription + "," + r.getString(
|
||||||
|
R.string.accessibility_quick_settings_open_settings, getTileLabel());
|
||||||
|
state.expandedAccessibilityClassName = Button.class.getName();
|
||||||
|
state.minimalAccessibilityClassName = Switch.class.getName();
|
||||||
|
state.value = mDataController.isMobileDataSupported()
|
||||||
|
&& mDataController.isMobileDataEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -96,6 +97,9 @@ public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.value = enabled;
|
state.value = enabled;
|
||||||
state.label = mContext.getString(R.string.quick_settings_inversion_label);
|
state.label = mContext.getString(R.string.quick_settings_inversion_label);
|
||||||
state.icon = enabled ? mEnable : mDisable;
|
state.icon = enabled ? mEnable : mDisable;
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
|
state.contentDescription = state.label;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles;
|
|||||||
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -96,10 +97,11 @@ public class DataSaverTile extends QSTile<QSTile.BooleanState> implements
|
|||||||
state.value = arg instanceof Boolean ? (Boolean) arg
|
state.value = arg instanceof Boolean ? (Boolean) arg
|
||||||
: mDataSaverController.isDataSaverEnabled();
|
: mDataSaverController.isDataSaverEnabled();
|
||||||
state.label = mContext.getString(R.string.data_saver);
|
state.label = mContext.getString(R.string.data_saver);
|
||||||
state.contentDescription = mContext.getString(state.value
|
state.contentDescription = state.label;
|
||||||
? R.string.accessibility_data_saver_on : R.string.accessibility_data_saver_off);
|
|
||||||
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver
|
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver
|
||||||
: R.drawable.ic_data_saver_off);
|
: R.drawable.ic_data_saver_off);
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnAttachStateChangeListener;
|
import android.view.View.OnAttachStateChangeListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Switch;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
@@ -162,7 +163,7 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.icon = TOTAL_SILENCE.equals(state.icon) ? mDisableTotalSilence : mDisable;
|
state.icon = TOTAL_SILENCE.equals(state.icon) ? mDisableTotalSilence : mDisable;
|
||||||
state.label = mContext.getString(R.string.quick_settings_dnd_label);
|
state.label = mContext.getString(R.string.quick_settings_dnd_label);
|
||||||
state.contentDescription = mContext.getString(
|
state.contentDescription = mContext.getString(
|
||||||
R.string.accessibility_quick_settings_dnd_off);
|
R.string.accessibility_quick_settings_dnd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (mShowingDetail && !state.value) {
|
if (mShowingDetail && !state.value) {
|
||||||
@@ -171,6 +172,8 @@ public class DndTile extends QSTile<QSTile.BooleanState> {
|
|||||||
if (valueChanged) {
|
if (valueChanged) {
|
||||||
fireToggleStateChanged(state.value);
|
fireToggleStateChanged(state.value);
|
||||||
}
|
}
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import android.graphics.drawable.Drawable;
|
|||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.style.ForegroundColorSpan;
|
import android.text.style.ForegroundColorSpan;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -122,10 +124,9 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements
|
|||||||
}
|
}
|
||||||
final AnimationIcon icon = state.value ? mEnable : mDisable;
|
final AnimationIcon icon = state.value ? mEnable : mDisable;
|
||||||
state.icon = icon;
|
state.icon = icon;
|
||||||
int onOrOffId = state.value
|
state.contentDescription = mContext.getString(R.string.quick_settings_flashlight_label);
|
||||||
? R.string.accessibility_quick_settings_flashlight_on
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
: R.string.accessibility_quick_settings_flashlight_off;
|
= Switch.class.getName();
|
||||||
state.contentDescription = mContext.getString(onOrOffId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import android.content.Intent;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -94,6 +96,9 @@ public class HotspotTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.value = mController.isHotspotEnabled();
|
state.value = mController.isHotspotEnabled();
|
||||||
}
|
}
|
||||||
state.icon = state.value ? mEnable : mDisable;
|
state.icon = state.value ? mEnable : mDisable;
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
|
state.contentDescription = state.label;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import android.content.Intent;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -113,6 +115,8 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.contentDescription = mContext.getString(
|
state.contentDescription = mContext.getString(
|
||||||
R.string.accessibility_quick_settings_location_off);
|
R.string.accessibility_quick_settings_location_off);
|
||||||
}
|
}
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import android.content.Intent;
|
|||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -106,10 +108,9 @@ public class RotationLockTile extends QSTile<QSTile.BooleanState> {
|
|||||||
state.label = mContext.getString(R.string.quick_settings_rotation_unlocked_label);
|
state.label = mContext.getString(R.string.quick_settings_rotation_unlocked_label);
|
||||||
state.icon = portrait ? mPortraitToAuto : mLandscapeToAuto;
|
state.icon = portrait ? mPortraitToAuto : mLandscapeToAuto;
|
||||||
}
|
}
|
||||||
state.contentDescription = getAccessibilityString(rotationLocked,
|
state.contentDescription = getAccessibilityString(rotationLocked);
|
||||||
R.string.accessibility_rotation_lock_on_portrait,
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
R.string.accessibility_rotation_lock_on_landscape,
|
= Switch.class.getName();
|
||||||
R.string.accessibility_rotation_lock_off);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCurrentOrientationLockPortrait(RotationLockController controller,
|
public static boolean isCurrentOrientationLockPortrait(RotationLockController controller,
|
||||||
@@ -133,29 +134,25 @@ public class RotationLockTile extends QSTile<QSTile.BooleanState> {
|
|||||||
* Get the correct accessibility string based on the state
|
* Get the correct accessibility string based on the state
|
||||||
*
|
*
|
||||||
* @param locked Whether or not rotation is locked.
|
* @param locked Whether or not rotation is locked.
|
||||||
* @param idWhenPortrait The id which should be used when locked in portrait.
|
|
||||||
* @param idWhenLandscape The id which should be used when locked in landscape.
|
|
||||||
* @param idWhenOff The id which should be used when the rotation lock is off.
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
private String getAccessibilityString(boolean locked, int idWhenPortrait, int idWhenLandscape,
|
private String getAccessibilityString(boolean locked) {
|
||||||
int idWhenOff) {
|
|
||||||
int stringID;
|
|
||||||
if (locked) {
|
if (locked) {
|
||||||
stringID = isCurrentOrientationLockPortrait(mController, mContext) ? idWhenPortrait
|
return mContext.getString(R.string.accessibility_quick_settings_rotation) + ","
|
||||||
: idWhenLandscape;
|
+ mContext.getString(R.string.accessibility_quick_settings_rotation_value,
|
||||||
|
isCurrentOrientationLockPortrait(mController, mContext)
|
||||||
|
? mContext.getString(
|
||||||
|
R.string.quick_settings_rotation_locked_portrait_label)
|
||||||
|
: mContext.getString(
|
||||||
|
R.string.quick_settings_rotation_locked_landscape_label));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
stringID = idWhenOff;
|
return mContext.getString(R.string.accessibility_quick_settings_rotation);
|
||||||
}
|
}
|
||||||
return mContext.getString(stringID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String composeChangeAnnouncement() {
|
protected String composeChangeAnnouncement() {
|
||||||
return getAccessibilityString(mState.value,
|
return getAccessibilityString(mState.value);
|
||||||
R.string.accessibility_rotation_lock_on_portrait_changed,
|
|
||||||
R.string.accessibility_rotation_lock_on_landscape_changed,
|
|
||||||
R.string.accessibility_rotation_lock_off_changed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final RotationLockControllerCallback mCallback = new RotationLockControllerCallback() {
|
private final RotationLockControllerCallback mCallback = new RotationLockControllerCallback() {
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import android.provider.Settings;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
@@ -101,8 +103,8 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
|
|||||||
protected void handleSecondaryClick() {
|
protected void handleSecondaryClick() {
|
||||||
// Secondary clicks are header clicks, just toggle.
|
// Secondary clicks are header clicks, just toggle.
|
||||||
mState.copyTo(mStateBeforeClick);
|
mState.copyTo(mStateBeforeClick);
|
||||||
MetricsLogger.action(mContext, getMetricsCategory(), !mState.enabled);
|
MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
|
||||||
mController.setWifiEnabled(!mState.enabled);
|
mController.setWifiEnabled(!mState.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -111,9 +113,9 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
|
|||||||
mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!mState.enabled) {
|
if (!mState.value) {
|
||||||
mController.setWifiEnabled(true);
|
mController.setWifiEnabled(true);
|
||||||
mState.enabled = true;
|
mState.value = true;
|
||||||
}
|
}
|
||||||
showDetail(true);
|
showDetail(true);
|
||||||
}
|
}
|
||||||
@@ -133,43 +135,58 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
|
|||||||
|
|
||||||
boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null);
|
boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null);
|
||||||
boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.enabledDesc == null);
|
boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.enabledDesc == null);
|
||||||
boolean enabledChanging = state.enabled != cb.enabled;
|
boolean enabledChanging = state.value != cb.enabled;
|
||||||
if (enabledChanging) {
|
if (enabledChanging) {
|
||||||
mDetailAdapter.setItemsVisible(cb.enabled);
|
mDetailAdapter.setItemsVisible(cb.enabled);
|
||||||
fireToggleStateChanged(cb.enabled);
|
fireToggleStateChanged(cb.enabled);
|
||||||
}
|
}
|
||||||
state.enabled = cb.enabled;
|
state.value = cb.enabled;
|
||||||
state.connected = wifiConnected;
|
state.connected = wifiConnected;
|
||||||
state.activityIn = cb.enabled && cb.activityIn;
|
state.activityIn = cb.enabled && cb.activityIn;
|
||||||
state.activityOut = cb.enabled && cb.activityOut;
|
state.activityOut = cb.enabled && cb.activityOut;
|
||||||
state.filter = true;
|
state.filter = true;
|
||||||
final String signalContentDescription;
|
final StringBuffer minimalContentDescription = new StringBuffer();
|
||||||
|
final StringBuffer expandedContentDescription = new StringBuffer();
|
||||||
final Resources r = mContext.getResources();
|
final Resources r = mContext.getResources();
|
||||||
if (!state.enabled) {
|
if (!state.value) {
|
||||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_disabled);
|
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_disabled);
|
||||||
state.label = r.getString(R.string.quick_settings_wifi_label);
|
state.label = r.getString(R.string.quick_settings_wifi_label);
|
||||||
signalContentDescription = r.getString(R.string.accessibility_wifi_off);
|
|
||||||
} else if (wifiConnected) {
|
} else if (wifiConnected) {
|
||||||
state.icon = ResourceIcon.get(cb.wifiSignalIconId);
|
state.icon = ResourceIcon.get(cb.wifiSignalIconId);
|
||||||
state.label = removeDoubleQuotes(cb.enabledDesc);
|
state.label = removeDoubleQuotes(cb.enabledDesc);
|
||||||
signalContentDescription = cb.wifiSignalContentDescription;
|
|
||||||
} else if (wifiNotConnected) {
|
} else if (wifiNotConnected) {
|
||||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_disconnected);
|
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_disconnected);
|
||||||
state.label = r.getString(R.string.quick_settings_wifi_label);
|
state.label = r.getString(R.string.quick_settings_wifi_label);
|
||||||
signalContentDescription = r.getString(R.string.accessibility_no_wifi);
|
|
||||||
} else {
|
} else {
|
||||||
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_no_network);
|
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_no_network);
|
||||||
state.label = r.getString(R.string.quick_settings_wifi_label);
|
state.label = r.getString(R.string.quick_settings_wifi_label);
|
||||||
signalContentDescription = r.getString(R.string.accessibility_wifi_off);
|
|
||||||
}
|
}
|
||||||
state.contentDescription = mContext.getString(
|
minimalContentDescription.append(
|
||||||
R.string.accessibility_quick_settings_wifi,
|
mContext.getString(R.string.quick_settings_wifi_label)).append(",");
|
||||||
signalContentDescription);
|
if (state.value) {
|
||||||
|
expandedContentDescription.append(
|
||||||
|
r.getString(R.string.quick_settings_wifi_on_label)).append(",");
|
||||||
|
if (wifiConnected) {
|
||||||
|
minimalContentDescription.append(cb.wifiSignalContentDescription).append(",");
|
||||||
|
minimalContentDescription.append(removeDoubleQuotes(cb.enabledDesc));
|
||||||
|
expandedContentDescription.append(cb.wifiSignalContentDescription).append(",");
|
||||||
|
expandedContentDescription.append(removeDoubleQuotes(cb.enabledDesc));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
expandedContentDescription.append(
|
||||||
|
r.getString(R.string.quick_settings_wifi_off_label));
|
||||||
|
}
|
||||||
|
state.minimalContentDescription = minimalContentDescription;
|
||||||
|
expandedContentDescription.append(",").append(
|
||||||
|
r.getString(R.string.accessibility_quick_settings_open_settings, getTileLabel()));
|
||||||
|
state.contentDescription = expandedContentDescription;
|
||||||
CharSequence wifiName = state.label;
|
CharSequence wifiName = state.label;
|
||||||
if (state.connected) {
|
if (state.connected) {
|
||||||
wifiName = r.getString(R.string.accessibility_wifi_name, state.label);
|
wifiName = r.getString(R.string.accessibility_wifi_name, state.label);
|
||||||
}
|
}
|
||||||
state.dualLabelContentDescription = wifiName;
|
state.dualLabelContentDescription = wifiName;
|
||||||
|
state.expandedAccessibilityClassName = Button.class.getName();
|
||||||
|
state.minimalAccessibilityClassName = Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -179,12 +196,12 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldAnnouncementBeDelayed() {
|
protected boolean shouldAnnouncementBeDelayed() {
|
||||||
return mStateBeforeClick.enabled == mState.enabled;
|
return mStateBeforeClick.value == mState.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String composeChangeAnnouncement() {
|
protected String composeChangeAnnouncement() {
|
||||||
if (mState.enabled) {
|
if (mState.value) {
|
||||||
return mContext.getString(R.string.accessibility_quick_settings_wifi_changed_on);
|
return mContext.getString(R.string.accessibility_quick_settings_wifi_changed_on);
|
||||||
} else {
|
} else {
|
||||||
return mContext.getString(R.string.accessibility_quick_settings_wifi_changed_off);
|
return mContext.getString(R.string.accessibility_quick_settings_wifi_changed_off);
|
||||||
@@ -263,7 +280,7 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean getToggleState() {
|
public Boolean getToggleState() {
|
||||||
return mState.enabled;
|
return mState.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -291,7 +308,7 @@ public class WifiTile extends QSTile<QSTile.SignalState> {
|
|||||||
mItems.setEmptyState(R.drawable.ic_qs_wifi_detail_empty,
|
mItems.setEmptyState(R.drawable.ic_qs_wifi_detail_empty,
|
||||||
R.string.quick_settings_wifi_detail_empty_text);
|
R.string.quick_settings_wifi_detail_empty_text);
|
||||||
updateItems();
|
updateItems();
|
||||||
setItemsVisible(mState.enabled);
|
setItemsVisible(mState.value);
|
||||||
return mItems;
|
return mItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ package com.android.systemui.qs.tiles;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -104,6 +106,8 @@ public class WorkModeTile extends QSTile<QSTile.BooleanState> implements
|
|||||||
state.contentDescription = mContext.getString(
|
state.contentDescription = mContext.getString(
|
||||||
R.string.accessibility_quick_settings_work_mode_off);
|
R.string.accessibility_quick_settings_work_mode_off);
|
||||||
}
|
}
|
||||||
|
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
|
||||||
|
= Switch.class.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public class ExpandableIndicator extends ImageView {
|
|||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
final int res = getDrawableResourceId(mExpanded);
|
final int res = getDrawableResourceId(mExpanded);
|
||||||
setImageResource(res);
|
setImageResource(res);
|
||||||
|
setContentDescription(getContentDescription(mExpanded));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExpanded(boolean expanded) {
|
public void setExpanded(boolean expanded) {
|
||||||
@@ -46,6 +47,7 @@ public class ExpandableIndicator extends ImageView {
|
|||||||
setImageDrawable(avd);
|
setImageDrawable(avd);
|
||||||
avd.forceAnimationOnUI();
|
avd.forceAnimationOnUI();
|
||||||
avd.start();
|
avd.start();
|
||||||
|
setContentDescription(getContentDescription(expanded));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Whether the icons are using the default direction or the opposite */
|
/** Whether the icons are using the default direction or the opposite */
|
||||||
@@ -62,4 +64,9 @@ public class ExpandableIndicator extends ImageView {
|
|||||||
: R.drawable.ic_volume_collapse_animation;
|
: R.drawable.ic_volume_collapse_animation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getContentDescription(boolean expanded) {
|
||||||
|
return expanded ? mContext.getString(R.string.accessibility_quick_settings_collapse)
|
||||||
|
: mContext.getString(R.string.accessibility_quick_settings_expand);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ import android.text.TextUtils;
|
|||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -150,24 +153,11 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
String text = null;
|
String text = null;
|
||||||
if (isClickable()) {
|
|
||||||
if (mUserManager.isUserSwitcherEnabled()) {
|
if (!TextUtils.isEmpty(currentUser)) {
|
||||||
if (TextUtils.isEmpty(currentUser)) {
|
text = mContext.getString(
|
||||||
text = mContext.getString(R.string.accessibility_multi_user_switch_switcher);
|
R.string.accessibility_quick_settings_user,
|
||||||
} else {
|
currentUser);
|
||||||
text = mContext.getString(
|
|
||||||
R.string.accessibility_multi_user_switch_switcher_with_current,
|
|
||||||
currentUser);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
text = mContext.getString(R.string.accessibility_multi_user_switch_quick_contact);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!TextUtils.isEmpty(currentUser)) {
|
|
||||||
text = mContext.getString(
|
|
||||||
R.string.accessibility_multi_user_switch_inactive,
|
|
||||||
currentUser);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!TextUtils.equals(getContentDescription(), text)) {
|
if (!TextUtils.equals(getContentDescription(), text)) {
|
||||||
@@ -175,6 +165,18 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
|
||||||
|
super.onInitializeAccessibilityEvent(event);
|
||||||
|
event.setClassName(Button.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||||
|
super.onInitializeAccessibilityNodeInfo(info);
|
||||||
|
info.setClassName(Button.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasOverlappingRendering() {
|
public boolean hasOverlappingRendering() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -224,7 +224,12 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
|
|||||||
public void onNextAlarmChanged(AlarmManager.AlarmClockInfo nextAlarm) {
|
public void onNextAlarmChanged(AlarmManager.AlarmClockInfo nextAlarm) {
|
||||||
mNextAlarm = nextAlarm;
|
mNextAlarm = nextAlarm;
|
||||||
if (nextAlarm != null) {
|
if (nextAlarm != null) {
|
||||||
mAlarmStatus.setText(KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm));
|
String alarmString = KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm);
|
||||||
|
mAlarmStatus.setText(alarmString);
|
||||||
|
mAlarmStatus.setContentDescription(mContext.getString(
|
||||||
|
R.string.accessibility_quick_settings_alarm, alarmString));
|
||||||
|
mAlarmStatusCollapsed.setContentDescription(mContext.getString(
|
||||||
|
R.string.accessibility_quick_settings_alarm, alarmString));
|
||||||
}
|
}
|
||||||
if (mAlarmShowing != (nextAlarm != null)) {
|
if (mAlarmShowing != (nextAlarm != null)) {
|
||||||
mAlarmShowing = nextAlarm != null;
|
mAlarmShowing = nextAlarm != null;
|
||||||
@@ -281,6 +286,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
|
|||||||
public void updateEverything() {
|
public void updateEverything() {
|
||||||
updateDateTimePosition();
|
updateDateTimePosition();
|
||||||
updateVisibilities();
|
updateVisibilities();
|
||||||
|
setClickable(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateVisibilities() {
|
protected void updateVisibilities() {
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ import com.android.settingslib.wifi.WifiStatusTracker;
|
|||||||
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
||||||
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
|
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
|
||||||
|
|
||||||
|
import com.android.systemui.R;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
||||||
@@ -80,6 +82,10 @@ public class WifiSignalController extends
|
|||||||
String wifiDesc = wifiVisible ? mCurrentState.ssid : null;
|
String wifiDesc = wifiVisible ? mCurrentState.ssid : null;
|
||||||
boolean ssidPresent = wifiVisible && mCurrentState.ssid != null;
|
boolean ssidPresent = wifiVisible && mCurrentState.ssid != null;
|
||||||
String contentDescription = getStringIfExists(getContentDescription());
|
String contentDescription = getStringIfExists(getContentDescription());
|
||||||
|
if (mCurrentState.inetCondition == 0) {
|
||||||
|
contentDescription +=
|
||||||
|
("," + mContext.getString(R.string.accessibility_quick_settings_no_internet));
|
||||||
|
}
|
||||||
|
|
||||||
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(), contentDescription);
|
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(), contentDescription);
|
||||||
IconState qsIcon = new IconState(mCurrentState.connected, getQsCurrentIconId(),
|
IconState qsIcon = new IconState(mCurrentState.connected, getQsCurrentIconId(),
|
||||||
|
|||||||
Reference in New Issue
Block a user