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

Commit 3fc57cb5 authored by Tony Huang's avatar Tony Huang
Browse files

Fix split divider flash if swipe again quickly

This bug caused by divider will be set to show when animation
cancelled, because split screen will show divider itself when
both split visible, this call might be unnecessary. Fix it by
removing these lines.

Add surface valid checking when running divider animation to
avoid crash caused if surface was released during animation.

Fix: 242823773
Bug: 246371786
Test: manual
Test: pass existing tests
Change-Id: I10aaf86e4164327b1c6c2f323c62b246c600228a
parent fd2c9eb0
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -881,11 +881,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        // properly cleaned up the screenshot without accidentally using it.
        mDeferredCleanupRecentsAnimationController = mRecentsAnimationController;
        mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED);

        if (mRecentsAnimationTargets != null) {
            setDividerShown(true /* shown */, false /* immediate */);
        }

        // Defer clearing the controller and the targets until after we've updated the state
        mRecentsAnimationController = null;
        mRecentsAnimationTargets = null;
@@ -1783,10 +1778,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        boolean wasVisible = mWasLauncherAlreadyVisible || mGestureStarted;
        mActivityInterface.onTransitionCancelled(wasVisible, mGestureState.getEndTarget());

        if (mRecentsAnimationTargets != null && wasVisible) {
            setDividerShown(true /* shown */, true /* immediate */);
        }

        // Leave the pending invisible flag, as it may be used by wallpaper open animation.
        if (mActivity != null) {
            mActivity.clearForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER);
+7 −3
Original line number Diff line number Diff line
@@ -672,7 +672,7 @@ public final class TaskViewUtils {
        for (int i = 0; i < nonApps.length; ++i) {
            final RemoteAnimationTargetCompat targ = nonApps[i];
            final SurfaceControl leash = targ.leash;
            if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null) {
            if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) {
                auxiliarySurfaces.add(leash);
                hasSurfaceToAnimate = true;
            }
@@ -685,8 +685,10 @@ public final class TaskViewUtils {
        dockFadeAnimator.addUpdateListener(valueAnimator -> {
            float progress = valueAnimator.getAnimatedFraction();
            for (SurfaceControl leash : auxiliarySurfaces) {
                if (leash != null && leash.isValid()) {
                    t.setAlpha(leash, shown ? progress : 1 - progress);
                }
            }
            t.apply();
        });
        dockFadeAnimator.addListener(new AnimatorListenerAdapter() {
@@ -706,8 +708,10 @@ public final class TaskViewUtils {
            public void onAnimationEnd(Animator animation) {
                if (!shown) {
                    for (SurfaceControl leash : auxiliarySurfaces) {
                        if (leash != null && leash.isValid()) {
                            t.hide(leash);
                        }
                    }
                    t.apply();
                }
                t.close();