Merge "Consolidate split divider show/hide behavior" into tm-qpr-dev
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 753d736..f3fb259 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -278,8 +278,6 @@
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 @@
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 @@
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 @@
} 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 @@
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 @@
}
mRecentsAnimationController.enableInputConsumer();
-
- // Start hiding the divider
- if (!mIsTransientTaskbar || mTaskbarAlreadyOpen || mIsTaskbarAllAppsOpen
- || mDividerHiddenBeforeAnimation) {
- setDividerShown(false /* shown */, true /* immediate */);
- }
}
private void computeRecentsScrollIfInvisible() {
@@ -2155,9 +2139,6 @@
@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 @@
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 @@
// "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 @@
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 */);
}
/**
diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java
index 725f9e7..dde5d55 100644
--- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java
+++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java
@@ -188,12 +188,8 @@
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
diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java
index da97df6..f0d0bdb 100644
--- a/quickstep/src/com/android/quickstep/TaskViewUtils.java
+++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java
@@ -679,28 +679,36 @@
/**
* 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;
}