Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b1ab613 authored by Peter_Liang's avatar Peter_Liang
Browse files

Fix the position of a11y floating menu was not centered when switching the...

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
parent 75dc1f16
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -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
+4 −3
Original line number Diff line number Diff line
@@ -1465,16 +1465,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>
+24 −6
Original line number Diff line number Diff line
@@ -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);
    }
+20 −8
Original line number Diff line number Diff line
@@ -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<ViewHolder> {
    private int mIconWidthHeight;
    private int mItemPadding;
    private final List<AccessibilityTarget> mTargets;

    @IntDef({
@@ -84,6 +83,7 @@ public class AccessibilityTargetAdapter extends Adapter<ViewHolder> {
        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<ViewHolder> {
        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<ViewHolder> {
            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);
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -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;