mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-03 01:16:49 +00:00
Merge "Removing RemoteTransitionCompat and related wrappers" into tm-qpr-dev
This commit is contained in:
@@ -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) ->
|
||||
@@ -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;
|
||||
@@ -133,7 +117,7 @@ public class LauncherAnimationRunner implements RemoteAnimationRunnerCompat {
|
||||
*/
|
||||
@BinderThread
|
||||
@Override
|
||||
public void onAnimationCancelled() {
|
||||
public void onAnimationCancelled(boolean isKeyguardOccluded) {
|
||||
postAsyncCallback(mHandler, () -> {
|
||||
finishExistingAnimation();
|
||||
getFactory().onAnimationCancelled();
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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() {
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -35,6 +35,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
@@ -42,6 +43,9 @@ import android.util.Pair;
|
||||
import android.view.RemoteAnimationAdapter;
|
||||
import android.view.RemoteAnimationTarget;
|
||||
import android.view.SurfaceControl;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -63,10 +67,7 @@ import com.android.quickstep.views.FloatingTaskView;
|
||||
import com.android.quickstep.views.GroupedTaskView;
|
||||
import com.android.quickstep.views.TaskView;
|
||||
import com.android.systemui.shared.recents.model.Task;
|
||||
import com.android.systemui.shared.system.RemoteAnimationAdapterCompat;
|
||||
import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
|
||||
import com.android.systemui.shared.system.RemoteTransitionCompat;
|
||||
import com.android.systemui.shared.system.RemoteTransitionRunner;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@@ -232,8 +233,7 @@ public class SplitSelectStateController {
|
||||
if (TaskAnimationManager.ENABLE_SHELL_TRANSITIONS) {
|
||||
final RemoteSplitLaunchTransitionRunner animationRunner =
|
||||
new RemoteSplitLaunchTransitionRunner(taskId1, taskId2, callback);
|
||||
final RemoteTransitionCompat remoteTransition = new RemoteTransitionCompat(
|
||||
animationRunner, MAIN_EXECUTOR,
|
||||
final RemoteTransition remoteTransition = new RemoteTransition(animationRunner,
|
||||
ActivityThread.currentActivityThread().getApplicationThread());
|
||||
if (intent1 == null && intent2 == null) {
|
||||
mSystemUiProxy.startTasks(taskId1, options1.toBundle(), taskId2,
|
||||
@@ -253,8 +253,7 @@ public class SplitSelectStateController {
|
||||
final RemoteSplitLaunchAnimationRunner animationRunner =
|
||||
new RemoteSplitLaunchAnimationRunner(taskId1, taskId2, callback);
|
||||
final RemoteAnimationAdapter adapter = new RemoteAnimationAdapter(
|
||||
RemoteAnimationAdapterCompat.wrapRemoteAnimationRunner(animationRunner),
|
||||
300, 150,
|
||||
animationRunner, 300, 150,
|
||||
ActivityThread.currentActivityThread().getApplicationThread());
|
||||
|
||||
if (intent1 == null && intent2 == null) {
|
||||
@@ -276,7 +275,7 @@ public class SplitSelectStateController {
|
||||
|
||||
private void launchIntentOrShortcut(Intent intent, String otherTaskPackageName,
|
||||
ActivityOptions options1, int taskId, @StagePosition int stagePosition,
|
||||
float splitRatio, RemoteTransitionCompat remoteTransition,
|
||||
float splitRatio, RemoteTransition remoteTransition,
|
||||
@Nullable InstanceId shellInstanceId) {
|
||||
PendingIntent pendingIntent = getPendingIntent(intent);
|
||||
final ShortcutInfo shortcutInfo = getShortcutInfo(intent,
|
||||
@@ -369,7 +368,7 @@ public class SplitSelectStateController {
|
||||
/**
|
||||
* Requires Shell Transitions
|
||||
*/
|
||||
private class RemoteSplitLaunchTransitionRunner implements RemoteTransitionRunner {
|
||||
private class RemoteSplitLaunchTransitionRunner extends IRemoteTransition.Stub {
|
||||
|
||||
private final int mInitialTaskId;
|
||||
private final int mSecondTaskId;
|
||||
@@ -383,25 +382,41 @@ public class SplitSelectStateController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
|
||||
@NonNull SurfaceControl.Transaction t, @NonNull Runnable finishCallback) {
|
||||
TaskViewUtils.composeRecentsSplitLaunchAnimator(mLaunchingTaskView, mStateManager,
|
||||
mDepthController, mInitialTaskId, mSecondTaskId, info, t, () -> {
|
||||
finishCallback.run();
|
||||
if (mSuccessCallback != null) {
|
||||
mSuccessCallback.accept(true);
|
||||
}
|
||||
});
|
||||
// After successful launch, call resetState
|
||||
resetState();
|
||||
public void startAnimation(IBinder transition, TransitionInfo info,
|
||||
SurfaceControl.Transaction t,
|
||||
IRemoteTransitionFinishedCallback finishedCallback) {
|
||||
final Runnable finishAdapter = () -> {
|
||||
try {
|
||||
finishedCallback.onTransitionFinished(null /* wct */, null /* sct */);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to call transition finished callback", e);
|
||||
}
|
||||
};
|
||||
|
||||
MAIN_EXECUTOR.execute(() -> {
|
||||
TaskViewUtils.composeRecentsSplitLaunchAnimator(mLaunchingTaskView, mStateManager,
|
||||
mDepthController, mInitialTaskId, mSecondTaskId, info, t, () -> {
|
||||
finishAdapter.run();
|
||||
if (mSuccessCallback != null) {
|
||||
mSuccessCallback.accept(true);
|
||||
}
|
||||
});
|
||||
// After successful launch, call resetState
|
||||
resetState();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mergeAnimation(IBinder transition, TransitionInfo info,
|
||||
SurfaceControl.Transaction t, IBinder mergeTarget,
|
||||
IRemoteTransitionFinishedCallback finishedCallback) { }
|
||||
}
|
||||
|
||||
/**
|
||||
* LEGACY
|
||||
* Remote animation runner for animation to launch an app.
|
||||
*/
|
||||
private class RemoteSplitLaunchAnimationRunner implements RemoteAnimationRunnerCompat {
|
||||
private class RemoteSplitLaunchAnimationRunner extends RemoteAnimationRunnerCompat {
|
||||
|
||||
private final int mInitialTaskId;
|
||||
private final int mSecondTaskId;
|
||||
@@ -431,7 +446,7 @@ public class SplitSelectStateController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationCancelled() {
|
||||
public void onAnimationCancelled(boolean isKeyguardOccluded) {
|
||||
postAsyncCallback(mHandler, () -> {
|
||||
if (mSuccessCallback != null) {
|
||||
// Launching legacy tasks while recents animation is running will always cause
|
||||
|
||||
Reference in New Issue
Block a user