diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 2e3cad4cf8..e8a3d3eef5 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -64,6 +64,7 @@ import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATI import static com.android.launcher3.views.FloatingIconView.getFloatingIconView; import static com.android.quickstep.TaskAnimationManager.ENABLE_SHELL_TRANSITIONS; import static com.android.quickstep.TaskViewUtils.findTaskViewToLaunch; +import static com.android.quickstep.util.AnimUtils.completeRunnableListCallback; import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius; import static com.android.systemui.shared.system.QuickStepContract.supportsRoundedCornersOnWindows; @@ -88,6 +89,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.IBinder; +import android.os.IRemoteCallback; import android.os.Looper; import android.os.SystemProperties; import android.os.UserHandle; @@ -351,6 +353,9 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener new RemoteAnimationAdapter(runner, duration, statusBarTransitionDelay), new RemoteTransition(runner.toRemoteTransition(), mLauncher.getIApplicationThread(), "QuickstepLaunch")); + IRemoteCallback endCallback = completeRunnableListCallback(onEndCallback); + options.setOnAnimationAbortListener(endCallback); + options.setOnAnimationFinishedListener(endCallback); return new ActivityOptionsWrapper(options, onEndCallback); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 2b88f0202c..c905c85120 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -37,6 +37,7 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_DRAGGING; import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_FULLSCREEN; import static com.android.launcher3.testing.shared.ResourceUtils.getBoolByName; +import static com.android.quickstep.util.AnimUtils.completeRunnableListCallback; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING; @@ -51,10 +52,10 @@ import android.content.Intent; import android.content.pm.ActivityInfo.Config; import android.content.pm.LauncherApps; import android.content.res.Resources; -import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.Rect; import android.hardware.display.DisplayManager; +import android.os.IRemoteCallback; import android.os.Process; import android.os.Trace; import android.provider.Settings; @@ -66,7 +67,6 @@ import android.view.Surface; import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; -import android.widget.FrameLayout; import android.widget.Toast; import androidx.annotation.NonNull; @@ -744,13 +744,14 @@ public class TaskbarActivityContext extends BaseTaskbarContext { @Override public ActivityOptionsWrapper makeDefaultActivityOptions(int splashScreenStyle) { RunnableList callbacks = new RunnableList(); - ActivityOptions options = ActivityOptions.makeCustomAnimation( - this, 0, 0, Color.TRANSPARENT, - Executors.MAIN_EXECUTOR.getHandler(), null, - elapsedRealTime -> callbacks.executeAllAndDestroy()); + ActivityOptions options = ActivityOptions.makeCustomAnimation(this, 0, 0); options.setSplashScreenStyle(splashScreenStyle); options.setPendingIntentBackgroundActivityStartMode( ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED); + IRemoteCallback endCallback = completeRunnableListCallback(callbacks); + options.setOnAnimationAbortListener(endCallback); + options.setOnAnimationFinishedListener(endCallback); + return new ActivityOptionsWrapper(options, callbacks); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 729609b699..0991fce04b 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -54,6 +54,7 @@ import static com.android.launcher3.testing.shared.TestProtocol.QUICK_SWITCH_STA import static com.android.launcher3.util.DisplayController.CHANGE_ACTIVE_SCREEN; import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; +import static com.android.quickstep.util.AnimUtils.completeRunnableListCallback; import static com.android.quickstep.util.SplitAnimationTimings.TABLET_HOME_TO_SPLIT; import static com.android.quickstep.views.DesktopTaskView.isDesktopModeSupported; import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_HOME_KEY; @@ -67,7 +68,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.res.Configuration; -import android.graphics.Color; import android.graphics.Rect; import android.graphics.RectF; import android.hardware.display.DisplayManager; @@ -75,6 +75,7 @@ import android.media.permission.SafeCloseable; import android.os.Build; import android.os.Bundle; import android.os.IBinder; +import android.os.IRemoteCallback; import android.os.SystemProperties; import android.os.Trace; import android.util.AttributeSet; @@ -145,7 +146,6 @@ import com.android.launcher3.uioverrides.touchcontrollers.TransposedQuickSwitchT import com.android.launcher3.uioverrides.touchcontrollers.TwoButtonNavbarTouchController; import com.android.launcher3.util.ActivityOptionsWrapper; import com.android.launcher3.util.DisplayController; -import com.android.launcher3.util.Executors; import com.android.launcher3.util.IntSet; import com.android.launcher3.util.NavigationMode; import com.android.launcher3.util.ObjectWrapper; @@ -1140,13 +1140,14 @@ public class QuickstepLauncher extends Launcher { @Override public ActivityOptionsWrapper makeDefaultActivityOptions(int splashScreenStyle) { RunnableList callbacks = new RunnableList(); - ActivityOptions options = ActivityOptions.makeCustomAnimation( - this, 0, 0, Color.TRANSPARENT, - Executors.MAIN_EXECUTOR.getHandler(), null, - elapsedRealTime -> callbacks.executeAllAndDestroy()); + ActivityOptions options = ActivityOptions.makeCustomAnimation(this, 0, 0); options.setSplashScreenStyle(splashScreenStyle); options.setPendingIntentBackgroundActivityStartMode( ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED); + + IRemoteCallback endCallback = completeRunnableListCallback(callbacks); + options.setOnAnimationAbortListener(endCallback); + options.setOnAnimationFinishedListener(endCallback); return new ActivityOptionsWrapper(options, callbacks); } diff --git a/quickstep/src/com/android/quickstep/util/AnimUtils.java b/quickstep/src/com/android/quickstep/util/AnimUtils.java index 7fbbb6e5b8..1f2a02c816 100644 --- a/quickstep/src/com/android/quickstep/util/AnimUtils.java +++ b/quickstep/src/com/android/quickstep/util/AnimUtils.java @@ -16,6 +16,13 @@ package com.android.quickstep.util; +import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; + +import android.os.Bundle; +import android.os.IRemoteCallback; + +import com.android.launcher3.util.RunnableList; + /** * Utility class containing methods to help manage animations, interpolators, and timings. */ @@ -48,4 +55,16 @@ public class AnimUtils { ? SplitAnimationTimings.TABLET_APP_PAIR_LAUNCH : SplitAnimationTimings.PHONE_APP_PAIR_LAUNCH; } + + /** + * Returns a IRemoteCallback which completes the provided list as a result + */ + public static IRemoteCallback completeRunnableListCallback(RunnableList list) { + return new IRemoteCallback.Stub() { + @Override + public void sendResult(Bundle bundle) { + MAIN_EXECUTOR.execute(list::executeAllAndDestroy); + } + }; + } } diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index dda51b3452..68710a7946 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -57,7 +57,6 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.os.Handler; import android.util.AttributeSet; import android.util.FloatProperty; import android.util.Log; @@ -119,8 +118,6 @@ import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; -import kotlin.Unit; - import java.lang.annotation.Retention; import java.util.Arrays; import java.util.Collections; @@ -129,6 +126,8 @@ import java.util.List; import java.util.function.Consumer; import java.util.stream.Stream; +import kotlin.Unit; + /** * A task in the Recents view. */ @@ -969,20 +968,6 @@ public class TaskView extends FrameLayout implements Reusable { } } - /** - * Returns ActivityOptions for overriding task transition animation. - */ - private ActivityOptions makeCustomAnimation(Context context, int enterResId, - int exitResId, final Runnable callback, final Handler callbackHandler) { - return ActivityOptions.makeCustomTaskAnimation(context, enterResId, exitResId, - callbackHandler, - elapsedRealTime -> { - if (callback != null) { - callbackHandler.post(callback); - } - }, null /* finishedListener */); - } - /** * Launch of the current task (both live and inactive tasks) with an animation. */