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

Commit 48c0ae96 authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Fix notification group scroll in split shade

QsContainer was matching the entire screen size for split shade, while only the qs area in normal shade.

This made `isInsideQsContainer` to always return true for the split shade (also because only the Y coordinate was checked, as there was the assumption QS where only at the top).
Now, the `isInsideQsContainer` (renamed to `isInsideQsHeader`) checks if the touch is inside the QsHeader, that matches the wanted bound both in the normal and split QS.

Fixes: 225328865
Fixes: 223951547
Test: atest NotificationStackScrollLayoutTest
Change-Id: Ie468610eae68eb698310a95a5c9f9d98be4d89fb
parent a01ec635
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -347,7 +347,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
            setDimAmount((Float) animation.getAnimatedValue());
        }
    };
    protected ViewGroup mQsContainer;
    protected ViewGroup mQsHeader;
    // Rect of QsHeader. Kept as a field just to avoid creating a new one each time.
    private Rect mQsHeaderBound = new Rect();
    private boolean mContinuousShadowUpdate;
    private boolean mContinuousBackgroundUpdate;
    private ViewTreeObserver.OnPreDrawListener mShadowUpdater
@@ -1598,8 +1600,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
    }

    @ShadeViewRefactor(RefactorComponent.ADAPTER)
    public void setQsContainer(ViewGroup qsContainer) {
        mQsContainer = qsContainer;
    public void setQsHeader(ViewGroup qsHeader) {
        mQsHeader = qsHeader;
    }

    @ShadeViewRefactor(RefactorComponent.ADAPTER)
@@ -3458,7 +3460,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        if (!isScrollingEnabled()) {
            return false;
        }
        if (isInsideQsContainer(ev) && !mIsBeingDragged) {
        if (isInsideQsHeader(ev) && !mIsBeingDragged) {
            return false;
        }
        mForcedScroll = null;
@@ -3611,8 +3613,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
    }

    @ShadeViewRefactor(RefactorComponent.INPUT)
    protected boolean isInsideQsContainer(MotionEvent ev) {
        return ev.getY() < mQsContainer.getBottom();
    protected boolean isInsideQsHeader(MotionEvent ev) {
        mQsHeader.getBoundsOnScreen(mQsHeaderBound);
        return mQsHeaderBound.contains((int) ev.getX(), (int) ev.getY());
    }

    @ShadeViewRefactor(RefactorComponent.INPUT)
+3 −2
Original line number Diff line number Diff line
@@ -1234,8 +1234,9 @@ public class NotificationStackScrollLayoutController {
        mView.setExpandedHeight(expandedHeight);
    }

    public void setQsContainer(ViewGroup view) {
        mView.setQsContainer(view);
    /** Sets the QS header. Used to check if a touch is within its bounds. */
    public void setQsHeader(ViewGroup view) {
        mView.setQsHeader(view);
    }

    public void setAnimationsEnabled(boolean enabled) {
+1 −1
Original line number Diff line number Diff line
@@ -3592,7 +3592,7 @@ public class NotificationPanelViewController extends PanelViewController {
                }
            });
            mLockscreenShadeTransitionController.setQS(mQs);
            mNotificationStackScrollLayoutController.setQsContainer((ViewGroup) mQs.getView());
            mNotificationStackScrollLayoutController.setQsHeader((ViewGroup) mQs.getHeader());
            mQs.setScrollListener(mScrollListener);
            updateQsExpansion();
        }