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

Commit 4249e4cc authored by Chris Wren's avatar Chris Wren Committed by The Android Automerger
Browse files

Venetian blinds policy for one-finger notification expansion.

Bug: 6538918
Change-Id: I8a6f860684b2477571f69eb4a79a5c106251b1a8
parent 1ae76008
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -152,5 +152,5 @@
    <dimen name="carrier_label_height">24dp</dimen>

    <!-- The distance you can pull a notificaiton before it pops open -->
    <dimen name="one_finger_pop_limit">96dp</dimen>
    <dimen name="one_finger_pop_limit">32dp</dimen>
</resources>
+28 −76
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
    public interface Callback {
        View getChildAtRawPosition(float x, float y);
        View getChildAtPosition(float x, float y);
        View getPreviousChild(View currentChild);
        boolean canChildBeExpanded(View v);
        boolean setUserExpandedChild(View v, boolean userxpanded);
    }
@@ -142,17 +141,6 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
        }
    }

    class PopState {
        View mCurrView;
        View mCurrViewTopGlow;
        View mCurrViewBottomGlow;
        float mOldHeight;
        float mNaturalHeight;
        float mInitialTouchY;
    }

    private Stack<PopState> popStack;

    /**
     * Handle expansion gestures to expand and contract children of the callback.
     *
@@ -168,7 +156,6 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
        mLargeSize = large;
        mContext = context;
        mCallback = callback;
        popStack = new Stack<PopState>();
        mScaler = new ViewScaler();
        mGravity = Gravity.TOP;
        mScaleAnimation = ObjectAnimator.ofFloat(mScaler, "height", 0f);
@@ -416,45 +403,40 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
        switch (action) {
            case MotionEvent.ACTION_MOVE: {
                if (mPullingWithOneFinger) {
                    float target = ev.getY() - mInitialTouchY + mOldHeight;
                    float newHeight = clamp(target);
                    if (mHasPopped || target > mPopLimit) {
                    final float rawHeight = ev.getY() - mInitialTouchY + mOldHeight;
                    final float newHeight = clamp(rawHeight);
                    final boolean wasClosed = (mOldHeight == mSmallSize);
                    boolean isFinished = false;
                    if (rawHeight > mNaturalHeight) {
                        isFinished = true;
                    }
                    if (rawHeight < mSmallSize) {
                        isFinished = true;
                    }

                    final float pull = Math.abs(ev.getY() - mInitialTouchY);
                    if (mHasPopped || pull > mPopLimit) {
                        if (!mHasPopped) {
                            vibrate(mPopDuration);
                            mHasPopped = true;
                        }
                        mScaler.setHeight(newHeight);
                        // glow if overscale
                        if (target > mNaturalHeight) {
                            View previous = mCallback.getPreviousChild(mCurrView);
                            if (previous != null) {
                                setGlow(0f);
                                pushView(previous);
                                initScale(previous);
                                mInitialTouchY = ev.getY();
                                target = mOldHeight;
                                newHeight = clamp(target);
                                mHasPopped = false;
                            } else {
                                setGlow(calculateGlow(target, newHeight));
                    }
                        } else if (target < mSmallSize && !popStack.empty()) {
                            setGlow(0f);
                            initScale(popView());
                            mInitialTouchY = ev.getY();

                    if (mHasPopped) {
                        mScaler.setHeight(newHeight);
                        setGlow(GLOW_BASE);
                    } else {
                            setGlow(calculateGlow(target, newHeight));
                        setGlow(calculateGlow(4f * pull, 0f));
                    }
                    } else {
                         if (target < mSmallSize && !popStack.empty()) {

                    final int x = (int) ev.getX();
                    final int y = (int) ev.getY();
                    View underPointer = findView(x, y);
                    if (isFinished && underPointer != null && underPointer != mCurrView) {
                        setGlow(0f);
                            initScale(popView());
                        initScale(underPointer);
                        mInitialTouchY = ev.getY();
                            setGlow(GLOW_BASE);
                         } else {
                             setGlow(calculateGlow(4f * target, mSmallSize));
                         }
                        mHasPopped = false;
                    }
                    return true;
                }
@@ -516,9 +498,6 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
    }

    private void clearView() {
        while (!popStack.empty()) {
            popStack.pop();
        }
        mCurrView = null;
        mCurrViewTopGlow = null;
        mCurrViewBottomGlow = null;
@@ -539,33 +518,6 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener {
        }
    }

    private void pushView(View v) {
        PopState state = new PopState();
        state.mCurrView = mCurrView;
        state.mCurrViewTopGlow = mCurrViewTopGlow;
        state.mCurrViewBottomGlow = mCurrViewBottomGlow;
        state.mOldHeight = mOldHeight;
        state.mNaturalHeight = mNaturalHeight;
        state.mInitialTouchY = mInitialTouchY;
        popStack.push(state);
    }

    private View popView() {
        if (popStack.empty()) {
            return null;
        }

        PopState state = popStack.pop();
        mCurrView = state.mCurrView;
        mCurrViewTopGlow = state.mCurrViewTopGlow;
        mCurrViewBottomGlow = state.mCurrViewBottomGlow;
        mOldHeight = state.mOldHeight;
        mNaturalHeight = state.mNaturalHeight;
        mInitialTouchY = state.mInitialTouchY;

        return mCurrView;
    }

    @Override
    public void onClick(View v) {
        initScale(v);
+0 −14
Original line number Diff line number Diff line
@@ -204,20 +204,6 @@ public class NotificationRowLayout
        return null;
    }

    public View getPreviousChild(View currentChild) {
        final int count = getChildCount();
        for (int childIdx = 0; childIdx < count; childIdx++) {
            if (getChildAt(childIdx) == currentChild) {
                if (childIdx == 0) {
                    return null;
                } else {
                    return getChildAt(childIdx - 1);
                }
            }
        }
        return null;
    }

    public View getChildContentView(View v) {
        return v;
    }