Loading services/core/java/com/android/server/wm/ActivityClientController.java +2 −1 Original line number Diff line number Diff line Loading @@ -1042,7 +1042,8 @@ class ActivityClientController extends IActivityClientController.Stub { r.mOverrideTaskTransition); mService.getTransitionController().setOverrideAnimation( TransitionInfo.AnimationOptions.makeCustomAnimOptions(packageName, enterAnim, exitAnim, r.mOverrideTaskTransition)); enterAnim, exitAnim, r.mOverrideTaskTransition), null /* startCallback */, null /* finishCallback */); } } Binder.restoreCallingIdentity(origId); Loading services/core/java/com/android/server/wm/ActivityRecord.java +8 −1 Original line number Diff line number Diff line Loading @@ -273,6 +273,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Debug; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; Loading Loading @@ -4315,6 +4316,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final int animationType = pendingOptions.getAnimationType(); final DisplayContent displayContent = getDisplayContent(); AnimationOptions options = null; IRemoteCallback startCallback = null; IRemoteCallback finishCallback = null; switch (animationType) { case ANIM_CUSTOM: displayContent.mAppTransition.overridePendingAppTransition( Loading @@ -4327,6 +4330,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getOverrideTaskTransition()); startCallback = pendingOptions.getAnimationStartedListener(); finishCallback = pendingOptions.getAnimationFinishedListener(); break; case ANIM_CLIP_REVEAL: displayContent.mAppTransition.overridePendingAppTransitionClipReveal( Loading Loading @@ -4366,6 +4371,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A scaleUp); options = AnimationOptions.makeThumnbnailAnimOptions(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp); startCallback = pendingOptions.getAnimationStartedListener(); if (intent.getSourceBounds() == null && buffer != null) { intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), Loading Loading @@ -4416,7 +4422,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } if (options != null) { mAtmService.getTransitionController().setOverrideAnimation(options); mAtmService.getTransitionController().setOverrideAnimation(options, startCallback, finishCallback); } } Loading services/core/java/com/android/server/wm/Transition.java +25 −1 Original line number Diff line number Diff line Loading @@ -46,11 +46,13 @@ import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_W import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.graphics.Point; import android.graphics.Rect; import android.os.Binder; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.SystemClock; import android.util.ArrayMap; Loading @@ -65,6 +67,7 @@ import android.window.TransitionInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.ProtoLogGroup; import com.android.internal.protolog.common.ProtoLog; import com.android.internal.util.function.pooled.PooledLambda; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -130,7 +133,10 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe /** The final animation targets derived from participants after promotion. */ private ArraySet<WindowContainer> mTargets = null; /** Custom activity-level animation options and callbacks. */ private TransitionInfo.AnimationOptions mOverrideOptions; private IRemoteCallback mClientAnimationStartCallback = null; private IRemoteCallback mClientAnimationFinishCallback = null; private @TransitionState int mState = STATE_COLLECTING; private final ReadyTracker mReadyTracker = new ReadyTracker(); Loading Loading @@ -226,13 +232,26 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe mChanges.get(wc).mExistenceChanged = true; } private void sendRemoteCallback(@Nullable IRemoteCallback callback) { if (callback == null) return; mController.mAtm.mH.sendMessage(PooledLambda.obtainMessage(cb -> { try { cb.sendResult(null); } catch (RemoteException e) { } }, callback)); } /** * Set animation options for collecting transition by ActivityRecord. * @param options AnimationOptions captured from ActivityOptions */ void setOverrideAnimation(TransitionInfo.AnimationOptions options) { void setOverrideAnimation(TransitionInfo.AnimationOptions options, @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) { if (mSyncId < 0) return; mOverrideOptions = options; sendRemoteCallback(mClientAnimationStartCallback); mClientAnimationStartCallback = startCallback; mClientAnimationFinishCallback = finishCallback; } /** Loading Loading @@ -363,6 +382,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe .scheduleProcessStoppingAndFinishingActivitiesIfNeeded(); } sendRemoteCallback(mClientAnimationFinishCallback); legacyRestoreNavigationBarFromApp(); } Loading Loading @@ -426,6 +447,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe reportStartReasonsToLogger(); // The callback is only populated for custom activity-level client animations sendRemoteCallback(mClientAnimationStartCallback); // Manually show any activities that are visibleRequested. This is needed to properly // support simultaneous animation queueing/merging. Specifically, if transition A makes // an activity invisible, it's finishTransaction (which is applied *after* the animation) Loading services/core/java/com/android/server/wm/TransitionController.java +4 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.SystemClock; import android.util.Slog; Loading Loading @@ -277,9 +278,10 @@ class TransitionController { } /** @see Transition#setOverrideAnimation */ void setOverrideAnimation(TransitionInfo.AnimationOptions options) { void setOverrideAnimation(TransitionInfo.AnimationOptions options, @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) { if (mCollectingTransition == null) return; mCollectingTransition.setOverrideAnimation(options); mCollectingTransition.setOverrideAnimation(options, startCallback, finishCallback); } /** @see Transition#setReady */ Loading Loading
services/core/java/com/android/server/wm/ActivityClientController.java +2 −1 Original line number Diff line number Diff line Loading @@ -1042,7 +1042,8 @@ class ActivityClientController extends IActivityClientController.Stub { r.mOverrideTaskTransition); mService.getTransitionController().setOverrideAnimation( TransitionInfo.AnimationOptions.makeCustomAnimOptions(packageName, enterAnim, exitAnim, r.mOverrideTaskTransition)); enterAnim, exitAnim, r.mOverrideTaskTransition), null /* startCallback */, null /* finishCallback */); } } Binder.restoreCallingIdentity(origId); Loading
services/core/java/com/android/server/wm/ActivityRecord.java +8 −1 Original line number Diff line number Diff line Loading @@ -273,6 +273,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Debug; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; Loading Loading @@ -4315,6 +4316,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final int animationType = pendingOptions.getAnimationType(); final DisplayContent displayContent = getDisplayContent(); AnimationOptions options = null; IRemoteCallback startCallback = null; IRemoteCallback finishCallback = null; switch (animationType) { case ANIM_CUSTOM: displayContent.mAppTransition.overridePendingAppTransition( Loading @@ -4327,6 +4330,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getOverrideTaskTransition()); startCallback = pendingOptions.getAnimationStartedListener(); finishCallback = pendingOptions.getAnimationFinishedListener(); break; case ANIM_CLIP_REVEAL: displayContent.mAppTransition.overridePendingAppTransitionClipReveal( Loading Loading @@ -4366,6 +4371,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A scaleUp); options = AnimationOptions.makeThumnbnailAnimOptions(buffer, pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp); startCallback = pendingOptions.getAnimationStartedListener(); if (intent.getSourceBounds() == null && buffer != null) { intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), Loading Loading @@ -4416,7 +4422,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } if (options != null) { mAtmService.getTransitionController().setOverrideAnimation(options); mAtmService.getTransitionController().setOverrideAnimation(options, startCallback, finishCallback); } } Loading
services/core/java/com/android/server/wm/Transition.java +25 −1 Original line number Diff line number Diff line Loading @@ -46,11 +46,13 @@ import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_W import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.graphics.Point; import android.graphics.Rect; import android.os.Binder; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.SystemClock; import android.util.ArrayMap; Loading @@ -65,6 +67,7 @@ import android.window.TransitionInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.ProtoLogGroup; import com.android.internal.protolog.common.ProtoLog; import com.android.internal.util.function.pooled.PooledLambda; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -130,7 +133,10 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe /** The final animation targets derived from participants after promotion. */ private ArraySet<WindowContainer> mTargets = null; /** Custom activity-level animation options and callbacks. */ private TransitionInfo.AnimationOptions mOverrideOptions; private IRemoteCallback mClientAnimationStartCallback = null; private IRemoteCallback mClientAnimationFinishCallback = null; private @TransitionState int mState = STATE_COLLECTING; private final ReadyTracker mReadyTracker = new ReadyTracker(); Loading Loading @@ -226,13 +232,26 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe mChanges.get(wc).mExistenceChanged = true; } private void sendRemoteCallback(@Nullable IRemoteCallback callback) { if (callback == null) return; mController.mAtm.mH.sendMessage(PooledLambda.obtainMessage(cb -> { try { cb.sendResult(null); } catch (RemoteException e) { } }, callback)); } /** * Set animation options for collecting transition by ActivityRecord. * @param options AnimationOptions captured from ActivityOptions */ void setOverrideAnimation(TransitionInfo.AnimationOptions options) { void setOverrideAnimation(TransitionInfo.AnimationOptions options, @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) { if (mSyncId < 0) return; mOverrideOptions = options; sendRemoteCallback(mClientAnimationStartCallback); mClientAnimationStartCallback = startCallback; mClientAnimationFinishCallback = finishCallback; } /** Loading Loading @@ -363,6 +382,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe .scheduleProcessStoppingAndFinishingActivitiesIfNeeded(); } sendRemoteCallback(mClientAnimationFinishCallback); legacyRestoreNavigationBarFromApp(); } Loading Loading @@ -426,6 +447,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe reportStartReasonsToLogger(); // The callback is only populated for custom activity-level client animations sendRemoteCallback(mClientAnimationStartCallback); // Manually show any activities that are visibleRequested. This is needed to properly // support simultaneous animation queueing/merging. Specifically, if transition A makes // an activity invisible, it's finishTransaction (which is applied *after* the animation) Loading
services/core/java/com/android/server/wm/TransitionController.java +4 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.SystemClock; import android.util.Slog; Loading Loading @@ -277,9 +278,10 @@ class TransitionController { } /** @see Transition#setOverrideAnimation */ void setOverrideAnimation(TransitionInfo.AnimationOptions options) { void setOverrideAnimation(TransitionInfo.AnimationOptions options, @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) { if (mCollectingTransition == null) return; mCollectingTransition.setOverrideAnimation(options); mCollectingTransition.setOverrideAnimation(options, startCallback, finishCallback); } /** @see Transition#setReady */ Loading