Merge "Include shell+stage-split in legacy recents animations" into sc-v2-dev am: 340471f9e6

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15193283

Change-Id: I4bca1396b22fb8abc3eb623998e80b6d90e53342
This commit is contained in:
Evan Rosky
2021-07-08 22:15:33 +00:00
committed by Automerger Merge Worker
6 changed files with 61 additions and 6 deletions

View File

@@ -743,6 +743,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
mRecentsAnimationStartCallbacks.clear();
}
TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, false);
// Only add the callback to enable the input consumer after we actually have the controller
mStateCallback.runOnceAtState(STATE_APP_CONTROLLER_RECEIVED | STATE_GESTURE_STARTED,
mRecentsAnimationController::enableInputConsumer);
@@ -757,6 +759,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
mActivityInitListener.unregister();
mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED);
TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
// Defer clearing the controller and the targets until after we've updated the state
mRecentsAnimationController = null;
mRecentsAnimationTargets = null;
@@ -885,6 +889,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
break;
case LAST_TASK:
mStateCallback.setState(STATE_RESUME_LAST_TASK);
TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
break;
}
ActiveGestureLog.INSTANCE.addLog("onSettledOnEndTarget " + endTarget);
@@ -1726,6 +1731,9 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
@Override
public void onRecentsAnimationFinished(RecentsAnimationController controller) {
if (!controller.getFinishTargetIsLauncher()) {
TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
}
mRecentsAnimationController = null;
mRecentsAnimationTargets = null;
if (mRecentsView != null) {

View File

@@ -19,6 +19,7 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import android.graphics.Rect;
import android.util.ArraySet;
import android.view.RemoteAnimationTarget;
import androidx.annotation.BinderThread;
import androidx.annotation.UiThread;
@@ -39,6 +40,7 @@ public class RecentsAnimationCallbacks implements
com.android.systemui.shared.system.RecentsAnimationListener {
private final Set<RecentsAnimationListener> mListeners = new ArraySet<>();
private final SystemUiProxy mSystemUiProxy;
private final boolean mAllowMinimizeSplitScreen;
// TODO(141886704): Remove these references when they are no longer needed
@@ -46,7 +48,9 @@ public class RecentsAnimationCallbacks implements
private boolean mCancelled;
public RecentsAnimationCallbacks(boolean allowMinimizeSplitScreen) {
public RecentsAnimationCallbacks(SystemUiProxy systemUiProxy,
boolean allowMinimizeSplitScreen) {
mSystemUiProxy = systemUiProxy;
mAllowMinimizeSplitScreen = allowMinimizeSplitScreen;
}
@@ -89,8 +93,11 @@ public class RecentsAnimationCallbacks implements
RemoteAnimationTargetCompat[] appTargets,
RemoteAnimationTargetCompat[] wallpaperTargets,
Rect homeContentInsets, Rect minimizedHomeBounds) {
RemoteAnimationTarget[] nonAppTargets =
mSystemUiProxy.onGoingToRecentsLegacy(mCancelled);
RecentsAnimationTargets targets = new RecentsAnimationTargets(appTargets,
wallpaperTargets, homeContentInsets, minimizedHomeBounds);
wallpaperTargets, RemoteAnimationTargetCompat.wrap(nonAppTargets),
homeContentInsets, minimizedHomeBounds);
mController = new RecentsAnimationController(animationController,
mAllowMinimizeSplitScreen, this::onAnimationFinished);

View File

@@ -31,9 +31,9 @@ public class RecentsAnimationTargets extends RemoteAnimationTargets {
public final Rect minimizedHomeBounds;
public RecentsAnimationTargets(RemoteAnimationTargetCompat[] apps,
RemoteAnimationTargetCompat[] wallpapers, Rect homeContentInsets,
Rect minimizedHomeBounds) {
super(apps, wallpapers, new RemoteAnimationTargetCompat[0], MODE_CLOSING);
RemoteAnimationTargetCompat[] wallpapers, RemoteAnimationTargetCompat[] nonApps,
Rect homeContentInsets, Rect minimizedHomeBounds) {
super(apps, wallpapers, nonApps, MODE_CLOSING);
this.homeContentInsets = homeContentInsets;
this.minimizedHomeBounds = minimizedHomeBounds;
}

View File

@@ -34,6 +34,7 @@ import android.os.UserHandle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.RemoteAnimationAdapter;
import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
import com.android.launcher3.util.MainThreadInitializedObject;
@@ -612,6 +613,24 @@ public class SystemUiProxy implements ISystemUiProxy,
}
}
/**
* Call this when going to recents so that shell can set-up and provide appropriate leashes
* for animation (eg. DividerBar).
*
* @param cancel true if recents starting is being cancelled.
* @return RemoteAnimationTargets of windows that need to animate but only exist in shell.
*/
public RemoteAnimationTarget[] onGoingToRecentsLegacy(boolean cancel) {
if (mSplitScreen != null) {
try {
return mSplitScreen.onGoingToRecentsLegacy(cancel);
} catch (RemoteException e) {
Log.w(TAG, "Failed call onGoingToRecentsLegacy");
}
}
return null;
}
//
// One handed
//

View File

@@ -109,7 +109,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
final BaseActivityInterface activityInterface = gestureState.getActivityInterface();
mLastGestureState = gestureState;
mCallbacks = new RecentsAnimationCallbacks(activityInterface.allowMinimizeSplitScreen());
mCallbacks = new RecentsAnimationCallbacks(SystemUiProxy.INSTANCE.get(mCtx),
activityInterface.allowMinimizeSplitScreen());
mCallbacks.addListener(new RecentsAnimationCallbacks.RecentsAnimationListener() {
@Override
public void onRecentsAnimationStart(RecentsAnimationController controller,

View File

@@ -15,6 +15,7 @@
*/
package com.android.quickstep;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
@@ -452,6 +453,10 @@ public final class TaskViewUtils {
PendingAnimation pa = new PendingAnimation(RECENTS_LAUNCH_DURATION);
createRecentsWindowAnimator(taskView, skipLauncherChanges, appTargets, wallpaperTargets,
nonAppTargets, depthController, pa);
if (launcherClosing) {
// TODO(b/182592057): differentiate between "restore split" vs "launch fullscreen app"
TaskViewUtils.setDividerBarShown(nonAppTargets, true);
}
Animator childStateAnimation = null;
// Found a visible recents task that matches the opening app, lets launch the app from there
@@ -504,4 +509,19 @@ public final class TaskViewUtils {
stateManager.setCurrentAnimation(anim, childStateAnimation);
anim.addListener(windowAnimEndListener);
}
static void setDividerBarShown(RemoteAnimationTargetCompat[] nonApps, boolean shown) {
// TODO(b/182592057): make this part of the animations instead.
if (nonApps != null && nonApps.length > 0) {
for (int i = 0; i < nonApps.length; ++i) {
final RemoteAnimationTargetCompat targ = nonApps[i];
if (targ.windowType == TYPE_DOCK_DIVIDER) {
SurfaceControl.Transaction t = new SurfaceControl.Transaction();
t.setVisibility(targ.leash.getSurfaceControl(), shown);
t.apply();
t.close();
}
}
}
}
}