Constrain global actions panel to available space

Formerly, the global actions panel was given the entire screen, and
was rendered above the global actions menu. Now, we limit it to the
space unused by the menu.

Bug: 133511683
Test: manual
Change-Id: I74f4db0b9a2a4e030ec1fd53ddd65e7c372d229c
This commit is contained in:
Steve Elliott
2019-05-29 14:13:50 -04:00
parent 190e99cf3a
commit 300b48ff11
6 changed files with 98 additions and 80 deletions

View File

@@ -58,6 +58,7 @@ android_library {
"androidx.arch.core_core-runtime",
"androidx.lifecycle_lifecycle-extensions",
"androidx.dynamicanimation_dynamicanimation",
"androidx-constraintlayout_constraintlayout",
"iconloader_base",
"SystemUI-tags",
"SystemUI-proto",
@@ -111,6 +112,7 @@ android_library {
"androidx.arch.core_core-runtime",
"androidx.lifecycle_lifecycle-extensions",
"androidx.dynamicanimation_dynamicanimation",
"androidx-constraintlayout_constraintlayout",
"SystemUI-tags",
"SystemUI-proto",
"metrics-helper-lib",

View File

@@ -1,73 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.globalactions.GlobalActionsGridLayout
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/global_actions_view"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/global_actions_grid_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:theme="@style/qs_theme"
android:gravity="bottom | center_horizontal"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingBottom="@dimen/global_actions_grid_container_shadow_offset"
android:layout_marginBottom="@dimen/global_actions_grid_container_negative_shadow_offset"
>
<LinearLayout
<FrameLayout
android:id="@+id/global_actions_panel_container"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/global_actions_view"
/>
<com.android.systemui.globalactions.GlobalActionsGridLayout
android:id="@id/global_actions_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layoutDirection="ltr"
android:orientation="horizontal"
android:theme="@style/qs_theme"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="bottom | center_horizontal"
android:clipChildren="false"
android:clipToPadding="false"
android:layout_marginBottom="@dimen/global_actions_grid_container_bottom_margin"
android:paddingBottom="@dimen/global_actions_grid_container_shadow_offset"
android:layout_marginBottom="@dimen/global_actions_grid_container_negative_shadow_offset"
>
<!-- For separated items-->
<LinearLayout
android:id="@+id/separated_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/global_actions_grid_side_margin"
android:layout_marginRight="@dimen/global_actions_grid_side_margin"
android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
android:paddingTop="@dimen/global_actions_grid_vertical_padding"
android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
android:orientation="vertical"
android:gravity="center"
android:translationZ="@dimen/global_actions_translate"
/>
<!-- Grid of action items -->
<com.android.systemui.globalactions.ListGridLayout
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="right"
android:layout_marginRight="@dimen/global_actions_grid_side_margin"
android:translationZ="@dimen/global_actions_translate"
android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
android:paddingTop="@dimen/global_actions_grid_vertical_padding"
android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
android:layout_width="wrap_content"
android:layoutDirection="ltr"
android:clipChildren="false"
android:clipToPadding="false"
android:layout_marginBottom="@dimen/global_actions_grid_container_bottom_margin"
>
<!-- For separated items-->
<LinearLayout
android:id="@+id/separated_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/global_actions_grid_side_margin"
android:layout_marginRight="@dimen/global_actions_grid_side_margin"
android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
android:paddingTop="@dimen/global_actions_grid_vertical_padding"
android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
android:orientation="vertical"
android:gravity="center"
android:translationZ="@dimen/global_actions_translate"
/>
<!-- Grid of action items -->
<com.android.systemui.globalactions.ListGridLayout
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layoutDirection="locale"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layoutDirection="locale"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layoutDirection="locale"
/>
</com.android.systemui.globalactions.ListGridLayout>
</LinearLayout>
android:orientation="vertical"
android:gravity="right"
android:layout_marginRight="@dimen/global_actions_grid_side_margin"
android:translationZ="@dimen/global_actions_translate"
android:paddingLeft="@dimen/global_actions_grid_horizontal_padding"
android:paddingRight="@dimen/global_actions_grid_horizontal_padding"
android:paddingTop="@dimen/global_actions_grid_vertical_padding"
android:paddingBottom="@dimen/global_actions_grid_vertical_padding"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layoutDirection="locale"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layoutDirection="locale"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layoutDirection="locale"
/>
</com.android.systemui.globalactions.ListGridLayout>
</LinearLayout>
</com.android.systemui.globalactions.GlobalActionsGridLayout>
</com.android.systemui.globalactions.GlobalActionsGridLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1588,17 +1588,13 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
// Disable rotation suggestions, if enabled
setRotationSuggestionsEnabled(false);
FrameLayout panelContainer = new FrameLayout(mContext);
FrameLayout panelContainer =
findViewById(com.android.systemui.R.id.global_actions_panel_container);
FrameLayout.LayoutParams panelParams =
new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
FrameLayout.LayoutParams.MATCH_PARENT);
panelContainer.addView(mPanelController.getPanelContent(), panelParams);
addContentView(
panelContainer,
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
mBackgroundDrawable = mPanelController.getBackgroundDrawable();
mScrimAlpha = 1f;
}
@@ -1606,8 +1602,10 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private void initializeLayout() {
setContentView(getGlobalActionsLayoutId(mContext));
fixNavBarClipping();
mGlobalActionsLayout = findViewById(com.android.systemui.R.id.global_actions_view);
mGlobalActionsLayout.setOutsideTouchListener(view -> dismiss());
((View) mGlobalActionsLayout.getParent()).setOnClickListener(view -> dismiss());
mGlobalActionsLayout.setListViewAccessibilityDelegate(new View.AccessibilityDelegate() {
@Override
public boolean dispatchPopulateAccessibilityEvent(
@@ -1630,6 +1628,15 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
getWindow().setBackgroundDrawable(mBackgroundDrawable);
}
private void fixNavBarClipping() {
ViewGroup content = findViewById(android.R.id.content);
content.setClipChildren(false);
content.setClipToPadding(false);
ViewGroup contentParent = (ViewGroup) content.getParent();
contentParent.setClipChildren(false);
contentParent.setClipToPadding(false);
}
private int getGlobalActionsLayoutId(Context context) {
int rotation = RotationUtils.getRotation(context);
boolean useGridLayout = isForceGridEnabled(context)

View File

@@ -42,8 +42,6 @@ public class GlobalActionsGridLayout extends GlobalActionsLayout {
listView.setReverseSublists(shouldReverseSublists());
listView.setReverseItems(shouldReverseListItems());
listView.setSwapRowsAndColumns(shouldSwapRowsAndColumns());
fixNavBarClipping();
}
@Override
@@ -75,19 +73,6 @@ public class GlobalActionsGridLayout extends GlobalActionsLayout {
}
}
/**
* Allows the dialog to clip over the navbar, which prevents shadows and animations from being
* cut off.
*/
private void fixNavBarClipping() {
ViewGroup parent = (ViewGroup) this.getParent();
ViewGroup parentParent = (ViewGroup) parent.getParent();
parent.setClipChildren(false);
parent.setClipToPadding(false);
parentParent.setClipChildren(false);
parentParent.setClipToPadding(false);
}
@Override
protected ListGridLayout getListView() {
return (ListGridLayout) super.getListView();

View File

@@ -48,8 +48,9 @@ public class GlobalActionsGridLayoutTest extends SysuiTestCase {
@Before
public void setUp() throws Exception {
mGridLayout = spy((GlobalActionsGridLayout)
LayoutInflater.from(mContext).inflate(R.layout.global_actions_grid, null));
mGridLayout = spy(LayoutInflater.from(mContext)
.inflate(R.layout.global_actions_grid, null)
.requireViewById(R.id.global_actions_view));
mListGrid = spy(mGridLayout.getListView());
doReturn(mListGrid).when(mGridLayout).getListView();
}

View File

@@ -43,8 +43,9 @@ public class ListGridLayoutTest extends SysuiTestCase {
@Before
public void setUp() throws Exception {
GlobalActionsGridLayout globalActions = (GlobalActionsGridLayout)
LayoutInflater.from(mContext).inflate(R.layout.global_actions_grid, null);
GlobalActionsGridLayout globalActions = LayoutInflater.from(mContext)
.inflate(R.layout.global_actions_grid, null)
.requireViewById(R.id.global_actions_view);
mListGridLayout = globalActions.getListView();
}