Loading services/core/java/com/android/server/wm/InsetsSourceProvider.java +4 −27 Original line number Diff line number Diff line Loading @@ -556,37 +556,11 @@ class InsetsSourceProvider { } mControl = new InsetsSourceControl(mSource.getId(), mSource.getType(), leash, initiallyVisible, surfacePosition, getInsetsHint()); mStateController.notifySurfaceTransactionReady(this, getSurfaceTransactionId(leash), true); ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "InsetsSource Control %s for target %s", mControl, mControlTarget); } private long getSurfaceTransactionId(SurfaceControl leash) { // Here returns mNativeObject (long) as the ID instead of the leash itself so that // InsetsStateController won't keep referencing the leash unexpectedly. return leash != null ? leash.mNativeObject : 0; } /** * This is called when the surface transaction of the leash initialization has been committed. * * @param id Indicates which transaction is committed so that stale callbacks can be dropped. */ void onSurfaceTransactionCommitted(long id) { if (mIsLeashReadyForDispatching) { return; } if (mControl == null) { return; } if (id != getSurfaceTransactionId(mControl.getLeash())) { return; } mIsLeashReadyForDispatching = true; mStateController.notifySurfaceTransactionReady(this, 0, false); } void startSeamlessRotation() { if (!mSeamlessRotating) { mSeamlessRotating = true; Loading @@ -608,6 +582,10 @@ class InsetsSourceProvider { return true; } void onSurfaceTransactionApplied() { mIsLeashReadyForDispatching = true; } void setClientVisible(boolean clientVisible) { if (mClientVisible == clientVisible) { return; Loading Loading @@ -821,7 +799,6 @@ class InsetsSourceProvider { public void onAnimationCancelled(SurfaceControl animationLeash) { if (mAdapter == this) { mStateController.notifyControlRevoked(mControlTarget, InsetsSourceProvider.this); mStateController.notifySurfaceTransactionReady(InsetsSourceProvider.this, 0, false); mControl = null; mControlTarget = null; mAdapter = null; Loading services/core/java/com/android/server/wm/InsetsStateController.java +3 −23 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.os.Trace; import android.util.ArrayMap; import android.util.ArraySet; import android.util.SparseArray; import android.util.SparseLongArray; import android.util.proto.ProtoOutputStream; import android.view.InsetsSource; import android.view.InsetsSourceControl; Loading @@ -60,7 +59,6 @@ class InsetsStateController { private final DisplayContent mDisplayContent; private final SparseArray<InsetsSourceProvider> mProviders = new SparseArray<>(); private final SparseLongArray mSurfaceTransactionIds = new SparseLongArray(); private final ArrayMap<InsetsControlTarget, ArrayList<InsetsSourceProvider>> mControlTargetProvidersMap = new ArrayMap<>(); private final SparseArray<InsetsControlTarget> mIdControlTargetMap = new SparseArray<>(); Loading Loading @@ -378,32 +376,14 @@ class InsetsStateController { } } void notifySurfaceTransactionReady(InsetsSourceProvider provider, long id, boolean ready) { if (ready) { mSurfaceTransactionIds.put(provider.getSource().getId(), id); } else { mSurfaceTransactionIds.delete(provider.getSource().getId()); } } private void notifyPendingInsetsControlChanged() { if (mPendingControlChanged.isEmpty()) { return; } final int size = mSurfaceTransactionIds.size(); final SparseLongArray surfaceTransactionIds = new SparseLongArray(size); for (int i = 0; i < size; i++) { surfaceTransactionIds.append( mSurfaceTransactionIds.keyAt(i), mSurfaceTransactionIds.valueAt(i)); } mDisplayContent.mWmService.mAnimator.addAfterPrepareSurfacesRunnable(() -> { for (int i = 0; i < size; i++) { final int sourceId = surfaceTransactionIds.keyAt(i); final InsetsSourceProvider provider = mProviders.get(sourceId); if (provider == null) { continue; } provider.onSurfaceTransactionCommitted(surfaceTransactionIds.valueAt(i)); for (int i = mProviders.size() - 1; i >= 0; i--) { final InsetsSourceProvider provider = mProviders.valueAt(i); provider.onSurfaceTransactionApplied(); } final ArraySet<InsetsControlTarget> newControlTargets = new ArraySet<>(); int displayId = mDisplayContent.getDisplayId(); Loading services/core/java/com/android/server/wm/WindowAnimator.java +28 −19 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.content.Context; import android.os.HandlerExecutor; import android.os.Trace; import android.util.Slog; import android.util.TimeUtils; Loading Loading @@ -69,8 +68,6 @@ public class WindowAnimator { private Choreographer mChoreographer; private final HandlerExecutor mExecutor; /** * Indicates whether we have an animation frame callback scheduled, which will happen at * vsync-app and then schedule the animation tick at the right time (vsync-sf). Loading @@ -82,7 +79,8 @@ public class WindowAnimator { * A list of runnable that need to be run after {@link WindowContainer#prepareSurfaces} is * executed and the corresponding transaction is closed and applied. */ private ArrayList<Runnable> mAfterPrepareSurfacesRunnables = new ArrayList<>(); private final ArrayList<Runnable> mAfterPrepareSurfacesRunnables = new ArrayList<>(); private boolean mInExecuteAfterPrepareSurfacesRunnables; private final SurfaceControl.Transaction mTransaction; Loading @@ -93,7 +91,6 @@ public class WindowAnimator { mTransaction = service.mTransactionFactory.get(); service.mAnimationHandler.runWithScissors( () -> mChoreographer = Choreographer.getSfInstance(), 0 /* timeout */); mExecutor = new HandlerExecutor(service.mAnimationHandler); mAnimationFrameCallback = frameTimeNs -> { synchronized (mService.mGlobalLock) { Loading Loading @@ -201,19 +198,6 @@ public class WindowAnimator { updateRunningExpensiveAnimationsLegacy(); } final ArrayList<Runnable> afterPrepareSurfacesRunnables = mAfterPrepareSurfacesRunnables; if (!afterPrepareSurfacesRunnables.isEmpty()) { mAfterPrepareSurfacesRunnables = new ArrayList<>(); mTransaction.addTransactionCommittedListener(mExecutor, () -> { synchronized (mService.mGlobalLock) { // Traverse in order they were added. for (int i = 0, size = afterPrepareSurfacesRunnables.size(); i < size; i++) { afterPrepareSurfacesRunnables.get(i).run(); } afterPrepareSurfacesRunnables.clear(); } }); } Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "applyTransaction"); mTransaction.apply(); Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Loading @@ -221,6 +205,7 @@ public class WindowAnimator { ProtoLog.i(WM_SHOW_TRANSACTIONS, "<<< CLOSE TRANSACTION animate"); mService.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); executeAfterPrepareSurfacesRunnables(); if (DEBUG_WINDOW_TRACE) { Slog.i(TAG, "!!! animate: exit" Loading Loading @@ -302,10 +287,34 @@ public class WindowAnimator { /** * Adds a runnable to be executed after {@link WindowContainer#prepareSurfaces} is called and * the corresponding transaction is closed, applied, and committed. * the corresponding transaction is closed and applied. */ void addAfterPrepareSurfacesRunnable(Runnable r) { // If runnables are already being handled in executeAfterPrepareSurfacesRunnable, then just // immediately execute the runnable passed in. if (mInExecuteAfterPrepareSurfacesRunnables) { r.run(); return; } mAfterPrepareSurfacesRunnables.add(r); scheduleAnimation(); } void executeAfterPrepareSurfacesRunnables() { // Don't even think about to start recursing! if (mInExecuteAfterPrepareSurfacesRunnables) { return; } mInExecuteAfterPrepareSurfacesRunnables = true; // Traverse in order they were added. final int size = mAfterPrepareSurfacesRunnables.size(); for (int i = 0; i < size; i++) { mAfterPrepareSurfacesRunnables.get(i).run(); } mAfterPrepareSurfacesRunnables.clear(); mInExecuteAfterPrepareSurfacesRunnables = false; } } services/tests/servicestests/utils/com/android/server/testutils/StubTransaction.java +0 −10 Original line number Diff line number Diff line Loading @@ -40,19 +40,12 @@ import java.util.concurrent.Executor; public class StubTransaction extends SurfaceControl.Transaction { private HashSet<Runnable> mWindowInfosReportedListeners = new HashSet<>(); private HashSet<SurfaceControl.TransactionCommittedListener> mTransactionCommittedListeners = new HashSet<>(); @Override public void apply() { for (Runnable listener : mWindowInfosReportedListeners) { listener.run(); } for (SurfaceControl.TransactionCommittedListener listener : mTransactionCommittedListeners) { listener.onTransactionCommitted(); } mTransactionCommittedListeners.clear(); } @Override Loading Loading @@ -246,9 +239,6 @@ public class StubTransaction extends SurfaceControl.Transaction { @Override public SurfaceControl.Transaction addTransactionCommittedListener(Executor executor, SurfaceControl.TransactionCommittedListener listener) { SurfaceControl.TransactionCommittedListener listenerInner = () -> executor.execute(listener::onTransactionCommitted); mTransactionCommittedListeners.add(listenerInner); return this; } Loading services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java +12 −13 Original line number Diff line number Diff line Loading @@ -94,7 +94,6 @@ public class AppTransitionControllerTest extends WindowTestsBase { public void setUp() throws Exception { assumeFalse(WindowManagerService.sEnableShellTransitions); mAppTransitionController = new AppTransitionController(mWm, mDisplayContent); mWm.mAnimator.ready(); } @Test Loading Loading @@ -856,7 +855,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading Loading @@ -887,7 +886,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, null /* changingTaskFragment */); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation is not run by the remote handler because the activity is filling the Task. assertFalse(remoteAnimationRunner.isAnimationStarted()); Loading Loading @@ -922,7 +921,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, null /* changingTaskFragment */); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading @@ -947,7 +946,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading @@ -974,7 +973,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment1); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading @@ -998,7 +997,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation not run by the remote handler. assertFalse(remoteAnimationRunner.isAnimationStarted()); Loading @@ -1025,7 +1024,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation should not run by the remote handler when there are non-embedded activities of // different UID. Loading @@ -1052,7 +1051,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation should not run by the remote handler when there is wallpaper in the transition. assertFalse(remoteAnimationRunner.isAnimationStarted()); Loading Loading @@ -1086,7 +1085,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity1, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // The animation will be animated remotely by client and all activities are input disabled // for untrusted animation. Loading Loading @@ -1137,7 +1136,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // The animation will be animated remotely by client and all activities are input disabled // for untrusted animation. Loading Loading @@ -1179,7 +1178,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // The animation will be animated remotely by client, but input should not be dropped for // fully trusted. Loading Loading
services/core/java/com/android/server/wm/InsetsSourceProvider.java +4 −27 Original line number Diff line number Diff line Loading @@ -556,37 +556,11 @@ class InsetsSourceProvider { } mControl = new InsetsSourceControl(mSource.getId(), mSource.getType(), leash, initiallyVisible, surfacePosition, getInsetsHint()); mStateController.notifySurfaceTransactionReady(this, getSurfaceTransactionId(leash), true); ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "InsetsSource Control %s for target %s", mControl, mControlTarget); } private long getSurfaceTransactionId(SurfaceControl leash) { // Here returns mNativeObject (long) as the ID instead of the leash itself so that // InsetsStateController won't keep referencing the leash unexpectedly. return leash != null ? leash.mNativeObject : 0; } /** * This is called when the surface transaction of the leash initialization has been committed. * * @param id Indicates which transaction is committed so that stale callbacks can be dropped. */ void onSurfaceTransactionCommitted(long id) { if (mIsLeashReadyForDispatching) { return; } if (mControl == null) { return; } if (id != getSurfaceTransactionId(mControl.getLeash())) { return; } mIsLeashReadyForDispatching = true; mStateController.notifySurfaceTransactionReady(this, 0, false); } void startSeamlessRotation() { if (!mSeamlessRotating) { mSeamlessRotating = true; Loading @@ -608,6 +582,10 @@ class InsetsSourceProvider { return true; } void onSurfaceTransactionApplied() { mIsLeashReadyForDispatching = true; } void setClientVisible(boolean clientVisible) { if (mClientVisible == clientVisible) { return; Loading Loading @@ -821,7 +799,6 @@ class InsetsSourceProvider { public void onAnimationCancelled(SurfaceControl animationLeash) { if (mAdapter == this) { mStateController.notifyControlRevoked(mControlTarget, InsetsSourceProvider.this); mStateController.notifySurfaceTransactionReady(InsetsSourceProvider.this, 0, false); mControl = null; mControlTarget = null; mAdapter = null; Loading
services/core/java/com/android/server/wm/InsetsStateController.java +3 −23 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.os.Trace; import android.util.ArrayMap; import android.util.ArraySet; import android.util.SparseArray; import android.util.SparseLongArray; import android.util.proto.ProtoOutputStream; import android.view.InsetsSource; import android.view.InsetsSourceControl; Loading @@ -60,7 +59,6 @@ class InsetsStateController { private final DisplayContent mDisplayContent; private final SparseArray<InsetsSourceProvider> mProviders = new SparseArray<>(); private final SparseLongArray mSurfaceTransactionIds = new SparseLongArray(); private final ArrayMap<InsetsControlTarget, ArrayList<InsetsSourceProvider>> mControlTargetProvidersMap = new ArrayMap<>(); private final SparseArray<InsetsControlTarget> mIdControlTargetMap = new SparseArray<>(); Loading Loading @@ -378,32 +376,14 @@ class InsetsStateController { } } void notifySurfaceTransactionReady(InsetsSourceProvider provider, long id, boolean ready) { if (ready) { mSurfaceTransactionIds.put(provider.getSource().getId(), id); } else { mSurfaceTransactionIds.delete(provider.getSource().getId()); } } private void notifyPendingInsetsControlChanged() { if (mPendingControlChanged.isEmpty()) { return; } final int size = mSurfaceTransactionIds.size(); final SparseLongArray surfaceTransactionIds = new SparseLongArray(size); for (int i = 0; i < size; i++) { surfaceTransactionIds.append( mSurfaceTransactionIds.keyAt(i), mSurfaceTransactionIds.valueAt(i)); } mDisplayContent.mWmService.mAnimator.addAfterPrepareSurfacesRunnable(() -> { for (int i = 0; i < size; i++) { final int sourceId = surfaceTransactionIds.keyAt(i); final InsetsSourceProvider provider = mProviders.get(sourceId); if (provider == null) { continue; } provider.onSurfaceTransactionCommitted(surfaceTransactionIds.valueAt(i)); for (int i = mProviders.size() - 1; i >= 0; i--) { final InsetsSourceProvider provider = mProviders.valueAt(i); provider.onSurfaceTransactionApplied(); } final ArraySet<InsetsControlTarget> newControlTargets = new ArraySet<>(); int displayId = mDisplayContent.getDisplayId(); Loading
services/core/java/com/android/server/wm/WindowAnimator.java +28 −19 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.content.Context; import android.os.HandlerExecutor; import android.os.Trace; import android.util.Slog; import android.util.TimeUtils; Loading Loading @@ -69,8 +68,6 @@ public class WindowAnimator { private Choreographer mChoreographer; private final HandlerExecutor mExecutor; /** * Indicates whether we have an animation frame callback scheduled, which will happen at * vsync-app and then schedule the animation tick at the right time (vsync-sf). Loading @@ -82,7 +79,8 @@ public class WindowAnimator { * A list of runnable that need to be run after {@link WindowContainer#prepareSurfaces} is * executed and the corresponding transaction is closed and applied. */ private ArrayList<Runnable> mAfterPrepareSurfacesRunnables = new ArrayList<>(); private final ArrayList<Runnable> mAfterPrepareSurfacesRunnables = new ArrayList<>(); private boolean mInExecuteAfterPrepareSurfacesRunnables; private final SurfaceControl.Transaction mTransaction; Loading @@ -93,7 +91,6 @@ public class WindowAnimator { mTransaction = service.mTransactionFactory.get(); service.mAnimationHandler.runWithScissors( () -> mChoreographer = Choreographer.getSfInstance(), 0 /* timeout */); mExecutor = new HandlerExecutor(service.mAnimationHandler); mAnimationFrameCallback = frameTimeNs -> { synchronized (mService.mGlobalLock) { Loading Loading @@ -201,19 +198,6 @@ public class WindowAnimator { updateRunningExpensiveAnimationsLegacy(); } final ArrayList<Runnable> afterPrepareSurfacesRunnables = mAfterPrepareSurfacesRunnables; if (!afterPrepareSurfacesRunnables.isEmpty()) { mAfterPrepareSurfacesRunnables = new ArrayList<>(); mTransaction.addTransactionCommittedListener(mExecutor, () -> { synchronized (mService.mGlobalLock) { // Traverse in order they were added. for (int i = 0, size = afterPrepareSurfacesRunnables.size(); i < size; i++) { afterPrepareSurfacesRunnables.get(i).run(); } afterPrepareSurfacesRunnables.clear(); } }); } Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "applyTransaction"); mTransaction.apply(); Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); Loading @@ -221,6 +205,7 @@ public class WindowAnimator { ProtoLog.i(WM_SHOW_TRANSACTIONS, "<<< CLOSE TRANSACTION animate"); mService.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); executeAfterPrepareSurfacesRunnables(); if (DEBUG_WINDOW_TRACE) { Slog.i(TAG, "!!! animate: exit" Loading Loading @@ -302,10 +287,34 @@ public class WindowAnimator { /** * Adds a runnable to be executed after {@link WindowContainer#prepareSurfaces} is called and * the corresponding transaction is closed, applied, and committed. * the corresponding transaction is closed and applied. */ void addAfterPrepareSurfacesRunnable(Runnable r) { // If runnables are already being handled in executeAfterPrepareSurfacesRunnable, then just // immediately execute the runnable passed in. if (mInExecuteAfterPrepareSurfacesRunnables) { r.run(); return; } mAfterPrepareSurfacesRunnables.add(r); scheduleAnimation(); } void executeAfterPrepareSurfacesRunnables() { // Don't even think about to start recursing! if (mInExecuteAfterPrepareSurfacesRunnables) { return; } mInExecuteAfterPrepareSurfacesRunnables = true; // Traverse in order they were added. final int size = mAfterPrepareSurfacesRunnables.size(); for (int i = 0; i < size; i++) { mAfterPrepareSurfacesRunnables.get(i).run(); } mAfterPrepareSurfacesRunnables.clear(); mInExecuteAfterPrepareSurfacesRunnables = false; } }
services/tests/servicestests/utils/com/android/server/testutils/StubTransaction.java +0 −10 Original line number Diff line number Diff line Loading @@ -40,19 +40,12 @@ import java.util.concurrent.Executor; public class StubTransaction extends SurfaceControl.Transaction { private HashSet<Runnable> mWindowInfosReportedListeners = new HashSet<>(); private HashSet<SurfaceControl.TransactionCommittedListener> mTransactionCommittedListeners = new HashSet<>(); @Override public void apply() { for (Runnable listener : mWindowInfosReportedListeners) { listener.run(); } for (SurfaceControl.TransactionCommittedListener listener : mTransactionCommittedListeners) { listener.onTransactionCommitted(); } mTransactionCommittedListeners.clear(); } @Override Loading Loading @@ -246,9 +239,6 @@ public class StubTransaction extends SurfaceControl.Transaction { @Override public SurfaceControl.Transaction addTransactionCommittedListener(Executor executor, SurfaceControl.TransactionCommittedListener listener) { SurfaceControl.TransactionCommittedListener listenerInner = () -> executor.execute(listener::onTransactionCommitted); mTransactionCommittedListeners.add(listenerInner); return this; } Loading
services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java +12 −13 Original line number Diff line number Diff line Loading @@ -94,7 +94,6 @@ public class AppTransitionControllerTest extends WindowTestsBase { public void setUp() throws Exception { assumeFalse(WindowManagerService.sEnableShellTransitions); mAppTransitionController = new AppTransitionController(mWm, mDisplayContent); mWm.mAnimator.ready(); } @Test Loading Loading @@ -856,7 +855,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading Loading @@ -887,7 +886,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, null /* changingTaskFragment */); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation is not run by the remote handler because the activity is filling the Task. assertFalse(remoteAnimationRunner.isAnimationStarted()); Loading Loading @@ -922,7 +921,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, null /* changingTaskFragment */); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading @@ -947,7 +946,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading @@ -974,7 +973,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment1); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation run by the remote handler. assertTrue(remoteAnimationRunner.isAnimationStarted()); Loading @@ -998,7 +997,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation not run by the remote handler. assertFalse(remoteAnimationRunner.isAnimationStarted()); Loading @@ -1025,7 +1024,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(openingActivity, closingActivity, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation should not run by the remote handler when there are non-embedded activities of // different UID. Loading @@ -1052,7 +1051,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // Animation should not run by the remote handler when there is wallpaper in the transition. assertFalse(remoteAnimationRunner.isAnimationStarted()); Loading Loading @@ -1086,7 +1085,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity1, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // The animation will be animated remotely by client and all activities are input disabled // for untrusted animation. Loading Loading @@ -1137,7 +1136,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // The animation will be animated remotely by client and all activities are input disabled // for untrusted animation. Loading Loading @@ -1179,7 +1178,7 @@ public class AppTransitionControllerTest extends WindowTestsBase { // Prepare and start transition. prepareAndTriggerAppTransition(activity, null /* closingActivity */, taskFragment); waitUntilWindowAnimatorIdle(); mWm.mAnimator.executeAfterPrepareSurfacesRunnables(); // The animation will be animated remotely by client, but input should not be dropped for // fully trusted. Loading