QS Talkback bug fixes

Fixes a couple of Talkback bugs in QSCustomizer:
* List scrolling
* Focusing on correct element when "move" is selected.
* No reading "double tap and hold for long press".

Also, Dark Mode tile made a switch

Fixes: 145259342
Fixes: 145257223
Test: manual using TB
Change-Id: I782dad4e1a411972c40e37abc31eabb3fd1f8ea2
This commit is contained in:
Fabian Kozynski
2019-12-02 09:52:00 -05:00
parent bbe62f41ab
commit 6f5e82d9fc
5 changed files with 31 additions and 2 deletions

View File

@@ -52,7 +52,7 @@
android:scrollIndicators="top"
android:scrollbars="vertical"
android:scrollbarStyle="outsideOverlay"
android:importantForAccessibility="no" />
android:importantForAccessibility="auto" />
</com.android.keyguard.AlphaOptimizedLinearLayout>
<View

View File

@@ -49,4 +49,9 @@ public class CustomizeTileView extends QSTileView {
protected boolean animationsEnabled() {
return false;
}
@Override
public boolean isLongClickable() {
return false;
}
}

View File

@@ -32,6 +32,7 @@ import android.widget.LinearLayout;
import android.widget.Toolbar;
import android.widget.Toolbar.OnMenuItemClickListener;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -118,7 +119,13 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
mTileQueryHelper.setListener(mTileAdapter);
mRecyclerView.setAdapter(mTileAdapter);
mTileAdapter.getItemTouchHelper().attachToRecyclerView(mRecyclerView);
GridLayoutManager layout = new GridLayoutManager(getContext(), 3);
GridLayoutManager layout = new GridLayoutManager(getContext(), 3) {
@Override
public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler,
RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) {
// Do not read row and column every time it changes.
}
};
layout.setSpanSizeLookup(mTileAdapter.getSizeLookup());
mRecyclerView.setLayoutManager(layout);
mRecyclerView.addItemDecoration(mTileAdapter.getItemDecoration());

View File

@@ -238,9 +238,21 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
return true;
}
private void setSelectableForHeaders(View view) {
if (mAccessibilityManager.isTouchExplorationEnabled()) {
final boolean selectable = mAccessibilityAction == ACTION_NONE;
view.setFocusable(selectable);
view.setImportantForAccessibility(selectable
? View.IMPORTANT_FOR_ACCESSIBILITY_YES
: View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
view.setFocusableInTouchMode(selectable);
}
}
@Override
public void onBindViewHolder(final Holder holder, int position) {
if (holder.getItemViewType() == TYPE_HEADER) {
setSelectableForHeaders(holder.itemView);
return;
}
if (holder.getItemViewType() == TYPE_DIVIDER) {
@@ -260,6 +272,8 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
}
((TextView) holder.itemView.findViewById(android.R.id.title)).setText(titleText);
setSelectableForHeaders(holder.itemView);
return;
}
if (holder.getItemViewType() == TYPE_ACCESSIBLE_DROP) {
@@ -306,6 +320,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
holder.mTileView.setImportantForAccessibility(selectable
? View.IMPORTANT_FOR_ACCESSIBILITY_YES
: View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
holder.mTileView.setFocusableInTouchMode(selectable);
if (selectable) {
holder.mTileView.setOnClickListener(new OnClickListener() {
@Override

View File

@@ -22,6 +22,7 @@ import android.content.res.Configuration;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.text.TextUtils;
import android.widget.Switch;
import com.android.internal.logging.nano.MetricsProto;
import com.android.systemui.R;
@@ -112,6 +113,7 @@ public class UiModeNightTile extends QSTileImpl<QSTile.BooleanState> implements
state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
state.showRippleEffect = false;
state.expandedAccessibilityClassName = Switch.class.getName();
}
@Override