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

Commit 4754e1be authored by Riley Jones's avatar Riley Jones
Browse files

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
parent 578f4428
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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
+14 −20
Original line number Diff line number Diff line
<?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:layout_height="0dp"
      android:layout_weight="1"
      android:paddingTop="@dimen/table_margin_top"
      android:paddingBottom="@dimen/a11ymenu_layout_margin"
        android:layout_gravity="center"
      android:gravity="center"
      />

  <include layout="@layout/footerlayout_switch_page"/>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
+14 −2
Original line number Diff line number Diff line
@@ -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);
+16 −11
Original line number Diff line number Diff line
@@ -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();
        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;
+9 −0
Original line number Diff line number Diff line
@@ -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