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

Commit 064d88d8 authored by Jerry Chang's avatar Jerry Chang Committed by Android (Google) Code Review
Browse files

Merge "Consolidate split divider show/hide behavior" into tm-qpr-dev

parents eae3f348 99696bca
Loading
Loading
Loading
Loading
+17 −45
Original line number Diff line number Diff line
@@ -278,8 +278,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    private RunningWindowAnim[] mRunningWindowAnim;
    // Possible second animation running at the same time as mRunningWindowAnim
    private Animator mParallelRunningAnim;
    // Current running divider animation
    private ValueAnimator mDividerAnimator;
    private boolean mIsMotionPaused;
    private boolean mHasMotionEverBeenPaused;

@@ -325,8 +323,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    private final boolean mIsTransientTaskbar;
    // May be set to false when mIsTransientTaskbar is true.
    private boolean mCanSlowSwipeGoHome = true;
    private boolean mHasReachedOverviewThreshold = false;
    private boolean mDividerHiddenBeforeAnimation = false;
    // Indicates whether the divider is shown, only used when split screen is activated.
    private boolean mIsDividerShown = true;

    @Nullable
    private RemoteAnimationTargets.ReleaseCheck mSwipePipToHomeReleaseCheck = null;
@@ -767,10 +765,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,

    private void setIsLikelyToStartNewTask(boolean isLikelyToStartNewTask, boolean animate) {
        if (mIsLikelyToStartNewTask != isLikelyToStartNewTask) {
            if (isLikelyToStartNewTask && mIsTransientTaskbar) {
                setDividerShown(false /* shown */, true /* immediate */);
            }

            mIsLikelyToStartNewTask = isLikelyToStartNewTask;
            maybeUpdateRecentsAttachedState(animate);
        }
@@ -1110,9 +1104,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
                } else {
                    mStateCallback.setState(STATE_RESUME_LAST_TASK);
                }
                if (mRecentsAnimationTargets != null) {
                    setDividerShown(true /* shown */, true /* immediate */);
                }
                // Restore the divider as it resumes the last top-tasks.
                setDividerShown(true);
                break;
        }
        ActiveGestureLog.INSTANCE.addLog(
@@ -1284,9 +1277,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
            if (mRecentsAnimationController != null) {
                mRecentsAnimationController.detachNavigationBarFromApp(true);
            }
            if (mIsTransientTaskbar) {
                setDividerShown(false /* shown */, true /* immediate */);
            }
        } else if (endTarget == RECENTS) {
            if (mRecentsView != null) {
                int nearestPage = mRecentsView.getDestinationPage();
@@ -1686,12 +1676,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        }

        mRecentsAnimationController.enableInputConsumer();

        // Start hiding the divider
        if (!mIsTransientTaskbar || mTaskbarAlreadyOpen || mIsTaskbarAllAppsOpen
                || mDividerHiddenBeforeAnimation) {
            setDividerShown(false /* shown */, true /* immediate */);
        }
    }

    private void computeRecentsScrollIfInvisible() {
@@ -2155,9 +2139,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,

    @Override
    public void onRecentsAnimationFinished(RecentsAnimationController controller) {
        if (!controller.getFinishTargetIsLauncher()) {
            setDividerShown(true /* shown */, false /* immediate */);
        }
        mRecentsAnimationController = null;
        mRecentsAnimationTargets = null;
        if (mRecentsView != null) {
@@ -2257,18 +2238,23 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        boolean notSwipingToHome = mRecentsAnimationTargets != null
                && mGestureState.getEndTarget() != HOME;
        boolean setRecentsScroll = mRecentsViewScrollLinked && mRecentsView != null;
        float progress = Math.max(mCurrentShift.value, getScaleProgressDueToScroll());
        int scrollOffset = setRecentsScroll ? mRecentsView.getScrollOffset() : 0;
        if (progress > 0 || scrollOffset != 0) {
            // Hide the divider as the tasks start moving.
            setDividerShown(false);
        }
        for (RemoteTargetHandle remoteHandle : mRemoteTargetHandles) {
            AnimatorControllerWithResistance playbackController =
                    remoteHandle.getPlaybackController();
            if (playbackController != null) {
                playbackController.setProgress(Math.max(mCurrentShift.value,
                        getScaleProgressDueToScroll()), mDragLengthFactor);
                playbackController.setProgress(progress, mDragLengthFactor);
            }

            if (notSwipingToHome) {
                TaskViewSimulator taskViewSimulator = remoteHandle.getTaskViewSimulator();
                if (setRecentsScroll) {
                    taskViewSimulator.setScroll(mRecentsView.getScrollOffset());
                    taskViewSimulator.setScroll(scrollOffset);
                }
                taskViewSimulator.apply(remoteHandle.getTransformParams());
            }
@@ -2327,10 +2313,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,

        // "Catch up" with the displacement at mTaskbarCatchUpThreshold.
        if (displacement < mTaskbarCatchUpThreshold) {
            if (!mHasReachedOverviewThreshold) {
                setDividerShown(false /* shown */, true /* immediate */);
                mHasReachedOverviewThreshold = true;
            }
            return Utilities.mapToRange(displacement, mTaskbarAppWindowThreshold,
                    mTaskbarCatchUpThreshold, 0, mTaskbarCatchUpThreshold, ACCEL_DEACCEL);
        }
@@ -2338,23 +2320,13 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        return displacement;
    }

    private void setDividerShown(boolean shown, boolean immediate) {
        if (mRecentsAnimationTargets == null) {
            if (!shown) {
                mDividerHiddenBeforeAnimation = true;
            }
    private void setDividerShown(boolean shown) {
        if (mRecentsAnimationTargets == null || mIsDividerShown == shown) {
            return;
        }
        if (mDividerAnimator != null) {
            mDividerAnimator.cancel();
        }
        mDividerAnimator = TaskViewUtils.createSplitAuxiliarySurfacesAnimator(
                mRecentsAnimationTargets.nonApps, shown, (dividerAnimator) -> {
                    dividerAnimator.start();
                    if (immediate) {
                        dividerAnimator.end();
                    }
                });
        mIsDividerShown = shown;
        TaskViewUtils.createSplitAuxiliarySurfacesAnimator(
                mRecentsAnimationTargets.nonApps, shown, null /* animatorHandler */);
    }

    /**
+2 −6
Original line number Diff line number Diff line
@@ -188,12 +188,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
                        return;
                    }
                } else if (nonAppTargets.length > 0) {
                    TaskViewUtils.createSplitAuxiliarySurfacesAnimator(
                            nonAppTargets /* nonApps */,
                            true /*shown*/, dividerAnimator -> {
                                dividerAnimator.start();
                                dividerAnimator.end();
                            });
                    TaskViewUtils.createSplitAuxiliarySurfacesAnimator(nonAppTargets /* nonApps */,
                            true /*shown*/, null /* animatorHandler */);
                }
                if (mController != null) {
                    if (mLastAppearedTaskTarget == null
+19 −11
Original line number Diff line number Diff line
@@ -679,28 +679,36 @@ public final class TaskViewUtils {
    /**
     * Creates an animation to show/hide the auxiliary surfaces (aka. divider bar), only calling
     * {@param animatorHandler} if there are valid surfaces to animate.
     * Passing null handler to apply the visibility immediately.
     *
     * @return the animator animating the surfaces
     */
    public static ValueAnimator createSplitAuxiliarySurfacesAnimator(
            RemoteAnimationTarget[] nonApps, boolean shown,
            Consumer<ValueAnimator> animatorHandler) {
            @Nullable RemoteAnimationTarget[] nonApps, boolean shown,
            @Nullable Consumer<ValueAnimator> animatorHandler) {
        if (nonApps == null || nonApps.length == 0) {
            return null;
        }

        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
        List<SurfaceControl> auxiliarySurfaces = new ArrayList<>(nonApps.length);
        boolean hasSurfaceToAnimate = false;
        for (int i = 0; i < nonApps.length; ++i) {
            final RemoteAnimationTarget targ = nonApps[i];
            final SurfaceControl leash = targ.leash;
            if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) {
        List<SurfaceControl> auxiliarySurfaces = new ArrayList<>();
        for (RemoteAnimationTarget target : nonApps) {
            final SurfaceControl leash = target.leash;
            if (target.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) {
                auxiliarySurfaces.add(leash);
                hasSurfaceToAnimate = true;
            }
        }
        if (!hasSurfaceToAnimate) {
        if (auxiliarySurfaces.isEmpty()) {
            return null;
        }

        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
        if (animatorHandler == null) {
            // Apply the visibility directly without fade animation.
            for (SurfaceControl leash : auxiliarySurfaces) {
                t.setVisibility(leash, shown);
            }
            t.apply();
            t.close();
            return null;
        }