Merge "Sharesheet/Resolver a11y adjustments" into rvc-dev am: 2f16758a0a am: 822d405bfc am: d0df94ac26
Change-Id: I642fb1d8383aaf486749b4a3cde64fb77e10ee46
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.internal.app;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import com.android.internal.widget.GridLayoutManager;
|
||||
import com.android.internal.widget.RecyclerView;
|
||||
|
||||
/**
|
||||
* For a11y and per {@link RecyclerView#onInitializeAccessibilityNodeInfo}, override
|
||||
* methods to ensure proper row counts.
|
||||
*/
|
||||
public class ChooserGridLayoutManager extends GridLayoutManager {
|
||||
|
||||
/**
|
||||
* Constructor used when layout manager is set in XML by RecyclerView attribute
|
||||
* "layoutManager". If spanCount is not specified in the XML, it defaults to a
|
||||
* single column.
|
||||
*
|
||||
*/
|
||||
public ChooserGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,
|
||||
int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a vertical GridLayoutManager
|
||||
*
|
||||
* @param context Current context, will be used to access resources.
|
||||
* @param spanCount The number of columns in the grid
|
||||
*/
|
||||
public ChooserGridLayoutManager(Context context, int spanCount) {
|
||||
super(context, spanCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context Current context, will be used to access resources.
|
||||
* @param spanCount The number of columns or rows in the grid
|
||||
* @param orientation Layout orientation. Should be {@link #HORIZONTAL} or {@link
|
||||
* #VERTICAL}.
|
||||
* @param reverseLayout When set to true, layouts from end to start.
|
||||
*/
|
||||
public ChooserGridLayoutManager(Context context, int spanCount, int orientation,
|
||||
boolean reverseLayout) {
|
||||
super(context, spanCount, orientation, reverseLayout);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRowCountForAccessibility(RecyclerView.Recycler recycler,
|
||||
RecyclerView.State state) {
|
||||
// Do not count the footer view in the official count
|
||||
return super.getRowCountForAccessibility(recycler, state) - 1;
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,7 @@ import com.android.internal.R;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
|
||||
import com.android.internal.app.chooser.DisplayResolveInfo;
|
||||
import com.android.internal.app.chooser.SelectableTargetInfo;
|
||||
import com.android.internal.app.chooser.TargetInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -549,6 +550,15 @@ public class ResolverListAdapter extends BaseAdapter {
|
||||
getLoadLabelTask((DisplayResolveInfo) info, holder).execute();
|
||||
} else {
|
||||
holder.bindLabel(info.getDisplayLabel(), info.getExtendedInfo());
|
||||
if (info instanceof SelectableTargetInfo) {
|
||||
// direct share targets should append the application name for a better readout
|
||||
DisplayResolveInfo rInfo = ((SelectableTargetInfo) info).getDisplayResolveInfo();
|
||||
CharSequence appName = rInfo != null ? rInfo.getDisplayLabel() : "";
|
||||
CharSequence extendedInfo = info.getExtendedInfo();
|
||||
String contentDescription = String.join(" ", info.getDisplayLabel(),
|
||||
extendedInfo != null ? extendedInfo : "", appName);
|
||||
holder.updateContentDescription(contentDescription);
|
||||
}
|
||||
}
|
||||
|
||||
if (info.isSuspended()) {
|
||||
@@ -697,6 +707,12 @@ public class ResolverListAdapter extends BaseAdapter {
|
||||
text2.setVisibility(View.VISIBLE);
|
||||
text2.setText(subLabel);
|
||||
}
|
||||
|
||||
itemView.setContentDescription(null);
|
||||
}
|
||||
|
||||
public void updateContentDescription(String description) {
|
||||
itemView.setContentDescription(description);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,6 @@ import com.android.internal.app.ResolverListAdapter.ActivityInfoPresentationGett
|
||||
import com.android.internal.app.SimpleIconFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -136,6 +135,10 @@ public final class SelectableTargetInfo implements ChooserTargetInfo {
|
||||
return mIsSuspended;
|
||||
}
|
||||
|
||||
public DisplayResolveInfo getDisplayResolveInfo() {
|
||||
return mSourceInfo;
|
||||
}
|
||||
|
||||
private Drawable getChooserTargetIconDrawable(ChooserTarget target,
|
||||
@Nullable ShortcutInfo shortcutInfo) {
|
||||
Drawable directShareIcon = null;
|
||||
|
||||
@@ -153,13 +153,11 @@ public class GridLayoutManager extends LinearLayoutManager {
|
||||
if (mOrientation == HORIZONTAL) {
|
||||
info.setCollectionItemInfo(AccessibilityNodeInfo.CollectionItemInfo.obtain(
|
||||
glp.getSpanIndex(), glp.getSpanSize(),
|
||||
spanGroupIndex, 1,
|
||||
mSpanCount > 1 && glp.getSpanSize() == mSpanCount, false));
|
||||
spanGroupIndex, 1, false, false));
|
||||
} else { // VERTICAL
|
||||
info.setCollectionItemInfo(AccessibilityNodeInfo.CollectionItemInfo.obtain(
|
||||
spanGroupIndex, 1,
|
||||
glp.getSpanIndex(), glp.getSpanSize(),
|
||||
mSpanCount > 1 && glp.getSpanSize() == mSpanCount, false));
|
||||
glp.getSpanIndex(), glp.getSpanSize(), false, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -825,18 +825,6 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD:
|
||||
case R.id.accessibilityActionScrollUp:
|
||||
if (mCollapseOffset < mCollapsibleHeight) {
|
||||
smoothScrollTo(mCollapsibleHeight, 0);
|
||||
return true;
|
||||
} else if ((mCollapseOffset < mCollapsibleHeight + mUncollapsibleHeight)
|
||||
&& isDismissable()) {
|
||||
smoothScrollTo(mCollapsibleHeight + mUncollapsibleHeight, 0);
|
||||
mDismissOnScrollerFinished = true;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case AccessibilityNodeInfo.ACTION_COLLAPSE:
|
||||
if (mCollapseOffset < mCollapsibleHeight) {
|
||||
smoothScrollTo(mCollapsibleHeight, 0);
|
||||
@@ -886,7 +874,6 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
}
|
||||
if ((mCollapseOffset < mCollapsibleHeight + mUncollapsibleHeight)
|
||||
&& ((mCollapseOffset < mCollapsibleHeight) || isDismissable())) {
|
||||
info.addAction(AccessibilityAction.ACTION_SCROLL_BACKWARD);
|
||||
info.addAction(AccessibilityAction.ACTION_SCROLL_UP);
|
||||
info.setScrollable(true);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<com.android.internal.widget.RecyclerView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layoutManager="com.android.internal.widget.GridLayoutManager"
|
||||
android:layoutManager="com.android.internal.app.ChooserGridLayoutManager"
|
||||
android:id="@+id/resolver_list"
|
||||
android:clipToPadding="false"
|
||||
android:background="?attr/colorBackgroundFloating"
|
||||
@@ -29,4 +29,4 @@
|
||||
android:nestedScrollingEnabled="true" />
|
||||
|
||||
<include layout="@layout/resolver_empty_states" />
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:accessibilityTraversalAfter="@id/title"
|
||||
android:background="?attr/colorBackgroundFloating">
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
|
||||
Reference in New Issue
Block a user