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

Commit fc00d0b3 authored by Brian Attwell's avatar Brian Attwell
Browse files

Only the first QC snap should be aggressive

Only when first interacting with QC should the QC aggressively
snap to the top or the bottom of the screen.

Bug: 16683381
Change-Id: Ie250a5b4b77cacc4e4f3f77007ab7c92c5b4dd02
parent ac9b3166
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -111,6 +111,10 @@ public class MultiShrinkScroller extends LinearLayout {
    private int mCollapsedTitleStartMargin;
    private int mMinimumPortraitHeaderHeight;
    private int mMaximumPortraitHeaderHeight;
    /**
     * True once the header has touched the top of the screen at least once.
     */
    private boolean mHasEverTouchedTheTop;

    private final Scroller mScroller;
    private final EdgeEffect mEdgeGlowBottom;
@@ -490,6 +494,11 @@ public class MultiShrinkScroller extends LinearLayout {
     * If needed, snap the subviews to the top of the Window.
     */
    private boolean snapToTop(int flingDelta) {
        if (mHasEverTouchedTheTop) {
            // Only when first interacting with QuickContacts should QuickContacts snap to the top
            // of the screen. After this, QuickContacts can be placed most anywhere on the screen.
            return false;
        }
        final int requiredScroll = -getScroll_ignoreOversizedHeaderForSnapping()
                + mTransparentStartHeight;
        if (-getScroll_ignoreOversizedHeaderForSnapping() - flingDelta < 0
@@ -508,7 +517,18 @@ public class MultiShrinkScroller extends LinearLayout {
     * If needed, scroll all the subviews off the bottom of the Window.
     */
    private void snapToBottom(int flingDelta) {
        if (-getScroll_ignoreOversizedHeaderForSnapping() - flingDelta > 0) {
        if (mHasEverTouchedTheTop) {
            // If QuickContacts has touched the top of the screen previously, then we
            // will less aggressively snap to the bottom of the screen.
            final float predictedScrollPastTop = -getScroll() + mIntermediateHeaderHeight
                    - flingDelta;
            final float heightMinusHeader = getHeight() - mIntermediateHeaderHeight;
            if (predictedScrollPastTop > heightMinusHeader) {
                scrollOffBottom();
            }
            return;
        }
        if (-getScroll() - flingDelta > 0) {
            scrollOffBottom();
        }
    }
@@ -560,6 +580,7 @@ public class MultiShrinkScroller extends LinearLayout {
        updatePhotoTintAndDropShadow();
        updateHeaderTextSize();
        final boolean isFullscreen = getScrollNeededToBeFullScreen() <= 0;
        mHasEverTouchedTheTop |= isFullscreen;
        if (mListener != null) {
            if (wasFullscreen && !isFullscreen) {
                 mListener.onExitFullscreen();