Loading quickstep/src/com/android/launcher3/LauncherAnimationRunner.java +2 −18 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ import java.lang.ref.WeakReference; * reference to the runner, leaving only the weak ref from the runner. */ @TargetApi(Build.VERSION_CODES.P) public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat { public class LauncherAnimationRunner extends RemoteAnimationRunnerCompat { private static final RemoteAnimationFactory DEFAULT_FACTORY = (transit, appTargets, wallpaperTargets, nonAppTargets, result) -> Loading Loading @@ -99,22 +99,6 @@ public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat { } } // Called only in R platform @BinderThread public void onAnimationStart(RemoteAnimationTarget[] appTargets, RemoteAnimationTarget[] wallpaperTargets, Runnable runnable) { onAnimationStart(0 /* transit */, appTargets, wallpaperTargets, new RemoteAnimationTarget[0], runnable); } // Called only in Q platform @BinderThread @Deprecated public void onAnimationStart(RemoteAnimationTarget[] appTargets, Runnable runnable) { onAnimationStart(appTargets, new RemoteAnimationTarget[0], runnable); } private RemoteAnimationFactory getFactory() { RemoteAnimationFactory factory = mFactory.get(); return factory != null ? factory : DEFAULT_FACTORY; Loading @@ -133,7 +117,7 @@ public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat { */ @BinderThread @Override public void onAnimationCancelled() { public void onAnimationCancelled(boolean isKeyguardOccluded) { postAsyncCallback(mHandler, () -> { finishExistingAnimation(); getFactory().onAnimationCancelled(); Loading quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +40 −21 Original line number Diff line number Diff line Loading @@ -16,11 +16,19 @@ package com.android.launcher3; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING; import static android.view.RemoteAnimationTarget.MODE_CLOSING; import static android.view.RemoteAnimationTarget.MODE_OPENING; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; import static android.window.StartingWindowInfo.STARTING_WINDOW_TYPE_NONE; import static android.window.StartingWindowInfo.STARTING_WINDOW_TYPE_SPLASH_SCREEN; import static android.window.TransitionFilter.CONTAINER_ORDER_TOP; import static com.android.launcher3.BaseActivity.INVISIBLE_ALL; import static com.android.launcher3.BaseActivity.INVISIBLE_BY_APP_TRANSITIONS; Loading Loading @@ -81,6 +89,8 @@ import android.provider.Settings; import android.util.Pair; import android.util.Size; import android.view.CrossWindowBlurListeners; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; import android.view.RemoteAnimationTarget; import android.view.SurfaceControl; import android.view.View; Loading @@ -90,6 +100,8 @@ import android.view.WindowManager; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; import android.window.RemoteTransition; import android.window.TransitionFilter; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -134,10 +146,7 @@ import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.system.BlurUtils; import com.android.systemui.shared.system.InteractionJankMonitorWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import com.android.systemui.shared.system.RemoteAnimationDefinitionCompat; import com.android.systemui.shared.system.RemoteAnimationRunnerCompat; import com.android.systemui.shared.system.RemoteTransitionCompat; import com.android.wm.shell.startingsurface.IStartingWindowListener; import java.util.ArrayList; Loading Loading @@ -216,7 +225,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener private RemoteAnimationFactory mKeyguardGoingAwayRunner; private RemoteAnimationFactory mWallpaperOpenTransitionRunner; private RemoteTransitionCompat mLauncherOpenTransition; private RemoteTransition mLauncherOpenTransition; private LauncherBackAnimationController mBackAnimationController; private final AnimatorListenerAdapter mForceInvisibleListener = new AnimatorListenerAdapter() { Loading Loading @@ -293,12 +302,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener long statusBarTransitionDelay = duration - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY; RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat(runner, duration, statusBarTransitionDelay, mLauncher.getIApplicationThread()); ActivityOptions options = ActivityOptions.makeRemoteAnimation( adapterCompat.getWrapped(), adapterCompat.getRemoteTransition().getTransition()); new RemoteAnimationAdapter(runner, duration, statusBarTransitionDelay), new RemoteTransition(runner.toRemoteTransition(), mLauncher.getIApplicationThread())); return new ActivityOptionsWrapper(options, onEndCallback); } Loading Loading @@ -1074,28 +1081,26 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener if (hasControlRemoteAppTransitionPermission()) { mWallpaperOpenRunner = createWallpaperOpenRunner(false /* fromUnlock */); RemoteAnimationDefinitionCompat definition = new RemoteAnimationDefinitionCompat(); RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); definition.addRemoteAnimation(WindowManager.TRANSIT_OLD_WALLPAPER_OPEN, WindowConfiguration.ACTIVITY_TYPE_STANDARD, new RemoteAnimationAdapterCompat( new RemoteAnimationAdapter( new LauncherAnimationRunner(mHandler, mWallpaperOpenRunner, false /* startAtFrontOfQueue */), CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */, mLauncher.getIApplicationThread())); CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */)); if (KEYGUARD_ANIMATION.get()) { mKeyguardGoingAwayRunner = createWallpaperOpenRunner(true /* fromUnlock */); definition.addRemoteAnimation( WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER, new RemoteAnimationAdapterCompat( new RemoteAnimationAdapter( new LauncherAnimationRunner( mHandler, mKeyguardGoingAwayRunner, true /* startAtFrontOfQueue */), CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */, mLauncher.getIApplicationThread())); CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */)); } mLauncher.registerRemoteAnimations(definition.getWrapped()); mLauncher.registerRemoteAnimations(definition); } } Loading @@ -1108,11 +1113,25 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener } if (hasControlRemoteAppTransitionPermission()) { mWallpaperOpenTransitionRunner = createWallpaperOpenRunner(false /* fromUnlock */); mLauncherOpenTransition = RemoteAnimationAdapterCompat.buildRemoteTransition( mLauncherOpenTransition = new RemoteTransition( new LauncherAnimationRunner(mHandler, mWallpaperOpenTransitionRunner, false /* startAtFrontOfQueue */), mLauncher.getIApplicationThread()); mLauncherOpenTransition.addHomeOpenCheck(mLauncher.getComponentName()); SystemUiProxy.INSTANCE.get(mLauncher).registerRemoteTransition(mLauncherOpenTransition); false /* startAtFrontOfQueue */).toRemoteTransition(), mLauncher.getIApplicationThread()); TransitionFilter homeCheck = new TransitionFilter(); // No need to handle the transition that also dismisses keyguard. homeCheck.mNotFlags = TRANSIT_FLAG_KEYGUARD_GOING_AWAY; homeCheck.mRequirements = new TransitionFilter.Requirement[]{new TransitionFilter.Requirement(), new TransitionFilter.Requirement()}; homeCheck.mRequirements[0].mActivityType = ACTIVITY_TYPE_HOME; homeCheck.mRequirements[0].mTopActivity = mLauncher.getComponentName(); homeCheck.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT}; homeCheck.mRequirements[0].mOrder = CONTAINER_ORDER_TOP; homeCheck.mRequirements[1].mActivityType = ACTIVITY_TYPE_STANDARD; homeCheck.mRequirements[1].mModes = new int[]{TRANSIT_CLOSE, TRANSIT_TO_BACK}; SystemUiProxy.INSTANCE.get(mLauncher) .registerRemoteTransition(mLauncherOpenTransition, homeCheck); } if (mBackAnimationController != null) { mBackAnimationController.registerBackCallbacks(mHandler); Loading quickstep/src/com/android/quickstep/RecentsActivity.java +8 −12 Original line number Diff line number Diff line Loading @@ -37,9 +37,11 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.Display; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationTarget; import android.view.SurfaceControl.Transaction; import android.view.View; import android.window.RemoteTransition; import android.window.SplashScreen; import androidx.annotation.Nullable; Loading Loading @@ -79,7 +81,6 @@ import com.android.quickstep.util.TISBindHelper; import com.android.quickstep.views.OverviewActionsView; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -259,13 +260,11 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> { final LauncherAnimationRunner wrapper = new LauncherAnimationRunner( mUiHandler, mActivityLaunchAnimationRunner, true /* startAtFrontOfQueue */); RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat( wrapper, RECENTS_LAUNCH_DURATION, RECENTS_LAUNCH_DURATION - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY, getIApplicationThread()); final ActivityOptions options = ActivityOptions.makeRemoteAnimation( adapterCompat.getWrapped(), adapterCompat.getRemoteTransition().getTransition()); new RemoteAnimationAdapter(wrapper, RECENTS_LAUNCH_DURATION, RECENTS_LAUNCH_DURATION - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY), new RemoteTransition(wrapper.toRemoteTransition(), getIApplicationThread())); final ActivityOptionsWrapper activityOptions = new ActivityOptionsWrapper(options, onEndCallback); activityOptions.options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); Loading Loading @@ -401,12 +400,9 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> { private void startHomeInternal() { LauncherAnimationRunner runner = new LauncherAnimationRunner( getMainThreadHandler(), mAnimationToHomeFactory, true); RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat(runner, HOME_APPEAR_DURATION, 0, getIApplicationThread()); ActivityOptions options = ActivityOptions.makeRemoteAnimation( adapterCompat.getWrapped(), adapterCompat.getRemoteTransition().getTransition()); new RemoteAnimationAdapter(runner, HOME_APPEAR_DURATION, 0), new RemoteTransition(runner.toRemoteTransition(), getIApplicationThread())); startHomeIntentSafely(this, options.toBundle()); } Loading quickstep/src/com/android/quickstep/SystemUiProxy.java +19 −18 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationTarget; import android.view.SurfaceControl; import android.window.IOnBackInvokedCallback; import android.window.RemoteTransition; import android.window.TransitionFilter; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; Loading @@ -53,7 +55,6 @@ import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.SplitConfigurationOptions; import com.android.systemui.shared.recents.ISystemUiProxy; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.system.RemoteTransitionCompat; import com.android.systemui.shared.system.smartspace.ILauncherUnlockAnimationController; import com.android.systemui.shared.system.smartspace.ISysuiUnlockAnimationController; import com.android.systemui.shared.system.smartspace.SmartspaceState; Loading @@ -73,6 +74,7 @@ import com.android.wm.shell.util.GroupedRecentTaskInfo; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; /** * Holds the reference to SystemUI. Loading Loading @@ -108,7 +110,8 @@ public class SystemUiProxy implements ISystemUiProxy { private IStartingWindowListener mStartingWindowListener; private ILauncherUnlockAnimationController mLauncherUnlockAnimationController; private IRecentTasksListener mRecentTasksListener; private final ArrayList<RemoteTransitionCompat> mRemoteTransitions = new ArrayList<>(); private final LinkedHashMap<RemoteTransition, TransitionFilter> mRemoteTransitions = new LinkedHashMap<>(); private IOnBackInvokedCallback mBackToLauncherCallback; // Used to dedupe calls to SystemUI Loading Loading @@ -195,9 +198,7 @@ public class SystemUiProxy implements ISystemUiProxy { if (mSysuiUnlockAnimationController != null && mLauncherUnlockAnimationController != null) { setLauncherUnlockAnimationController(mLauncherUnlockAnimationController); } for (int i = mRemoteTransitions.size() - 1; i >= 0; --i) { registerRemoteTransition(mRemoteTransitions.get(i)); } new LinkedHashMap<>(mRemoteTransitions).forEach(this::registerRemoteTransition); if (mRecentTasksListener != null && mRecentTasks != null) { registerRecentTasksListener(mRecentTasksListener); } Loading Loading @@ -536,11 +537,11 @@ public class SystemUiProxy implements ISystemUiProxy { /** Start multiple tasks in split-screen simultaneously. */ public void startTasks(int taskId1, Bundle options1, int taskId2, Bundle options2, @SplitConfigurationOptions.StagePosition int splitPosition, float splitRatio, RemoteTransitionCompat remoteTransition, InstanceId instanceId) { RemoteTransition remoteTransition, InstanceId instanceId) { if (mSystemUiProxy != null) { try { mSplitScreen.startTasks(taskId1, options1, taskId2, options2, splitPosition, splitRatio, remoteTransition.getTransition(), instanceId); splitRatio, remoteTransition, instanceId); } catch (RemoteException e) { Log.w(TAG, "Failed call startTasks"); } Loading @@ -550,12 +551,12 @@ public class SystemUiProxy implements ISystemUiProxy { public void startIntentAndTask(PendingIntent pendingIntent, Intent fillInIntent, Bundle options1, int taskId, Bundle options2, @SplitConfigurationOptions.StagePosition int splitPosition, float splitRatio, RemoteTransitionCompat remoteTransition, InstanceId instanceId) { RemoteTransition remoteTransition, InstanceId instanceId) { if (mSystemUiProxy != null) { try { mSplitScreen.startIntentAndTask(pendingIntent, fillInIntent, options1, taskId, options2, splitPosition, splitRatio, remoteTransition.getTransition(), instanceId); remoteTransition, instanceId); } catch (RemoteException e) { Log.w(TAG, "Failed call startIntentAndTask"); } Loading @@ -564,11 +565,11 @@ public class SystemUiProxy implements ISystemUiProxy { public void startShortcutAndTask(ShortcutInfo shortcutInfo, Bundle options1, int taskId, Bundle options2, @SplitConfigurationOptions.StagePosition int splitPosition, float splitRatio, RemoteTransitionCompat remoteTransition, InstanceId instanceId) { float splitRatio, RemoteTransition remoteTransition, InstanceId instanceId) { if (mSystemUiProxy != null) { try { mSplitScreen.startShortcutAndTask(shortcutInfo, options1, taskId, options2, splitPosition, splitRatio, remoteTransition.getTransition(), instanceId); splitPosition, splitRatio, remoteTransition, instanceId); } catch (RemoteException e) { Log.w(TAG, "Failed call startShortcutAndTask"); } Loading Loading @@ -709,24 +710,24 @@ public class SystemUiProxy implements ISystemUiProxy { // Remote transitions // public void registerRemoteTransition(RemoteTransitionCompat remoteTransition) { public void registerRemoteTransition( RemoteTransition remoteTransition, TransitionFilter filter) { if (mShellTransitions != null) { try { mShellTransitions.registerRemote(remoteTransition.getFilter(), remoteTransition.getTransition()); mShellTransitions.registerRemote(filter, remoteTransition); } catch (RemoteException e) { Log.w(TAG, "Failed call registerRemoteTransition"); } } if (!mRemoteTransitions.contains(remoteTransition)) { mRemoteTransitions.add(remoteTransition); if (!mRemoteTransitions.containsKey(remoteTransition)) { mRemoteTransitions.put(remoteTransition, filter); } } public void unregisterRemoteTransition(RemoteTransitionCompat remoteTransition) { public void unregisterRemoteTransition(RemoteTransition remoteTransition) { if (mShellTransitions != null) { try { mShellTransitions.unregisterRemote(remoteTransition.getTransition()); mShellTransitions.unregisterRemote(remoteTransition); } catch (RemoteException e) { Log.w(TAG, "Failed call registerRemoteTransition"); } Loading quickstep/src/com/android/quickstep/TaskAnimationManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.quickstep.GestureState.STATE_RECENTS_ANIMATION_INITIALIZED; import static com.android.quickstep.GestureState.STATE_RECENTS_ANIMATION_STARTED; import static com.android.systemui.shared.system.RemoteTransitionCompat.newRemoteTransition; import android.app.ActivityManager; import android.app.ActivityOptions; Loading @@ -29,6 +30,7 @@ import android.content.Intent; import android.os.SystemProperties; import android.util.Log; import android.view.RemoteAnimationTarget; import android.window.RemoteTransition; import androidx.annotation.Nullable; import androidx.annotation.UiThread; Loading @@ -39,7 +41,6 @@ import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.RemoteTransitionCompat; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; Loading Loading @@ -223,11 +224,10 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn mCallbacks.addListener(listener); if (ENABLE_SHELL_TRANSITIONS) { RemoteTransitionCompat transition = new RemoteTransitionCompat(mCallbacks, RemoteTransition transition = newRemoteTransition(mCallbacks, mController != null ? mController.getController() : null, mCtx.getIApplicationThread()); final ActivityOptions options = ActivityOptions.makeRemoteTransition( transition.getTransition()); final ActivityOptions options = ActivityOptions.makeRemoteTransition(transition); // Allowing to pause Home if Home is top activity and Recents is not Home. So when user // start home when recents animation is playing, the home activity can be resumed again // to let the transition controller collect Home activity. Loading Loading
quickstep/src/com/android/launcher3/LauncherAnimationRunner.java +2 −18 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ import java.lang.ref.WeakReference; * reference to the runner, leaving only the weak ref from the runner. */ @TargetApi(Build.VERSION_CODES.P) public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat { public class LauncherAnimationRunner extends RemoteAnimationRunnerCompat { private static final RemoteAnimationFactory DEFAULT_FACTORY = (transit, appTargets, wallpaperTargets, nonAppTargets, result) -> Loading Loading @@ -99,22 +99,6 @@ public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat { } } // Called only in R platform @BinderThread public void onAnimationStart(RemoteAnimationTarget[] appTargets, RemoteAnimationTarget[] wallpaperTargets, Runnable runnable) { onAnimationStart(0 /* transit */, appTargets, wallpaperTargets, new RemoteAnimationTarget[0], runnable); } // Called only in Q platform @BinderThread @Deprecated public void onAnimationStart(RemoteAnimationTarget[] appTargets, Runnable runnable) { onAnimationStart(appTargets, new RemoteAnimationTarget[0], runnable); } private RemoteAnimationFactory getFactory() { RemoteAnimationFactory factory = mFactory.get(); return factory != null ? factory : DEFAULT_FACTORY; Loading @@ -133,7 +117,7 @@ public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat { */ @BinderThread @Override public void onAnimationCancelled() { public void onAnimationCancelled(boolean isKeyguardOccluded) { postAsyncCallback(mHandler, () -> { finishExistingAnimation(); getFactory().onAnimationCancelled(); Loading
quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +40 −21 Original line number Diff line number Diff line Loading @@ -16,11 +16,19 @@ package com.android.launcher3; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING; import static android.view.RemoteAnimationTarget.MODE_CLOSING; import static android.view.RemoteAnimationTarget.MODE_OPENING; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; import static android.window.StartingWindowInfo.STARTING_WINDOW_TYPE_NONE; import static android.window.StartingWindowInfo.STARTING_WINDOW_TYPE_SPLASH_SCREEN; import static android.window.TransitionFilter.CONTAINER_ORDER_TOP; import static com.android.launcher3.BaseActivity.INVISIBLE_ALL; import static com.android.launcher3.BaseActivity.INVISIBLE_BY_APP_TRANSITIONS; Loading Loading @@ -81,6 +89,8 @@ import android.provider.Settings; import android.util.Pair; import android.util.Size; import android.view.CrossWindowBlurListeners; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; import android.view.RemoteAnimationTarget; import android.view.SurfaceControl; import android.view.View; Loading @@ -90,6 +100,8 @@ import android.view.WindowManager; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; import android.window.RemoteTransition; import android.window.TransitionFilter; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -134,10 +146,7 @@ import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.system.BlurUtils; import com.android.systemui.shared.system.InteractionJankMonitorWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import com.android.systemui.shared.system.RemoteAnimationDefinitionCompat; import com.android.systemui.shared.system.RemoteAnimationRunnerCompat; import com.android.systemui.shared.system.RemoteTransitionCompat; import com.android.wm.shell.startingsurface.IStartingWindowListener; import java.util.ArrayList; Loading Loading @@ -216,7 +225,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener private RemoteAnimationFactory mKeyguardGoingAwayRunner; private RemoteAnimationFactory mWallpaperOpenTransitionRunner; private RemoteTransitionCompat mLauncherOpenTransition; private RemoteTransition mLauncherOpenTransition; private LauncherBackAnimationController mBackAnimationController; private final AnimatorListenerAdapter mForceInvisibleListener = new AnimatorListenerAdapter() { Loading Loading @@ -293,12 +302,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener long statusBarTransitionDelay = duration - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY; RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat(runner, duration, statusBarTransitionDelay, mLauncher.getIApplicationThread()); ActivityOptions options = ActivityOptions.makeRemoteAnimation( adapterCompat.getWrapped(), adapterCompat.getRemoteTransition().getTransition()); new RemoteAnimationAdapter(runner, duration, statusBarTransitionDelay), new RemoteTransition(runner.toRemoteTransition(), mLauncher.getIApplicationThread())); return new ActivityOptionsWrapper(options, onEndCallback); } Loading Loading @@ -1074,28 +1081,26 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener if (hasControlRemoteAppTransitionPermission()) { mWallpaperOpenRunner = createWallpaperOpenRunner(false /* fromUnlock */); RemoteAnimationDefinitionCompat definition = new RemoteAnimationDefinitionCompat(); RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); definition.addRemoteAnimation(WindowManager.TRANSIT_OLD_WALLPAPER_OPEN, WindowConfiguration.ACTIVITY_TYPE_STANDARD, new RemoteAnimationAdapterCompat( new RemoteAnimationAdapter( new LauncherAnimationRunner(mHandler, mWallpaperOpenRunner, false /* startAtFrontOfQueue */), CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */, mLauncher.getIApplicationThread())); CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */)); if (KEYGUARD_ANIMATION.get()) { mKeyguardGoingAwayRunner = createWallpaperOpenRunner(true /* fromUnlock */); definition.addRemoteAnimation( WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER, new RemoteAnimationAdapterCompat( new RemoteAnimationAdapter( new LauncherAnimationRunner( mHandler, mKeyguardGoingAwayRunner, true /* startAtFrontOfQueue */), CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */, mLauncher.getIApplicationThread())); CLOSING_TRANSITION_DURATION_MS, 0 /* statusBarTransitionDelay */)); } mLauncher.registerRemoteAnimations(definition.getWrapped()); mLauncher.registerRemoteAnimations(definition); } } Loading @@ -1108,11 +1113,25 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener } if (hasControlRemoteAppTransitionPermission()) { mWallpaperOpenTransitionRunner = createWallpaperOpenRunner(false /* fromUnlock */); mLauncherOpenTransition = RemoteAnimationAdapterCompat.buildRemoteTransition( mLauncherOpenTransition = new RemoteTransition( new LauncherAnimationRunner(mHandler, mWallpaperOpenTransitionRunner, false /* startAtFrontOfQueue */), mLauncher.getIApplicationThread()); mLauncherOpenTransition.addHomeOpenCheck(mLauncher.getComponentName()); SystemUiProxy.INSTANCE.get(mLauncher).registerRemoteTransition(mLauncherOpenTransition); false /* startAtFrontOfQueue */).toRemoteTransition(), mLauncher.getIApplicationThread()); TransitionFilter homeCheck = new TransitionFilter(); // No need to handle the transition that also dismisses keyguard. homeCheck.mNotFlags = TRANSIT_FLAG_KEYGUARD_GOING_AWAY; homeCheck.mRequirements = new TransitionFilter.Requirement[]{new TransitionFilter.Requirement(), new TransitionFilter.Requirement()}; homeCheck.mRequirements[0].mActivityType = ACTIVITY_TYPE_HOME; homeCheck.mRequirements[0].mTopActivity = mLauncher.getComponentName(); homeCheck.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT}; homeCheck.mRequirements[0].mOrder = CONTAINER_ORDER_TOP; homeCheck.mRequirements[1].mActivityType = ACTIVITY_TYPE_STANDARD; homeCheck.mRequirements[1].mModes = new int[]{TRANSIT_CLOSE, TRANSIT_TO_BACK}; SystemUiProxy.INSTANCE.get(mLauncher) .registerRemoteTransition(mLauncherOpenTransition, homeCheck); } if (mBackAnimationController != null) { mBackAnimationController.registerBackCallbacks(mHandler); Loading
quickstep/src/com/android/quickstep/RecentsActivity.java +8 −12 Original line number Diff line number Diff line Loading @@ -37,9 +37,11 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.Display; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationTarget; import android.view.SurfaceControl.Transaction; import android.view.View; import android.window.RemoteTransition; import android.window.SplashScreen; import androidx.annotation.Nullable; Loading Loading @@ -79,7 +81,6 @@ import com.android.quickstep.util.TISBindHelper; import com.android.quickstep.views.OverviewActionsView; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.system.RemoteAnimationAdapterCompat; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -259,13 +260,11 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> { final LauncherAnimationRunner wrapper = new LauncherAnimationRunner( mUiHandler, mActivityLaunchAnimationRunner, true /* startAtFrontOfQueue */); RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat( wrapper, RECENTS_LAUNCH_DURATION, RECENTS_LAUNCH_DURATION - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY, getIApplicationThread()); final ActivityOptions options = ActivityOptions.makeRemoteAnimation( adapterCompat.getWrapped(), adapterCompat.getRemoteTransition().getTransition()); new RemoteAnimationAdapter(wrapper, RECENTS_LAUNCH_DURATION, RECENTS_LAUNCH_DURATION - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY), new RemoteTransition(wrapper.toRemoteTransition(), getIApplicationThread())); final ActivityOptionsWrapper activityOptions = new ActivityOptionsWrapper(options, onEndCallback); activityOptions.options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); Loading Loading @@ -401,12 +400,9 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> { private void startHomeInternal() { LauncherAnimationRunner runner = new LauncherAnimationRunner( getMainThreadHandler(), mAnimationToHomeFactory, true); RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat(runner, HOME_APPEAR_DURATION, 0, getIApplicationThread()); ActivityOptions options = ActivityOptions.makeRemoteAnimation( adapterCompat.getWrapped(), adapterCompat.getRemoteTransition().getTransition()); new RemoteAnimationAdapter(runner, HOME_APPEAR_DURATION, 0), new RemoteTransition(runner.toRemoteTransition(), getIApplicationThread())); startHomeIntentSafely(this, options.toBundle()); } Loading
quickstep/src/com/android/quickstep/SystemUiProxy.java +19 −18 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationTarget; import android.view.SurfaceControl; import android.window.IOnBackInvokedCallback; import android.window.RemoteTransition; import android.window.TransitionFilter; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; Loading @@ -53,7 +55,6 @@ import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.SplitConfigurationOptions; import com.android.systemui.shared.recents.ISystemUiProxy; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.system.RemoteTransitionCompat; import com.android.systemui.shared.system.smartspace.ILauncherUnlockAnimationController; import com.android.systemui.shared.system.smartspace.ISysuiUnlockAnimationController; import com.android.systemui.shared.system.smartspace.SmartspaceState; Loading @@ -73,6 +74,7 @@ import com.android.wm.shell.util.GroupedRecentTaskInfo; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; /** * Holds the reference to SystemUI. Loading Loading @@ -108,7 +110,8 @@ public class SystemUiProxy implements ISystemUiProxy { private IStartingWindowListener mStartingWindowListener; private ILauncherUnlockAnimationController mLauncherUnlockAnimationController; private IRecentTasksListener mRecentTasksListener; private final ArrayList<RemoteTransitionCompat> mRemoteTransitions = new ArrayList<>(); private final LinkedHashMap<RemoteTransition, TransitionFilter> mRemoteTransitions = new LinkedHashMap<>(); private IOnBackInvokedCallback mBackToLauncherCallback; // Used to dedupe calls to SystemUI Loading Loading @@ -195,9 +198,7 @@ public class SystemUiProxy implements ISystemUiProxy { if (mSysuiUnlockAnimationController != null && mLauncherUnlockAnimationController != null) { setLauncherUnlockAnimationController(mLauncherUnlockAnimationController); } for (int i = mRemoteTransitions.size() - 1; i >= 0; --i) { registerRemoteTransition(mRemoteTransitions.get(i)); } new LinkedHashMap<>(mRemoteTransitions).forEach(this::registerRemoteTransition); if (mRecentTasksListener != null && mRecentTasks != null) { registerRecentTasksListener(mRecentTasksListener); } Loading Loading @@ -536,11 +537,11 @@ public class SystemUiProxy implements ISystemUiProxy { /** Start multiple tasks in split-screen simultaneously. */ public void startTasks(int taskId1, Bundle options1, int taskId2, Bundle options2, @SplitConfigurationOptions.StagePosition int splitPosition, float splitRatio, RemoteTransitionCompat remoteTransition, InstanceId instanceId) { RemoteTransition remoteTransition, InstanceId instanceId) { if (mSystemUiProxy != null) { try { mSplitScreen.startTasks(taskId1, options1, taskId2, options2, splitPosition, splitRatio, remoteTransition.getTransition(), instanceId); splitRatio, remoteTransition, instanceId); } catch (RemoteException e) { Log.w(TAG, "Failed call startTasks"); } Loading @@ -550,12 +551,12 @@ public class SystemUiProxy implements ISystemUiProxy { public void startIntentAndTask(PendingIntent pendingIntent, Intent fillInIntent, Bundle options1, int taskId, Bundle options2, @SplitConfigurationOptions.StagePosition int splitPosition, float splitRatio, RemoteTransitionCompat remoteTransition, InstanceId instanceId) { RemoteTransition remoteTransition, InstanceId instanceId) { if (mSystemUiProxy != null) { try { mSplitScreen.startIntentAndTask(pendingIntent, fillInIntent, options1, taskId, options2, splitPosition, splitRatio, remoteTransition.getTransition(), instanceId); remoteTransition, instanceId); } catch (RemoteException e) { Log.w(TAG, "Failed call startIntentAndTask"); } Loading @@ -564,11 +565,11 @@ public class SystemUiProxy implements ISystemUiProxy { public void startShortcutAndTask(ShortcutInfo shortcutInfo, Bundle options1, int taskId, Bundle options2, @SplitConfigurationOptions.StagePosition int splitPosition, float splitRatio, RemoteTransitionCompat remoteTransition, InstanceId instanceId) { float splitRatio, RemoteTransition remoteTransition, InstanceId instanceId) { if (mSystemUiProxy != null) { try { mSplitScreen.startShortcutAndTask(shortcutInfo, options1, taskId, options2, splitPosition, splitRatio, remoteTransition.getTransition(), instanceId); splitPosition, splitRatio, remoteTransition, instanceId); } catch (RemoteException e) { Log.w(TAG, "Failed call startShortcutAndTask"); } Loading Loading @@ -709,24 +710,24 @@ public class SystemUiProxy implements ISystemUiProxy { // Remote transitions // public void registerRemoteTransition(RemoteTransitionCompat remoteTransition) { public void registerRemoteTransition( RemoteTransition remoteTransition, TransitionFilter filter) { if (mShellTransitions != null) { try { mShellTransitions.registerRemote(remoteTransition.getFilter(), remoteTransition.getTransition()); mShellTransitions.registerRemote(filter, remoteTransition); } catch (RemoteException e) { Log.w(TAG, "Failed call registerRemoteTransition"); } } if (!mRemoteTransitions.contains(remoteTransition)) { mRemoteTransitions.add(remoteTransition); if (!mRemoteTransitions.containsKey(remoteTransition)) { mRemoteTransitions.put(remoteTransition, filter); } } public void unregisterRemoteTransition(RemoteTransitionCompat remoteTransition) { public void unregisterRemoteTransition(RemoteTransition remoteTransition) { if (mShellTransitions != null) { try { mShellTransitions.unregisterRemote(remoteTransition.getTransition()); mShellTransitions.unregisterRemote(remoteTransition); } catch (RemoteException e) { Log.w(TAG, "Failed call registerRemoteTransition"); } Loading
quickstep/src/com/android/quickstep/TaskAnimationManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.quickstep.GestureState.STATE_RECENTS_ANIMATION_INITIALIZED; import static com.android.quickstep.GestureState.STATE_RECENTS_ANIMATION_STARTED; import static com.android.systemui.shared.system.RemoteTransitionCompat.newRemoteTransition; import android.app.ActivityManager; import android.app.ActivityOptions; Loading @@ -29,6 +30,7 @@ import android.content.Intent; import android.os.SystemProperties; import android.util.Log; import android.view.RemoteAnimationTarget; import android.window.RemoteTransition; import androidx.annotation.Nullable; import androidx.annotation.UiThread; Loading @@ -39,7 +41,6 @@ import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.RemoteTransitionCompat; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; Loading Loading @@ -223,11 +224,10 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn mCallbacks.addListener(listener); if (ENABLE_SHELL_TRANSITIONS) { RemoteTransitionCompat transition = new RemoteTransitionCompat(mCallbacks, RemoteTransition transition = newRemoteTransition(mCallbacks, mController != null ? mController.getController() : null, mCtx.getIApplicationThread()); final ActivityOptions options = ActivityOptions.makeRemoteTransition( transition.getTransition()); final ActivityOptions options = ActivityOptions.makeRemoteTransition(transition); // Allowing to pause Home if Home is top activity and Recents is not Home. So when user // start home when recents animation is playing, the home activity can be resumed again // to let the transition controller collect Home activity. Loading