diff options
author | 2024-08-31 02:33:30 +0000 | |
---|---|---|
committer | 2024-09-03 21:38:26 +0000 | |
commit | 4754e1bef164f4bd1b08c4d6ed3a95fcda5367c6 (patch) | |
tree | 9b8877ddc807d9d98c5a2699f5d276d31b7e84d1 /packages/SystemUI | |
parent | 578f4428afc2f5f2cf36d391866e71e2a4104a7c (diff) |
A11yMenu Layout fixes
Adjusts A11yMenu to use proper vertical spacing between grid items,
and to do a better job at keeping the footer on the screen with larger display sizes.
Notably, on larger display sizes there is still vertical overlap between text & buttons.
Test: Open a11yMenu in portrait & landscape modes to verify the above behavior. Make sure to test with small & large display sizes.
Bug: 361449952
Flag: EXEMPT small internal change, partially involving xml
Change-Id: If2977338c3b1521f85e903f661f33cf6a9917cc6
Diffstat (limited to 'packages/SystemUI')
5 files changed, 54 insertions, 35 deletions
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml index fd9a9c634a36..3c73eca732a1 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml +++ b/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml @@ -3,8 +3,7 @@ android:id="@+id/shortcutItem" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingTop="@dimen/grid_item_padding" - android:paddingBottom="@dimen/grid_item_padding" + android:padding="@dimen/grid_item_padding" android:gravity="center"> <ImageButton diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/layout/paged_menu.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/layout/paged_menu.xml index 6be765528028..adaa6551eeae 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/res/layout/paged_menu.xml +++ b/packages/SystemUI/accessibility/accessibilitymenu/res/layout/paged_menu.xml @@ -1,25 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> -<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/row_width" android:layout_height="match_parent" - android:id="@+id/coordinatorLayout" - android:background="@drawable/view_background" - > - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> + android:orientation="vertical" + android:background="@drawable/view_background"> - <androidx.viewpager2.widget.ViewPager2 - android:id="@+id/view_pager" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="@dimen/table_margin_top" - android:paddingBottom="@dimen/a11ymenu_layout_margin" - android:layout_gravity="center" - android:gravity="center" - /> + <androidx.viewpager2.widget.ViewPager2 + android:id="@+id/view_pager" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:paddingTop="@dimen/table_margin_top" + android:paddingBottom="@dimen/a11ymenu_layout_margin" + android:gravity="center" + /> - <include layout="@layout/footerlayout_switch_page"/> - </LinearLayout> -</androidx.coordinatorlayout.widget.CoordinatorLayout> + <include layout="@layout/footerlayout_switch_page"/> +</LinearLayout> diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuFooter.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuFooter.java index 78fbf01a1644..136a4ed8626b 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuFooter.java +++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuFooter.java @@ -55,6 +55,8 @@ public class A11yMenuFooter { private View mBottomListDivider; private final A11yMenuFooterCallBack mCallBack; private final ViewGroup mMenuLayout; + private ViewGroup mFooterContainer; + private int mFooterContainerBaseHeight = 0; private int mRightToLeftDirection = LAYOUT_DIRECTION_LTR; public A11yMenuFooter(ViewGroup menuLayout, A11yMenuFooterCallBack callBack) { @@ -74,6 +76,15 @@ public class A11yMenuFooter { ? mPageRightBtn : mPageLeftBtn; } + void adjustFooterToDensityScale(float densityScale) { + mFooterContainer.getLayoutParams().height = + (int) (mFooterContainerBaseHeight / densityScale); + } + + int getHeight() { + return mFooterContainer.getLayoutParams().height; + } + /** Sets right to left direction of footer. */ public void updateRightToLeftDirection(Configuration configuration) { mRightToLeftDirection = TextUtils.getLayoutDirectionFromLocale( @@ -85,8 +96,9 @@ public class A11yMenuFooter { } private void configureFooterLayout(ViewGroup menuLayout) { - ViewGroup footerContainer = menuLayout.findViewById(R.id.footerlayout); - footerContainer.setVisibility(View.VISIBLE); + mFooterContainer = menuLayout.findViewById(R.id.footerlayout); + mFooterContainer.setVisibility(View.VISIBLE); + mFooterContainerBaseHeight = mFooterContainer.getLayoutParams().height; mPageLeftBtn = menuLayout.findViewById(R.id.menu_left_button); mPageRightBtn = menuLayout.findViewById(R.id.menu_right_button); diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java index 08bbf192591e..776a37500287 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java +++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java @@ -28,6 +28,7 @@ import android.view.WindowManager; import android.view.WindowMetrics; import android.widget.GridView; +import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; import com.android.systemui.accessibility.accessibilitymenu.AccessibilityMenuService; @@ -167,7 +168,9 @@ public class A11yMenuViewPager { mA11yMenuShortcutList = shortcutDataList; initViewPager(); initChildPage(); - mA11yMenuFooter = new A11yMenuFooter(a11yMenuLayout, mFooterCallbacks); + if (mA11yMenuFooter == null) { + mA11yMenuFooter = new A11yMenuFooter(a11yMenuLayout, mFooterCallbacks); + } mA11yMenuFooter.updateRightToLeftDirection( a11yMenuLayout.getResources().getConfiguration()); updateFooterState(); @@ -237,11 +240,17 @@ public class A11yMenuViewPager { return; } - if (mGridPageList.isEmpty()) { + if (mViewPagerAdapter.getItemCount() == 0) { return; } - GridView firstGridView = mGridPageList.get(0); + RecyclerView.ViewHolder viewHolder = + ((RecyclerView) mViewPager.getChildAt(0)) + .findViewHolderForAdapterPosition(0); + if (viewHolder == null) { + return; + } + GridView firstGridView = (GridView) viewHolder.itemView; if (firstGridView == null || firstGridView.getChildAt(0) == null) { return; @@ -284,10 +293,8 @@ public class A11yMenuViewPager { DisplayMetrics displayMetrics = mService.getResources().getDisplayMetrics(); float densityScale = (float) displayMetrics.densityDpi / DisplayMetrics.DENSITY_DEVICE_STABLE; - View footerLayout = mA11yMenuLayout.findViewById(R.id.footerlayout); // Keeps footer window height unchanged no matter the density is changed. - footerLayout.getLayoutParams().height = - (int) (footerLayout.getLayoutParams().height / densityScale); + mA11yMenuFooter.adjustFooterToDensityScale(densityScale); // Adjust the view pager height for system bar and display cutout insets. WindowManager windowManager = mService.getSystemService(WindowManager.class); WindowMetrics windowMetric = windowManager.getCurrentWindowMetrics(); @@ -295,20 +302,18 @@ public class A11yMenuViewPager { WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout()); viewPagerHeight = windowMetric.getBounds().height() - - footerLayout.getLayoutParams().height + - mA11yMenuFooter.getHeight() - windowInsets.bottom; // Sets vertical interval between grid items. int interval = (viewPagerHeight - topMargin - defaultMargin - (rowsInGridView * gridItemHeight)) / (rowsInGridView + 1); - for (GridView gridView : mGridPageList) { - gridView.setVerticalSpacing(interval); - } + mViewPagerAdapter.setVerticalSpacing(interval); // Sets padding to view pager. final int finalMarginTop = interval + topMargin; - mViewPager.setPadding(defaultMargin, finalMarginTop, defaultMargin, defaultMargin); + mViewPager.setPadding(0, finalMarginTop, 0, defaultMargin); } final ViewGroup.LayoutParams layoutParams = mViewPager.getLayoutParams(); layoutParams.height = viewPagerHeight; diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/ViewPagerAdapter.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/ViewPagerAdapter.java index 43ec9561f4db..cb97c1ecb186 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/ViewPagerAdapter.java +++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/ViewPagerAdapter.java @@ -36,11 +36,19 @@ class ViewPagerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { /** List of shortcuts, split into sub lists per page */ private List<List<A11yMenuShortcut>> mShortcutList; private final AccessibilityMenuService mService; + private int mVerticalSpacing = 0; ViewPagerAdapter(AccessibilityMenuService service) { mService = service; } + public void setVerticalSpacing(int spacing) { + if (mVerticalSpacing != spacing) { + mVerticalSpacing = spacing; + notifyDataSetChanged(); + } + } + public void set(List<List<A11yMenuShortcut>> tList) { mShortcutList = tList; notifyDataSetChanged(); @@ -61,6 +69,7 @@ class ViewPagerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { GridView gridView = (GridView) holder.itemView; gridView.setNumColumns(A11yMenuViewPager.GridViewParams.getGridColumnCount(mService)); gridView.setAdapter(adapter); + gridView.setVerticalSpacing(mVerticalSpacing); } @Override |