Merge "Fix the position of a11y floating menu was not centered when switching the size under half oval type." into sc-dev
diff --git a/packages/SystemUI/res/layout/accessibility_floating_menu_item.xml b/packages/SystemUI/res/layout/accessibility_floating_menu_item.xml
index f7357b2..2067f85 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"/>
 
-    <View
-        android:id="@+id/transparent_divider"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/accessibility_floating_menu_padding"/>
-
 </LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index c0ebff6..0be648f 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1468,16 +1468,17 @@
     <dimen name="medium_content_padding_above_name">4dp</dimen>
 
     <!-- Accessibility floating menu -->
-    <dimen name="accessibility_floating_menu_elevation">5dp</dimen>
+    <dimen name="accessibility_floating_menu_elevation">3dp</dimen>
     <dimen name="accessibility_floating_menu_stroke_width">1dp</dimen>
     <dimen name="accessibility_floating_menu_stroke_inset">-2dp</dimen>
     <dimen name="accessibility_floating_menu_margin">16dp</dimen>
-    <dimen name="accessibility_floating_menu_padding">6dp</dimen>
+    <dimen name="accessibility_floating_menu_small_padding">6dp</dimen>
     <dimen name="accessibility_floating_menu_small_width_height">36dp</dimen>
     <dimen name="accessibility_floating_menu_small_single_radius">25dp</dimen>
     <dimen name="accessibility_floating_menu_small_multiple_radius">20dp</dimen>
+    <dimen name="accessibility_floating_menu_large_padding">8dp</dimen>
     <dimen name="accessibility_floating_menu_large_width_height">56dp</dimen>
-    <dimen name="accessibility_floating_menu_large_single_radius">33dp</dimen>
+    <dimen name="accessibility_floating_menu_large_single_radius">35dp</dimen>
     <dimen name="accessibility_floating_menu_large_multiple_radius">35dp</dimen>
 
     <dimen name="accessibility_floating_tooltip_arrow_width">8dp</dimen>
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 86a37ec..259a9f7 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java
@@ -419,11 +419,13 @@
 
         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();
@@ -621,24 +623,35 @@
         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();
     }
@@ -650,7 +663,6 @@
         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});
@@ -665,6 +677,10 @@
     }
 
     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);
@@ -697,11 +713,13 @@
 
         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 76106e7..63cfd51 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 @@
  */
 public class AccessibilityTargetAdapter extends Adapter<ViewHolder> {
     private int mIconWidthHeight;
+    private int mItemPadding;
     private final List<AccessibilityTarget> mTargets;
 
     @IntDef({
@@ -84,6 +83,7 @@
         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 @@
         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 @@
             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 65acba9..448211e 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
@@ -122,7 +122,7 @@
         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;