summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Amin Shaikh <ashaikh@google.com> 2018-05-02 13:02:57 -0400
committer Amin Shaikh <ashaikh@google.com> 2018-05-02 15:11:36 -0400
commit9b65ea39fff44ff14ff4feed11c89f77352f024d (patch)
tree83420517a8410b2427b9a2e8133a52a01de9e9e7
parent90f197efe50464202c3f357f17c96cc885c81a15 (diff)
Fix QS edit accessibility.
- Announce the correct QS tile positions when moving/adding tiles. - Only insert a placeholder tile when adding tiles. - Ensure all tiles are draggable, even if they are currently unavailable. - Fix off by one error adding tiles into the last position. - Remove tile remove a11y announcement as it is unnecessary. Change-Id: Ia0bc1cb1559c2e46f9ddfe0f3ba0f50d5de56868 Fixes: 78608195 Fixes: 78611593 Fixes: 74253408 Test: manual
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java62
1 files changed, 34 insertions, 28 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
index 441d29bffe3a..5adeec3cbab4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
@@ -67,6 +67,10 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
private static final long EDIT_ID = 10000;
private static final long DIVIDER_ID = 20000;
+ private static final int ACTION_NONE = 0;
+ private static final int ACTION_ADD = 1;
+ private static final int ACTION_MOVE = 2;
+
private final Context mContext;
private final Handler mHandler = new Handler();
@@ -82,7 +86,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
private List<TileInfo> mAllTiles;
private Holder mCurrentDrag;
- private boolean mAccessibilityMoving;
+ private int mAccessibilityAction = ACTION_NONE;
private int mAccessibilityFromIndex;
private QSTileHost mHost;
@@ -172,7 +176,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
@Override
public int getItemViewType(int position) {
- if (mAccessibilityMoving && position == mEditIndex - 1) {
+ if (mAccessibilityAction == ACTION_ADD && position == mEditIndex - 1) {
return TYPE_ACCESSIBLE_DROP;
}
if (position == mTileDividerIndex) {
@@ -266,18 +270,18 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
if (position > mEditIndex) {
info.state.contentDescription = mContext.getString(
R.string.accessibility_qs_edit_add_tile_label, info.state.label);
- } else if (mAccessibilityMoving) {
+ } else if (mAccessibilityAction != ACTION_NONE) {
info.state.contentDescription = mContext.getString(
R.string.accessibility_qs_edit_position_label, position + 1);
} else {
info.state.contentDescription = mContext.getString(
R.string.accessibility_qs_edit_tile_label, position + 1, info.state.label);
}
- holder.mTileView.onStateChanged(info.state);
+ holder.mTileView.handleStateChanged(info.state);
holder.mTileView.setShowAppLabel(position > mEditIndex && !info.isSystem);
if (mAccessibilityManager.isTouchExplorationEnabled()) {
- final boolean selectable = !mAccessibilityMoving || position < mEditIndex;
+ final boolean selectable = mAccessibilityAction == ACTION_NONE || position < mEditIndex;
holder.mTileView.setClickable(selectable);
holder.mTileView.setFocusable(selectable);
holder.mTileView.setImportantForAccessibility(selectable
@@ -288,13 +292,13 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
- if (mAccessibilityMoving) {
+ if (mAccessibilityAction != ACTION_NONE) {
selectPosition(position, v);
} else {
if (position < mEditIndex && canRemoveTiles()) {
showAccessibilityDialog(position, v);
} else {
- startAccessibleDrag(position);
+ startAccessibleAdd(position);
}
}
}
@@ -302,21 +306,21 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
}
}
}
-
+
private boolean canRemoveTiles() {
return mCurrentSpecs.size() > MIN_NUM_TILES;
}
private void selectPosition(int position, View v) {
- // Remove the placeholder.
- mAccessibilityMoving = false;
- mTiles.remove(mEditIndex--);
- notifyItemRemoved(mEditIndex - 1);
- // Don't remove items when the last position is selected.
- if (position == mEditIndex) position--;
-
+ if (mAccessibilityAction == ACTION_ADD) {
+ // Remove the placeholder.
+ mTiles.remove(mEditIndex--);
+ notifyItemRemoved(mEditIndex);
+ // Don't remove items when the last position is selected.
+ if (position == mEditIndex - 1) position--;
+ }
+ mAccessibilityAction = ACTION_NONE;
move(mAccessibilityFromIndex, position, v);
-
notifyDataSetChanged();
}
@@ -331,7 +335,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
- startAccessibleDrag(position);
+ startAccessibleMove(position);
} else {
move(position, info.isSystem ? mEditIndex : mTileDividerIndex, v);
notifyItemChanged(mTileDividerIndex);
@@ -345,12 +349,18 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
dialog.show();
}
- private void startAccessibleDrag(int position) {
- mAccessibilityMoving = true;
- mNeedsFocus = true;
+ private void startAccessibleAdd(int position) {
mAccessibilityFromIndex = position;
+ mAccessibilityAction = ACTION_ADD;
// Add placeholder for last slot.
mTiles.add(mEditIndex++, null);
+ mNeedsFocus = true;
+ notifyDataSetChanged();
+ }
+
+ private void startAccessibleMove(int position) {
+ mAccessibilityFromIndex = position;
+ mAccessibilityAction = ACTION_MOVE;
notifyDataSetChanged();
}
@@ -365,30 +375,26 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
CharSequence fromLabel = mTiles.get(from).state.label;
move(from, to, mTiles);
updateDividerLocations();
- CharSequence announcement;
if (to >= mEditIndex) {
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_REMOVE_SPEC,
strip(mTiles.get(to)));
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_REMOVE,
from);
- announcement = mContext.getString(R.string.accessibility_qs_edit_tile_removed,
- fromLabel);
} else if (from >= mEditIndex) {
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_ADD_SPEC,
strip(mTiles.get(to)));
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_ADD,
to);
- announcement = mContext.getString(R.string.accessibility_qs_edit_tile_added,
- fromLabel, (to + 1));
+ v.announceForAccessibility(mContext.getString(R.string.accessibility_qs_edit_tile_added,
+ fromLabel, (to + 1)));
} else {
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_MOVE_SPEC,
strip(mTiles.get(to)));
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_MOVE,
to);
- announcement = mContext.getString(R.string.accessibility_qs_edit_tile_moved,
- fromLabel, (to + 1));
+ v.announceForAccessibility(mContext.getString(R.string.accessibility_qs_edit_tile_moved,
+ fromLabel, (to + 1)));
}
- v.announceForAccessibility(announcement);
saveSpecs(mHost);
return true;
}