From 3b1ab6136d3427f456c6a911127883dfa242a6c4 Mon Sep 17 00:00:00 2001 From: Peter_Liang Date: Thu, 27 May 2021 22:53:57 +0800 Subject: [PATCH] Fix the position of a11y floating menu was not centered when switching the size under half oval type. Solution: Adjust the compute related to the center point of the menu. Extra action: Fine-tune layout parameters by new resource value to meet UX style. Bug: 189448323 Test: atest AccessibilityFloatingMenuViewTest AccessibilityTargetAdapterTest Change-Id: I096931ed7d232877805ebca372ad370a58028abc --- .../accessibility_floating_menu_item.xml | 9 ++---- packages/SystemUI/res/values/dimens.xml | 7 +++-- .../AccessibilityFloatingMenuView.java | 30 +++++++++++++++---- .../AccessibilityTargetAdapter.java | 28 ++++++++++++----- .../AccessibilityFloatingMenuViewTest.java | 2 +- 5 files changed, 51 insertions(+), 25 deletions(-) diff --git a/packages/SystemUI/res/layout/accessibility_floating_menu_item.xml b/packages/SystemUI/res/layout/accessibility_floating_menu_item.xml index f7357b27af5f0..2067f85249a24 100644 --- a/packages/SystemUI/res/layout/accessibility_floating_menu_item.xml +++ b/packages/SystemUI/res/layout/accessibility_floating_menu_item.xml @@ -19,8 +19,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingStart="@dimen/accessibility_floating_menu_padding" - android:paddingEnd="@dimen/accessibility_floating_menu_padding" + android:paddingStart="@dimen/accessibility_floating_menu_small_padding" + android:paddingEnd="@dimen/accessibility_floating_menu_small_padding" android:orientation="vertical" android:gravity="center"> @@ -29,9 +29,4 @@ android:layout_width="@dimen/accessibility_floating_menu_small_width_height" android:layout_height="@dimen/accessibility_floating_menu_small_width_height"/> - - \ No newline at end of file diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 24eac1593195d..a5bf7945f1d7d 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1465,16 +1465,17 @@ 4dp - 5dp + 3dp 1dp -2dp 16dp - 6dp + 6dp 36dp 25dp 20dp + 8dp 56dp - 33dp + 35dp 35dp 8dp diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java index e85bd885c88a6..77273ca92ef16 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java @@ -409,11 +409,13 @@ public class AccessibilityFloatingMenuView extends FrameLayout mSizeType = newSizeType; - updateIconSizeWith(newSizeType); + updateItemViewWith(newSizeType); updateRadiusWith(newSizeType, mRadiusType, mTargets.size()); // When the icon sized changed, the menu size and location will be impacted. updateLocationWith(mAlignment, mPercentageY); + updateScrollModeWith(hasExceededMaxLayoutHeight()); + updateOffsetWith(mShapeType, mAlignment); setSystemGestureExclusion(); fadeOut(); @@ -601,24 +603,35 @@ public class AccessibilityFloatingMenuView extends FrameLayout mScreenHeight = dm.heightPixels; mMargin = res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_margin); - mPadding = - res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_padding); mInset = res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_stroke_inset); mSquareScaledTouchSlop = sq(ViewConfiguration.get(getContext()).getScaledTouchSlop()); + + updateItemViewDimensionsWith(mSizeType); } - private void updateIconSizeWith(@SizeType int sizeType) { + private void updateItemViewDimensionsWith(@SizeType int sizeType) { final Resources res = getResources(); + final int paddingResId = + sizeType == SizeType.SMALL + ? R.dimen.accessibility_floating_menu_small_padding + : R.dimen.accessibility_floating_menu_large_padding; + mPadding = res.getDimensionPixelSize(paddingResId); + final int iconResId = sizeType == SizeType.SMALL ? R.dimen.accessibility_floating_menu_small_width_height : R.dimen.accessibility_floating_menu_large_width_height; mIconWidth = res.getDimensionPixelSize(iconResId); mIconHeight = mIconWidth; + } + private void updateItemViewWith(@SizeType int sizeType) { + updateItemViewDimensionsWith(sizeType); + + mAdapter.setItemPadding(mPadding); mAdapter.setIconWidthHeight(mIconWidth); mAdapter.notifyDataSetChanged(); } @@ -630,7 +643,6 @@ public class AccessibilityFloatingMenuView extends FrameLayout final LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - layoutParams.setMargins(mMargin, mMargin, mMargin, mMargin); mListView.setLayoutParams(layoutParams); final InstantInsetLayerDrawable layerDrawable = new InstantInsetLayerDrawable(new Drawable[]{background}); @@ -645,6 +657,10 @@ public class AccessibilityFloatingMenuView extends FrameLayout } private void updateListView() { + final LayoutParams layoutParams = (FrameLayout.LayoutParams) mListView.getLayoutParams(); + layoutParams.setMargins(mMargin, mMargin, mMargin, mMargin); + mListView.setLayoutParams(layoutParams); + final int elevation = getResources().getDimensionPixelSize(R.dimen.accessibility_floating_menu_elevation); mListView.setElevation(elevation); @@ -676,11 +692,13 @@ public class AccessibilityFloatingMenuView extends FrameLayout updateDimensions(); updateListView(); - updateIconSizeWith(mSizeType); + updateItemViewWith(mSizeType); updateColor(); updateStrokeWith(newConfig.uiMode, mAlignment); updateLocationWith(mAlignment, mPercentageY); + updateRadiusWith(mSizeType, mRadiusType, mTargets.size()); updateScrollModeWith(hasExceededMaxLayoutHeight()); + setSystemGestureExclusion(); mLastConfiguration.setTo(newConfig); } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java index 76106e7c2cf1f..63cfd5123c969 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityTargetAdapter.java @@ -16,8 +16,6 @@ package com.android.systemui.accessibility.floatingmenu; -import static android.view.View.GONE; - import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -43,6 +41,7 @@ import java.util.List; */ public class AccessibilityTargetAdapter extends Adapter { private int mIconWidthHeight; + private int mItemPadding; private final List mTargets; @IntDef({ @@ -84,6 +83,7 @@ public class AccessibilityTargetAdapter extends Adapter { final AccessibilityTarget target = mTargets.get(position); holder.mIconView.setBackground(target.getIcon()); holder.updateIconWidthHeight(mIconWidthHeight); + holder.updateItemPadding(mItemPadding, getItemCount()); holder.itemView.setOnClickListener((v) -> target.onSelected()); holder.itemView.setStateDescription(target.getStateDescription()); holder.itemView.setContentDescription(target.getLabel()); @@ -120,14 +120,16 @@ public class AccessibilityTargetAdapter extends Adapter { mIconWidthHeight = iconWidthHeight; } + public void setItemPadding(int itemPadding) { + mItemPadding = itemPadding; + } + static class ViewHolder extends RecyclerView.ViewHolder { final View mIconView; - final View mDivider; ViewHolder(View itemView) { super(itemView); mIconView = itemView.findViewById(R.id.icon_view); - mDivider = itemView.findViewById(R.id.transparent_divider); } void updateIconWidthHeight(int newValue) { @@ -139,21 +141,31 @@ public class AccessibilityTargetAdapter extends Adapter { layoutParams.height = newValue; mIconView.setLayoutParams(layoutParams); } + + void updateItemPadding(int padding, int size) { + itemView.setPaddingRelative(padding, padding, padding, padding); + } } static class TopViewHolder extends ViewHolder { TopViewHolder(View itemView) { super(itemView); - final int padding = itemView.getPaddingStart(); - itemView.setPaddingRelative(padding, padding, padding, 0); + } + + @Override + void updateItemPadding(int padding, int size) { + final int paddingBottom = size <= 2 ? padding : 0; + itemView.setPaddingRelative(padding, padding, padding, paddingBottom); } } static class BottomViewHolder extends ViewHolder { BottomViewHolder(View itemView) { super(itemView); - mDivider.setVisibility(GONE); - final int padding = itemView.getPaddingStart(); + } + + @Override + void updateItemPadding(int padding, int size) { itemView.setPaddingRelative(padding, 0, padding, padding); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java index 0de257ad424b5..b166e171f0cb6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java @@ -111,7 +111,7 @@ public class AccessibilityFloatingMenuViewTest extends SysuiTestCase { final int margin = res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_margin); final int padding = - res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_padding); + res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_small_padding); final int iconWidthHeight = res.getDimensionPixelSize(R.dimen.accessibility_floating_menu_small_width_height); final int menuWidth = padding * 2 + iconWidthHeight;