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:
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user