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

Commit 211118cd authored by Michał Brzeziński's avatar Michał Brzeziński Committed by Android (Google) Code Review
Browse files

Merge "Making bouncer switch sides on double tap only" into tm-qpr-dev

parents 9e11648f d328adae
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.util.AttributeSet;
import android.util.Log;
import android.util.MathUtils;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -146,6 +147,7 @@ public class KeyguardSecurityContainer extends FrameLayout {
    private final SpringAnimation mSpringAnimation;
    private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
    private final List<Gefingerpoken> mMotionEventListeners = new ArrayList<>();
    private final GestureDetector mDoubleTapDetector;

    private float mLastTouchY = -1;
    private int mActivePointerId = -1;
@@ -305,6 +307,7 @@ public class KeyguardSecurityContainer extends FrameLayout {
        super(context, attrs, defStyle);
        mSpringAnimation = new SpringAnimation(this, DynamicAnimation.Y);
        mViewConfiguration = ViewConfiguration.get(context);
        mDoubleTapDetector = new GestureDetector(context, new DoubleTapListener());
    }

    void onResume(SecurityMode securityMode, boolean faceAuthEnabled) {
@@ -434,6 +437,7 @@ public class KeyguardSecurityContainer extends FrameLayout {
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int action = event.getActionMasked();
        mDoubleTapDetector.onTouchEvent(event);

        boolean result =  mMotionEventListeners.stream()
                .anyMatch(listener -> listener.onTouchEvent(event))
@@ -475,14 +479,20 @@ public class KeyguardSecurityContainer extends FrameLayout {
                if (mSwipeListener != null) {
                    mSwipeListener.onSwipeUp();
                }
            } else {
                if (!mIsDragging) {
                    mViewMode.handleTap(event);
            }
        }
        return true;
    }

    private class DoubleTapListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            if (!mIsDragging) {
                mViewMode.handleDoubleTap(e);
            }
            return true;
        }
    }

    void addMotionEventListener(Gefingerpoken listener) {
        mMotionEventListeners.add(listener);
@@ -736,8 +746,8 @@ public class KeyguardSecurityContainer extends FrameLayout {
        /** Alter the ViewFlipper position, based upon a touch outside of it */
        default void updatePositionByTouchX(float x) {};

        /** A tap on the container, outside of the ViewFlipper */
        default void handleTap(MotionEvent event) {};
        /** A double tap on the container, outside of the ViewFlipper */
        default void handleDoubleTap(MotionEvent event) {};

        /** Called when the view needs to reset or hides */
        default void reset() {};
@@ -1111,11 +1121,11 @@ public class KeyguardSecurityContainer extends FrameLayout {
        }

        /**
         * Determine if a tap on this view is on the other side. If so, will animate positions
         * and record the preference to always show on this side.
         * Determine if a double tap on this view is on the other side. If so, will animate
         * positions and record the preference to always show on this side.
         */
        @Override
        public void handleTap(MotionEvent event) {
        public void handleDoubleTap(MotionEvent event) {
            float x = event.getX();
            boolean currentlyLeftAligned = isLeftAligned();
            // Did the tap hit the "other" side of the bouncer?