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

Commit d370f3b3 authored by Bryce Lee's avatar Bryce Lee Committed by Automerger Merge Worker
Browse files

Merge "Store initial bouncer showing state." into tm-dev am: 8a4163d4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17128838

Change-Id: Icdcc09caf480155b4a8036bd9457c3e9e2542576
parents 88ce6d7a 8a4163d4
Loading
Loading
Loading
Loading
+11 −8
Original line number Original line Diff line number Diff line
@@ -82,6 +82,8 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {


    private Boolean mCapture;
    private Boolean mCapture;


    private boolean mBouncerInitiallyShowing;

    private TouchSession mTouchSession;
    private TouchSession mTouchSession;


    private ValueAnimatorCreator mValueAnimatorCreator;
    private ValueAnimatorCreator mValueAnimatorCreator;
@@ -97,6 +99,7 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
                        // If the user scrolling favors a vertical direction, begin capturing
                        // If the user scrolling favors a vertical direction, begin capturing
                        // scrolls.
                        // scrolls.
                        mCapture = Math.abs(distanceY) > Math.abs(distanceX);
                        mCapture = Math.abs(distanceY) > Math.abs(distanceX);
                        mBouncerInitiallyShowing = mCentralSurfaces.isBouncerShowing();


                        if (mCapture) {
                        if (mCapture) {
                            // Since the user is dragging the bouncer up, set scrimmed to false.
                            // Since the user is dragging the bouncer up, set scrimmed to false.
@@ -115,7 +118,7 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
                    // (0).
                    // (0).
                    final float screenTravelPercentage =
                    final float screenTravelPercentage =
                            Math.abs((e1.getY() - e2.getY()) / mCentralSurfaces.getDisplayHeight());
                            Math.abs((e1.getY() - e2.getY()) / mCentralSurfaces.getDisplayHeight());
                    setPanelExpansion(mCentralSurfaces.isBouncerShowing()
                    setPanelExpansion(mBouncerInitiallyShowing
                            ? screenTravelPercentage : 1 - screenTravelPercentage);
                            ? screenTravelPercentage : 1 - screenTravelPercentage);
                    return true;
                    return true;
                }
                }
@@ -174,16 +177,16 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
        mTouchSession = session;
        mTouchSession = session;
        mVelocityTracker.clear();
        mVelocityTracker.clear();
        mNotificationShadeWindowController.setForcePluginOpen(true, this);
        mNotificationShadeWindowController.setForcePluginOpen(true, this);
        session.registerGestureListener(mOnGestureListener);
        session.registerInputListener(ev -> onMotionEvent(ev));


    }
        session.registerCallback(() -> {

    @Override
    public void onSessionEnd(TouchSession session) {
            mVelocityTracker.recycle();
            mVelocityTracker.recycle();
            mCapture = null;
            mCapture = null;
            mNotificationShadeWindowController.setForcePluginOpen(false, this);
            mNotificationShadeWindowController.setForcePluginOpen(false, this);
        });

        session.registerGestureListener(mOnGestureListener);
        session.registerInputListener(ev -> onMotionEvent(ev));

    }
    }


    private void onMotionEvent(InputEvent event) {
    private void onMotionEvent(InputEvent event) {
+0 −7
Original line number Original line Diff line number Diff line
@@ -96,11 +96,4 @@ public interface DreamTouchHandler {
     * @param session
     * @param session
     */
     */
    void onSessionStart(TouchSession session);
    void onSessionStart(TouchSession session);

    /**
     * Invoked when a session has ended. This will be invoked for every session completion, even
     * those that are removed through {@link TouchSession#pop()}.
     * @param session
     */
    default void onSessionEnd(TouchSession session) { }
}
}
+0 −7
Original line number Original line Diff line number Diff line
@@ -127,11 +127,4 @@ public class HideComplicationTouchHandler implements DreamTouchHandler {
            }
            }
        });
        });
    }
    }

    @Override
    public void onSessionEnd(TouchSession session) {
        if (DEBUG) {
            Log.d(TAG, "onSessionEnd");
        }
    }
}
}
+46 −10
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import android.graphics.Region;
import android.testing.AndroidTestingRunner;
import android.testing.AndroidTestingRunner;
import android.util.DisplayMetrics;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.VelocityTracker;


