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
This commit is contained in:
Peter_Liang
2021-05-27 22:53:57 +08:00
parent 75dc1f16e3
commit 3b1ab6136d
5 changed files with 51 additions and 25 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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;