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

Commit f7b4e7f4 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Limit starting bounds of swipe to animation start rect

* If the starting point is greater than that of the current
device's width (in either positive or negative direction),
reset the starting rect to be fullscreen task bounds
* More details at b/228829958#comment12

Fixes: 228829958
Test: Reboot device and swipe up from home immediately,
app doesn't fling from the side.
Tested with portrait and landscape launcher.
Tested with fake landscape launcher.

Change-Id: I6ea24e30e9de5716b7830f487b2ed63f56598c50
parent f7a48aae
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -266,6 +266,13 @@ public abstract class SwipeUpAnimationLogic implements
        RectF cropRectF = new RectF(taskViewSimulator.getCurrentCropRect());
        // Move the startRect to Launcher space as floatingIconView runs in Launcher
        Matrix windowToHomePositionMap = new Matrix();

        // If the start rect ends up overshooting too much to the left/right offscreen, bring it
        // back to fullscreen. This can happen when the recentsScroll value isn't aligned with
        // the pageScroll value for a given taskView, see b/228829958#comment12
        mRemoteTargetHandles[0].getTaskViewSimulator().getOrientationState().getOrientationHandler()
                .fixBoundsForHomeAnimStartRect(startRect, mDp);

        homeToWindowPositionMap.invert(windowToHomePositionMap);
        windowToHomePositionMap.mapRect(startRect);

+11 −0
Original line number Diff line number Diff line
@@ -102,6 +102,17 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
        velocity.set(-oldY, oldX);
    }

    @Override
    public void fixBoundsForHomeAnimStartRect(RectF outStartRect, DeviceProfile deviceProfile) {
        // We don't need to check the "top" value here because the startRect is in the orientation
        // of the app, not of the fixed portrait launcher.
        if (outStartRect.left > deviceProfile.heightPx) {
            outStartRect.offsetTo(0, outStartRect.top);
        } else if (outStartRect.left < -deviceProfile.heightPx) {
            outStartRect.offsetTo(0, outStartRect.top);
        }
    }

    @Override
    public <T> void setPrimary(T target, Int2DAction<T> action, int param) {
        action.call(target, 0, param);
+6 −0
Original line number Diff line number Diff line
@@ -226,6 +226,12 @@ public interface PagedOrientationHandler {
     */
    void adjustFloatingIconStartVelocity(PointF velocity);

    /**
     * Ensures that outStartRect left bound is within the DeviceProfile's visual boundaries
     * @param outStartRect The start rect that will directly be modified
     */
    void fixBoundsForHomeAnimStartRect(RectF outStartRect, DeviceProfile deviceProfile);

    class ChildBounds {

        public final int primaryDimension;
+9 −0
Original line number Diff line number Diff line
@@ -101,6 +101,15 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
        //no-op
    }

    @Override
    public void fixBoundsForHomeAnimStartRect(RectF outStartRect, DeviceProfile deviceProfile) {
        if (outStartRect.left > deviceProfile.widthPx) {
            outStartRect.offsetTo(0, outStartRect.top);
        } else if (outStartRect.left < -deviceProfile.widthPx) {
            outStartRect.offsetTo(0, outStartRect.top);
        }
    }

    @Override
    public <T> void setPrimary(T target, Int2DAction<T> action, int param) {
        action.call(target, param, 0);