@@ -111,6 +112,7 @@ public class BouncerSwipeTouchHandlerTest extends SysuiTestCase {
                mFlingAnimationUtilsClosing,
                mFlingAnimationUtilsClosing,
                TOUCH_REGION);
                TOUCH_REGION);


        when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
        when(mCentralSurfaces.getDisplayHeight()).thenReturn((float) SCREEN_HEIGHT_PX);
        when(mCentralSurfaces.getDisplayHeight()).thenReturn((float) SCREEN_HEIGHT_PX);
        when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
        when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
        when(mValueAnimatorCreator.create(anyFloat(), anyFloat())).thenReturn(mValueAnimator);
        when(mValueAnimatorCreator.create(anyFloat(), anyFloat())).thenReturn(mValueAnimator);
@@ -162,24 +164,58 @@ public class BouncerSwipeTouchHandlerTest extends SysuiTestCase {
                ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
                ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
        verify(mTouchSession).registerGestureListener(gestureListenerCaptor.capture());
        verify(mTouchSession).registerGestureListener(gestureListenerCaptor.capture());


        final float scrollAmount = .3f;
        final OnGestureListener gestureListener = gestureListenerCaptor.getValue();
        final float distanceY = SCREEN_HEIGHT_PX * scrollAmount;
        when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
        verifyScroll(.3f, Direction.UP, true, gestureListener);

        // Ensure that subsequent gestures are treated as expanding even if the bouncer state
        // changes.
        when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
        verifyScroll(.7f, Direction.UP, true, gestureListener);
    }

    /**
     * Makes sure collapse amount is proportional to scroll.
     */
    @Test
    public void testCollapseAmount() {
        mTouchHandler.onSessionStart(mTouchSession);
        ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
                ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
        verify(mTouchSession).registerGestureListener(gestureListenerCaptor.capture());

        final OnGestureListener gestureListener = gestureListenerCaptor.getValue();
        when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
        verifyScroll(.3f, Direction.DOWN, false, gestureListener);

        // Ensure that subsequent gestures are treated as collapsing even if the bouncer state
        // changes.
        when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
        verifyScroll(.7f, Direction.DOWN, false, gestureListener);
    }

    private enum Direction {
        DOWN,
        UP,
    }

    private void verifyScroll(float percent, Direction direction, boolean expanding,
            android.view.GestureDetector.OnGestureListener gestureListener) {

        final float distanceY = SCREEN_HEIGHT_PX * percent;


        final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
        final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
                0, SCREEN_HEIGHT_PX, 0);
                0, direction == Direction.UP ? SCREEN_HEIGHT_PX : 0, 0);
        final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
        final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
                0, SCREEN_HEIGHT_PX - distanceY, 0);
                0, direction == Direction.UP ? SCREEN_HEIGHT_PX - distanceY : distanceY, 0);


        assertThat(gestureListenerCaptor.getValue().onScroll(event1, event2, 0, distanceY))
        assertThat(gestureListener.onScroll(event1, event2, 0, distanceY))
                .isTrue();
                .isTrue();


        // Ensure only called once
        verify(mStatusBarKeyguardViewManager)
                .onPanelExpansionChanged(anyFloat(), anyBoolean(), anyBoolean());

        // Ensure correct expansion passed in.
        // Ensure correct expansion passed in.
        verify(mStatusBarKeyguardViewManager)
        verify(mStatusBarKeyguardViewManager)
                .onPanelExpansionChanged(eq(1 - scrollAmount), eq(false), eq(true));
                .onPanelExpansionChanged(
                        eq(expanding ? 1 - percent : percent), eq(false), eq(true));
    }
    }


    /**
    /**
+20 −0
Original line number Original line Diff line number Diff line
@@ -344,6 +344,26 @@ public class DreamOverlayTouchMonitorTest extends SysuiTestCase {
        verify(frontEventListener, never()).onInputEvent(any());
        verify(frontEventListener, never()).onInputEvent(any());
    }
    }


    @Test
    public void testPop() {
        final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);
        final DreamTouchHandler.TouchSession.Callback callback =
                Mockito.mock(DreamTouchHandler.TouchSession.Callback.class);

        final Environment environment = new Environment(Stream.of(touchHandler)
                .collect(Collectors.toCollection(HashSet::new)));

        final InputEvent initialEvent = Mockito.mock(InputEvent.class);
        environment.publishInputEvent(initialEvent);

        final DreamTouchHandler.TouchSession session = captureSession(touchHandler);
        session.registerCallback(callback);
        session.pop();
        environment.executeAll();

        verify(callback).onRemoved();
    }

    @Test
    @Test
    public void testPause() {
    public void testPause() {
        final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);
        final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);