diff --git a/packages/SystemUI/src/com/android/systemui/scrim/ScrimDrawable.java b/packages/SystemUI/src/com/android/systemui/scrim/ScrimDrawable.java index 3c6ab34733e58..bbba0071094b1 100644 --- a/packages/SystemUI/src/com/android/systemui/scrim/ScrimDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/scrim/ScrimDrawable.java @@ -199,7 +199,7 @@ public class ScrimDrawable extends Drawable { drawConcave(canvas); } else if (mCornerRadiusEnabled && mCornerRadius > 0) { canvas.drawRoundRect(getBounds().left, getBounds().top, getBounds().right, - getBounds().bottom + mCornerRadius, + getBounds().bottom, /* x radius*/ mCornerRadius, /* y radius*/ mCornerRadius, mPaint); } else { canvas.drawRect(getBounds().left, getBounds().top, getBounds().right, 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 c89f4d7978197..5c68559ffb1ee 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 @@ -689,7 +689,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable boolean showFooterView = (showDismissView || mController.getVisibleNotificationCount() > 0) && mIsCurrentUserSetup // see: b/193149550 && mStatusBarState != StatusBarState.KEYGUARD - && mQsExpansionFraction != 1 + // quick settings don't affect notifications when not in full screen + && (mQsExpansionFraction != 1 || !mQsFullScreen) && !mScreenOffAnimationController.shouldHideNotificationsFooter() && !mIsRemoteInputActive; boolean showHistory = mController.isHistoryEnabled(); @@ -799,6 +800,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable y = (int) (mAmbientState.getStackY() + mKeyguardNotificationAvailableSpace); drawDebugInfo(canvas, y, Color.RED, /* label= */ "mAmbientState.getStackY() + mKeyguardNotificationAvailableSpace = " + y); + + drawDebugInfo(canvas, mRoundedRectClippingBottom, Color.DKGRAY, + /* label= */ "mRoundedRectClippingBottom) = " + y); } private void drawDebugInfo(Canvas canvas, int y, int color, String label) { @@ -1311,7 +1315,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable if (mOnStackYChanged != null) { mOnStackYChanged.accept(listenerNeedsAnimation); } - if (mQsExpansionFraction <= 0 && !shouldSkipHeightUpdate()) { + if ((mQsExpansionFraction <= 0 || !mQsFullScreen) && !shouldSkipHeightUpdate()) { final float endHeight = updateStackEndHeight(); updateStackHeight(endHeight, fraction); } 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 5746ffb6debe7..6cca9045d867e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -1098,6 +1098,8 @@ public class NotificationPanelViewController extends PanelViewController { if (splitNotificationShadeChanged) { updateClockAppearance(); + updateQsState(); + mNotificationStackScrollLayoutController.updateFooter(); } } @@ -2348,7 +2350,7 @@ public class NotificationPanelViewController extends PanelViewController { private int calculateBottomQsClippingBound(int top) { if (mShouldUseSplitNotificationShade) { return top + mNotificationStackScrollLayoutController.getHeight() - - mSplitShadeNotificationsScrimMarginBottom; + + mSplitShadeNotificationsScrimMarginBottom; } else { return getView().getBottom(); } @@ -2466,7 +2468,12 @@ public class NotificationPanelViewController extends PanelViewController { // be visible, otherwise you can see the bounds once swiping up to see bouncer mScrimController.setNotificationsBounds(0, 0, 0, 0); } else { - mScrimController.setNotificationsBounds(left, top, right, bottom); + // Increase the height of the notifications scrim when not in split shade + // (e.g. portrait tablet) so the rounded corners are not visible at the bottom, + // in this case they are rendered off-screen + final int notificationsScrimBottom = + mShouldUseSplitNotificationShade ? bottom : bottom + radius; + mScrimController.setNotificationsBounds(left, top, right, notificationsScrimBottom); } if (mShouldUseSplitNotificationShade) { @@ -2476,10 +2483,13 @@ public class NotificationPanelViewController extends PanelViewController { } mScrimController.setScrimCornerRadius(radius); + + // Convert global clipping coordinates to local ones, + // relative to NotificationStackScrollLayout int nsslLeft = left - mNotificationStackScrollLayoutController.getLeft(); int nsslRight = right - mNotificationStackScrollLayoutController.getLeft(); int nsslTop = top - mNotificationStackScrollLayoutController.getTop(); - int nsslBottom = bottom; + int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop(); int bottomRadius = mShouldUseSplitNotificationShade ? radius : 0; mNotificationStackScrollLayoutController.setRoundedClippingBounds( nsslLeft, nsslTop, nsslRight, nsslBottom, radius, bottomRadius);