diff options
| author | 2022-01-21 17:35:23 +0000 | |
|---|---|---|
| committer | 2022-01-31 15:38:43 +0000 | |
| commit | 09a9dc07e90dc8a66f55f8bdb7cee9371af3ca86 (patch) | |
| tree | fab4fbf2ed3f4b6c8020c598d2b723cbc19626ce | |
| parent | 826e30b913d5eb0d7dccf04bb0fd60e0f3a47a93 (diff) | |
Fixing navbar and notification shade overlap
Moving notifications scrim bottom edge a bit higher - according to the specs. That involved some collateral changes as bottom margin was never updated in NotificationsQuickSettingsContainer.
Also renaming resources:
notification_panel_margin_bottom -> notification_panel_padding_bottom
close_handle_underlap -> notification_panel_margin_bottom
which I think reflects a bit better what they're doing.
Fixes: 213304101
Test: manual + NotificationQSContainerControllerTest
Change-Id: I7102e01b98fc9f1298bd20c9d722706e85829d87
11 files changed, 71 insertions, 21 deletions
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 2290964eccd0..39d7f4f5db4e 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -122,7 +122,7 @@ android:layout_marginTop="@dimen/notification_panel_margin_top" android:layout_width="@dimen/notification_panel_width" android:layout_height="match_parent" - android:layout_marginBottom="@dimen/close_handle_underlap" + android:layout_marginBottom="@dimen/notification_panel_margin_bottom" android:importantForAccessibility="no" systemui:layout_constraintStart_toStartOf="parent" systemui:layout_constraintEnd_toEndOf="parent" diff --git a/packages/SystemUI/res/values-sw600dp-land/dimens.xml b/packages/SystemUI/res/values-sw600dp-land/dimens.xml index 89d046b83d97..c2cec5231243 100644 --- a/packages/SystemUI/res/values-sw600dp-land/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp-land/dimens.xml @@ -26,6 +26,10 @@ keyguard_split_shade_top_margin - status_bar_header_height_keyguard = 8dp --> <dimen name="keyguard_clock_top_margin">8dp</dimen> + <dimen name="split_shade_notifications_scrim_margin_bottom">16dp</dimen> + + <dimen name="notification_panel_margin_bottom">48dp</dimen> + <!-- Limit the TaskView to this percentage of the overall screen width (0.0 - 1.0) --> <item name="controls_task_view_width_percentage" translatable="false" format="float" type="dimen">0.45</item> <dimen name="controls_task_view_right_margin">8dp</dimen> diff --git a/packages/SystemUI/res/values-sw720dp-land/dimens.xml b/packages/SystemUI/res/values-sw720dp-land/dimens.xml new file mode 100644 index 000000000000..219fd43c0e83 --- /dev/null +++ b/packages/SystemUI/res/values-sw720dp-land/dimens.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * Copyright (c) 2022, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ +--> +<resources> + <dimen name="split_shade_notifications_scrim_margin_bottom">16dp</dimen> + <dimen name="notification_panel_margin_bottom">56dp</dimen> +</resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 800dd0a6d7a3..4ecad749ada5 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -311,9 +311,6 @@ <!-- Move the back button drawable for 3 button layout upwards in ime mode and in portrait --> <dimen name="navbar_back_button_ime_offset">2dp</dimen> - <!-- Amount of close_handle that will NOT overlap the notification list --> - <dimen name="close_handle_underlap">32dp</dimen> - <!-- Height of the status bar header bar in the car setting. --> <dimen name="car_status_bar_header_height">128dp</dimen> @@ -376,8 +373,12 @@ --> <dimen name="nssl_split_shade_min_content_height">256dp</dimen> - <!-- The bottom margin of the panel that holds the list of notifications. --> - <dimen name="notification_panel_margin_bottom">0dp</dimen> + <dimen name="notification_panel_margin_bottom">32dp</dimen> + + <!-- The bottom padding of the panel that holds the list of notifications. --> + <dimen name="notification_panel_padding_bottom">0dp</dimen> + + <dimen name="split_shade_notifications_scrim_margin_bottom">0dp</dimen> <dimen name="notification_panel_width">@dimen/match_parent</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 9f6a81d3a9ee..dd72615768b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -199,7 +199,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private int mMaxTopPadding; private int mTopPadding; private boolean mAnimateNextTopPaddingChange; - private int mBottomMargin; + private int mBottomPadding; private int mBottomInset = 0; private float mQsExpansionFraction; private final int mSplitShadeMinContentHeight; @@ -981,7 +981,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mMinTopOverScrollToEscape = res.getDimensionPixelSize( R.dimen.min_top_overscroll_to_qs); mStatusBarHeight = SystemBarUtils.getStatusBarHeight(mContext); - mBottomMargin = res.getDimensionPixelSize(R.dimen.notification_panel_margin_bottom); + mBottomPadding = res.getDimensionPixelSize(R.dimen.notification_panel_padding_bottom); mMinimumPaddings = res.getDimensionPixelSize(R.dimen.notification_side_paddings); mQsTilePadding = res.getDimensionPixelOffset(R.dimen.qs_tile_margin_horizontal); mSkinnyNotifsInLandscape = res.getBoolean(R.bool.config_skinnyNotifsInLandscape); @@ -2280,7 +2280,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable // The topPadding can be bigger than the regular padding when qs is expanded, in that // state the maxPanelHeight and the contentHeight should be bigger - mContentHeight = height + Math.max(mIntrinsicPadding, mTopPadding) + mBottomMargin; + mContentHeight = height + Math.max(mIntrinsicPadding, mTopPadding) + mBottomPadding; updateScrollability(); clampScrollPosition(); updateStackPosition(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java index 8f0579cc4693..47be9e68e65a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java @@ -61,7 +61,7 @@ public class StackScrollAlgorithm { @VisibleForTesting float mHeadsUpInset; private int mPinnedZTranslationExtra; private float mNotificationScrimPadding; - private int mCloseHandleUnderlapHeight; + private int mMarginBottom; public StackScrollAlgorithm( Context context, @@ -87,7 +87,7 @@ public class StackScrollAlgorithm { R.dimen.heads_up_pinned_elevation); mGapHeight = res.getDimensionPixelSize(R.dimen.notification_section_divider_height); mNotificationScrimPadding = res.getDimensionPixelSize(R.dimen.notification_side_paddings); - mCloseHandleUnderlapHeight = res.getDimensionPixelSize(R.dimen.close_handle_underlap); + mMarginBottom = res.getDimensionPixelSize(R.dimen.notification_panel_margin_bottom); } /** @@ -463,7 +463,7 @@ public class StackScrollAlgorithm { } } else { if (view instanceof EmptyShadeView) { - float fullHeight = ambientState.getLayoutMaxHeight() + mCloseHandleUnderlapHeight + float fullHeight = ambientState.getLayoutMaxHeight() + mMarginBottom - ambientState.getStackY(); viewState.yTranslation = (fullHeight - getMaxAllowedChildHeight(view)) / 2f; } else if (view != ambientState.getTrackedHeadsUpRow()) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index bb0ed95cc6ca..679371c92b92 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -20,6 +20,7 @@ import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; import static android.view.View.GONE; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; +import static androidx.constraintlayout.widget.ConstraintSet.BOTTOM; import static androidx.constraintlayout.widget.ConstraintSet.END; import static androidx.constraintlayout.widget.ConstraintSet.PARENT_ID; import static androidx.constraintlayout.widget.ConstraintSet.START; @@ -414,6 +415,7 @@ public class NotificationPanelViewController extends PanelViewController private int mDisplayTopInset = 0; // in pixels private int mDisplayRightInset = 0; // in pixels private int mSplitShadeStatusBarHeight; + private int mSplitShadeNotificationsScrimMarginBottom; private final KeyguardClockPositionAlgorithm mClockPositionAlgorithm = @@ -1162,6 +1164,9 @@ public class NotificationPanelViewController extends PanelViewController public void updateResources() { mQuickQsOffsetHeight = SystemBarUtils.getQuickQsOffsetHeight(mView.getContext()); mSplitShadeStatusBarHeight = Utils.getSplitShadeStatusBarHeight(mView.getContext()); + mSplitShadeNotificationsScrimMarginBottom = + mResources.getDimensionPixelSize( + R.dimen.split_shade_notifications_scrim_margin_bottom); int qsWidth = mResources.getDimensionPixelSize(R.dimen.qs_panel_width); int panelWidth = mResources.getDimensionPixelSize(R.dimen.notification_panel_width); mShouldUseSplitNotificationShade = @@ -1171,6 +1176,8 @@ public class NotificationPanelViewController extends PanelViewController mQs.setInSplitShade(mShouldUseSplitNotificationShade); } + int notificationsBottomMargin = mResources.getDimensionPixelSize( + R.dimen.notification_panel_margin_bottom); int topMargin = mShouldUseSplitNotificationShade ? mSplitShadeStatusBarHeight : mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_top); mSplitShadeHeaderController.setSplitShadeMode(mShouldUseSplitNotificationShade); @@ -1199,9 +1206,12 @@ public class NotificationPanelViewController extends PanelViewController constraintSet.getConstraint(R.id.notification_stack_scroller).layout.mWidth = panelWidth; constraintSet.getConstraint(R.id.qs_frame).layout.mWidth = qsWidth; constraintSet.setMargin(R.id.notification_stack_scroller, TOP, topMargin); + constraintSet.setMargin(R.id.notification_stack_scroller, BOTTOM, + notificationsBottomMargin); constraintSet.setMargin(R.id.qs_frame, TOP, topMargin); constraintSet.applyTo(mNotificationContainerParent); mAmbientState.setStackTopMargin(topMargin); + mNotificationsQSContainerController.updateMargins(); mNotificationsQSContainerController.setSplitShadeEnabled(mShouldUseSplitNotificationShade); updateKeyguardStatusViewAlignment(/* animate= */false); @@ -2558,7 +2568,8 @@ public class NotificationPanelViewController extends PanelViewController right = getView().getRight() + mDisplayRightInset; } else { top = Math.min(qsPanelBottomY, mSplitShadeStatusBarHeight); - bottom = top + mNotificationStackScrollLayoutController.getHeight(); + bottom = top + mNotificationStackScrollLayoutController.getHeight() + - mSplitShadeNotificationsScrimMarginBottom; left = mNotificationStackScrollLayoutController.getLeft(); right = mNotificationStackScrollLayoutController.getRight(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt index 34bb6d3e1a27..1a885336be5e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt @@ -63,7 +63,7 @@ class NotificationsQSContainerController @Inject constructor( } public override fun onViewAttached() { - notificationsBottomMargin = mView.defaultNotificationsMarginBottom + updateMargins() overviewProxyService.addCallback(taskbarVisibilityListener) mView.setInsetsChangedListener(windowInsetsListener) mView.setQSFragmentAttachedListener { qs: QS -> qs.setContainerController(this) } @@ -75,6 +75,10 @@ class NotificationsQSContainerController @Inject constructor( mView.removeQSFragmentAttachedListener() } + fun updateMargins() { + notificationsBottomMargin = mView.defaultNotificationsMarginBottom + } + override fun setCustomizerAnimating(animating: Boolean) { if (isQSCustomizerAnimating != animating) { isQSCustomizerAnimating = animating diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java index 9210a8b5db80..cecbcdb829c6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -45,7 +45,6 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout private View mStackScroller; private View mKeyguardStatusBar; - private int mStackScrollerMargin; private ArrayList<View> mDrawingOrderedChildren = new ArrayList<>(); private ArrayList<View> mLayoutDrawingOrder = new ArrayList<>(); private final Comparator<View> mIndexComparator = Comparator.comparingInt(this::indexOfChild); @@ -63,7 +62,6 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout super.onFinishInflate(); mQsFrame = findViewById(R.id.qs_frame); mStackScroller = findViewById(R.id.notification_stack_scroller); - mStackScrollerMargin = ((LayoutParams) mStackScroller.getLayoutParams()).bottomMargin; mKeyguardStatusBar = findViewById(R.id.keyguard_header); } @@ -97,7 +95,7 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout } public int getDefaultNotificationsMarginBottom() { - return mStackScrollerMargin; + return ((LayoutParams) mStackScroller.getLayoutParams()).bottomMargin; } public void setInsetsChangedListener(Consumer<WindowInsets> onInsetsChangedListener) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt index ea681435132e..1da9bbcdb836 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt @@ -69,10 +69,9 @@ class StackScrollAlgorithmTest : SysuiTestCase() { stackScrollAlgorithm.resetViewStates(ambientState, /* speedBumpIndex= */ 0) - val closeHandleUnderlapHeight = - context.resources.getDimensionPixelSize(R.dimen.close_handle_underlap) - val fullHeight = - ambientState.layoutMaxHeight + closeHandleUnderlapHeight - ambientState.stackY + val marginBottom = + context.resources.getDimensionPixelSize(R.dimen.notification_panel_margin_bottom) + val fullHeight = ambientState.layoutMaxHeight + marginBottom - ambientState.stackY val centeredY = ambientState.stackY + fullHeight / 2f - emptyShadeView.height / 2f assertThat(emptyShadeView.viewState?.yTranslation).isEqualTo(centeredY) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt index 337e64592750..77e90256ab70 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt @@ -215,6 +215,18 @@ class NotificationQSContainerControllerTest : SysuiTestCase() { then(expectedContainerPadding = 0) } + @Test + fun testNotificationsMarginBottomIsUpdated() { + notificationsQSContainerController.splitShadeEnabled = true + verify(notificationsQSContainer).setNotificationsMarginBottom(NOTIFICATIONS_MARGIN) + + whenever(notificationsQSContainer.defaultNotificationsMarginBottom).thenReturn(100) + notificationsQSContainerController.updateMargins() + notificationsQSContainerController.splitShadeEnabled = false + + verify(notificationsQSContainer).setNotificationsMarginBottom(100) + } + private fun given( taskbarVisible: Boolean, navigationMode: Int, |