From 80ca459e7d8664dca8062d7de337748ff09bd56b Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Thu, 19 Aug 2021 15:29:30 -0700 Subject: [PATCH] Provide app-process tokens to remote transitions so they can be boosted The app process token is required for shell to request delegated transition animators to be boosted. Bug: 183993977 Test: add logging in WPC.setRunningRemoteAnimation and verify calls during transitions Change-Id: Ide2dd3e77714cca8e85e409c8d88c69c20122827 --- .../launcher3/LauncherInitListener.java | 10 ---------- .../launcher3/QuickstepTransitionManager.java | 11 +++++++---- .../com/android/quickstep/RecentsActivity.java | 5 +++-- .../quickstep/TaskAnimationManager.java | 3 ++- .../quickstep/util/ActivityInitListener.java | 18 ------------------ .../util/RemoteAnimationProvider.java | 18 ------------------ .../util/SplitSelectStateController.java | 3 ++- 7 files changed, 14 insertions(+), 54 deletions(-) diff --git a/quickstep/src/com/android/launcher3/LauncherInitListener.java b/quickstep/src/com/android/launcher3/LauncherInitListener.java index 5fc79f078f..35151f1a68 100644 --- a/quickstep/src/com/android/launcher3/LauncherInitListener.java +++ b/quickstep/src/com/android/launcher3/LauncherInitListener.java @@ -17,11 +17,8 @@ package com.android.launcher3; import android.animation.AnimatorSet; import android.annotation.TargetApi; -import android.content.Context; -import android.content.Intent; import android.os.Build; import android.os.CancellationSignal; -import android.os.Handler; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.RemoteAnimationProvider; @@ -78,11 +75,4 @@ public class LauncherInitListener extends ActivityInitListener { mRemoteAnimationProvider = null; super.unregister(); } - - @Override - public void registerAndStartActivity(Intent intent, RemoteAnimationProvider animProvider, - Context context, Handler handler, long duration) { - mRemoteAnimationProvider = animProvider; - super.registerAndStartActivity(intent, animProvider, context, handler, duration); - } } diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 89cc1f614c..0c32fa593f 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -269,7 +269,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener long statusBarTransitionDelay = duration - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY; RemoteAnimationAdapterCompat adapterCompat = - new RemoteAnimationAdapterCompat(runner, duration, statusBarTransitionDelay); + new RemoteAnimationAdapterCompat(runner, duration, statusBarTransitionDelay, + mLauncher.getIApplicationThread()); return new ActivityOptionsWrapper( ActivityOptionsCompat.makeRemoteAnimation(adapterCompat), onEndCallback); } @@ -1050,7 +1051,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener new RemoteAnimationAdapterCompat( new LauncherAnimationRunner(mHandler, mWallpaperOpenRunner, false /* startAtFrontOfQueue */), - CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */)); + CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */, + mLauncher.getIApplicationThread())); if (KEYGUARD_ANIMATION.get()) { mKeyguardGoingAwayRunner = createWallpaperOpenRunner(true /* fromUnlock */); @@ -1060,7 +1062,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener new LauncherAnimationRunner( mHandler, mKeyguardGoingAwayRunner, true /* startAtFrontOfQueue */), - CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */)); + CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */, + mLauncher.getIApplicationThread())); } new ActivityCompat(mLauncher).registerRemoteAnimations(definition); @@ -1078,7 +1081,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener mWallpaperOpenTransitionRunner = createWallpaperOpenRunner(false /* fromUnlock */); mLauncherOpenTransition = RemoteAnimationAdapterCompat.buildRemoteTransition( new LauncherAnimationRunner(mHandler, mWallpaperOpenTransitionRunner, - false /* startAtFrontOfQueue */)); + false /* startAtFrontOfQueue */), mLauncher.getIApplicationThread()); mLauncherOpenTransition.addHomeOpenCheck(mLauncher.getComponentName()); SystemUiProxy.INSTANCE.getNoCreate().registerRemoteTransition(mLauncherOpenTransition); } diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index cc6cfd72f7..d1f87ab1eb 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -224,7 +224,7 @@ public final class RecentsActivity extends StatefulActivity { RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat( wrapper, RECENTS_LAUNCH_DURATION, RECENTS_LAUNCH_DURATION - STATUS_BAR_TRANSITION_DURATION - - STATUS_BAR_TRANSITION_PRE_DELAY); + - STATUS_BAR_TRANSITION_PRE_DELAY, getIApplicationThread()); final ActivityOptionsWrapper activityOptions = new ActivityOptionsWrapper( ActivityOptionsCompat.makeRemoteAnimation(adapterCompat), onEndCallback); @@ -368,7 +368,8 @@ public final class RecentsActivity extends StatefulActivity { LauncherAnimationRunner runner = new LauncherAnimationRunner( getMainThreadHandler(), mAnimationToHomeFactory, true); RemoteAnimationAdapterCompat adapterCompat = - new RemoteAnimationAdapterCompat(runner, HOME_APPEAR_DURATION, 0); + new RemoteAnimationAdapterCompat(runner, HOME_APPEAR_DURATION, 0, + getIApplicationThread()); startActivity(createHomeIntent(), ActivityOptionsCompat.makeRemoteAnimation(adapterCompat).toBundle()); } diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java index fe07cbdcce..8dc54634b2 100644 --- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java +++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java @@ -171,7 +171,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn if (ENABLE_SHELL_TRANSITIONS) { RemoteTransitionCompat transition = new RemoteTransitionCompat(mCallbacks, - mController != null ? mController.getController() : null); + mController != null ? mController.getController() : null, + mCtx.getIApplicationThread()); Bundle options = ActivityOptionsCompat.makeRemoteTransition(transition) .setTransientLaunch().toBundle(); mCtx.startActivity(intent, options); diff --git a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java index b9879ab82b..aeec36f63c 100644 --- a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java +++ b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java @@ -15,11 +15,6 @@ */ package com.android.quickstep.util; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; - import com.android.launcher3.BaseActivity; import com.android.launcher3.util.ActivityTracker; import com.android.launcher3.util.ActivityTracker.SchedulerCallback; @@ -75,17 +70,4 @@ public class ActivityInitListener implements mIsRegistered = false; mOnInitListener = null; } - - /** - * Starts the given intent with the provided animation. Unlike {@link #register(Intent)}, this - * method will not call {@link #init} if the activity already exists, it will only call it when - * we get handleIntent() for the provided intent that we're starting. - */ - public void registerAndStartActivity(Intent intent, RemoteAnimationProvider animProvider, - Context context, Handler handler, long duration) { - register(); - - Bundle options = animProvider.toActivityOptions(handler, duration, context).toBundle(); - context.startActivity(new Intent(intent), options); - } } diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java index 98dbd47ba4..ee82ae67df 100644 --- a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java +++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java @@ -16,32 +16,14 @@ package com.android.quickstep.util; import android.animation.AnimatorSet; -import android.app.ActivityOptions; -import android.content.Context; -import android.os.Handler; -import com.android.launcher3.LauncherAnimationRunner; -import com.android.launcher3.LauncherAnimationRunner.RemoteAnimationFactory; -import com.android.systemui.shared.system.ActivityOptionsCompat; -import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; public abstract class RemoteAnimationProvider { - RemoteAnimationFactory mAnimationRunner; - public abstract AnimatorSet createWindowAnimation(RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets); - ActivityOptions toActivityOptions(Handler handler, long duration, Context context) { - mAnimationRunner = (transit, appTargets, wallpaperTargets, nonApps, result) -> - result.setAnimation(createWindowAnimation(appTargets, wallpaperTargets), context); - final LauncherAnimationRunner wrapper = new LauncherAnimationRunner( - handler, mAnimationRunner, false /* startAtFrontOfQueue */); - return ActivityOptionsCompat.makeRemoteAnimation( - new RemoteAnimationAdapterCompat(wrapper, duration, 0)); - } - /** * @return the target with the lowest opaque layer for a certain app animation, or null. */ diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java index 3069504943..c9c223273d 100644 --- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java +++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java @@ -89,7 +89,8 @@ public class SplitSelectStateController { new RemoteSplitLaunchTransitionRunner(task1, task2); mSystemUiProxy.startTasks(taskIds[0], null /* mainOptions */, taskIds[1], null /* sideOptions */, STAGE_POSITION_BOTTOM_OR_RIGHT, - new RemoteTransitionCompat(animationRunner, MAIN_EXECUTOR)); + new RemoteTransitionCompat(animationRunner, MAIN_EXECUTOR, + ActivityThread.currentActivityThread().getApplicationThread())); } else { RemoteSplitLaunchAnimationRunner animationRunner = new RemoteSplitLaunchAnimationRunner(task1, task2, callback);