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

Commit 92c74842 authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Fix heads-up notification clipping in split shade

HUN was clipped when swiping up in split shade, mostly because of extra notifications top margin that's present only in split shade.

Test: show HUN in split shade, swipe up and see it not getting clipped till the edge of the screen
Fixes: 242051840
Change-Id: I923cec41839725d11c1b1a34e00aadf44283accc
parent 4e528edd
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -2712,11 +2712,23 @@ public final class NotificationPanelViewController extends PanelViewController {
        // relative to NotificationStackScrollLayout
        int nsslLeft = left - mNotificationStackScrollLayoutController.getLeft();
        int nsslRight = right - mNotificationStackScrollLayoutController.getLeft();
        int nsslTop = top - mNotificationStackScrollLayoutController.getTop();
        int nsslTop = getNotificationsClippingTopBounds(top);
        int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop();
        int bottomRadius = mSplitShadeEnabled ? radius : 0;
        int topRadius = mSplitShadeEnabled && mExpandingFromHeadsUp ? 0 : radius;
        mNotificationStackScrollLayoutController.setRoundedClippingBounds(
                nsslLeft, nsslTop, nsslRight, nsslBottom, radius, bottomRadius);
                nsslLeft, nsslTop, nsslRight, nsslBottom, topRadius, bottomRadius);
    }

    private int getNotificationsClippingTopBounds(int qsTop) {
        if (mSplitShadeEnabled && mExpandingFromHeadsUp) {
            // in split shade nssl has extra top margin so clipping at top 0 is not enough, we need
            // to set top clipping bound to negative value to allow HUN to go up to the top edge of
            // the screen without clipping.
            return -mAmbientState.getStackTopMargin();
        } else {
            return qsTop - mNotificationStackScrollLayoutController.getTop();
        }
    }

    private float getQSEdgePosition() {
+13 −4
Original line number Diff line number Diff line
@@ -1399,7 +1399,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
            if (height < minExpansionHeight) {
                mClipRect.left = 0;
                mClipRect.right = getWidth();
                mClipRect.top = 0;
                mClipRect.top = getNotificationsClippingTopBound();
                mClipRect.bottom = (int) height;
                height = minExpansionHeight;
                setRequestedClipBounds(mClipRect);
@@ -1460,6 +1460,17 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        notifyAppearChangedListeners();
    }

    private int getNotificationsClippingTopBound() {
        if (isHeadsUpTransition()) {
            // HUN in split shade can go higher than bottom of NSSL when swiping up so we want
            // to give it extra clipping margin. Because clipping has rounded corners, we also
            // need to account for that corner clipping.
            return -mAmbientState.getStackTopMargin() - mCornerRadius;
        } else {
            return 0;
        }
    }

    private void notifyAppearChangedListeners() {
        float appear;
        float expandAmount;
@@ -1498,13 +1509,11 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
    public void updateClipping() {
        boolean clipped = mRequestedClipBounds != null && !mInHeadsUpPinnedMode
                && !mHeadsUpAnimatingAway;
        boolean clipToOutline = false;
        if (mIsClipped != clipped) {
            mIsClipped = clipped;
        }

        if (mAmbientState.isHiddenAtAll()) {
            clipToOutline = false;
            invalidateOutline();
            if (isFullyHidden()) {
                setClipBounds(null);
@@ -1515,7 +1524,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
            setClipBounds(null);
        }

        setClipToOutline(clipToOutline);
        setClipToOutline(false);
    }

    /**