Loading core/java/com/android/internal/app/ChooserGridLayoutManager.java 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * 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; } } core/java/com/android/internal/app/ResolverListAdapter.java +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading Loading @@ -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); } } Loading core/java/com/android/internal/app/chooser/SelectableTargetInfo.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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; Loading core/java/com/android/internal/widget/GridLayoutManager.java +2 −4 Original line number Diff line number Diff line Loading @@ -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)); } } Loading core/java/com/android/internal/widget/ResolverDrawerLayout.java +0 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); } Loading Loading
core/java/com/android/internal/app/ChooserGridLayoutManager.java 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * 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; } }
core/java/com/android/internal/app/ResolverListAdapter.java +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading Loading @@ -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); } } Loading
core/java/com/android/internal/app/chooser/SelectableTargetInfo.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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; Loading
core/java/com/android/internal/widget/GridLayoutManager.java +2 −4 Original line number Diff line number Diff line Loading @@ -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)); } } Loading
core/java/com/android/internal/widget/ResolverDrawerLayout.java +0 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); } Loading