Loading libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java +13 −0 Original line number Diff line number Diff line Loading @@ -766,6 +766,19 @@ public class TaskViewTransitions implements Transitions.TransitionHandler, TaskV @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { if (transitionInfo == null || transitionInfo.getChanges().isEmpty()) { PendingTransition pending = findPending(transition); if (pending != null) { ProtoLog.e(WM_SHELL_BUBBLES, "Transitions.startAnimation(): found a transition with" + "no changes that is managed by TaskViewTransitions. taskView=%d " + "type=%s transition=%s", pending.mTaskView.hashCode(), transitTypeToString(pending.mType), transition); mPending.remove(pending); startNextTransition(); } return false; } if (!Flags.taskViewTransitionsRefactor() && !enableHandlersDebuggingMode()) { return startAnimationLegacy(transition, transitionInfo, startTransaction, finishTransaction, finishCallback); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java +63 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.wm.shell.taskview; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; Loading Loading @@ -472,6 +473,68 @@ public class TaskViewTransitionsTest extends ShellTestCase { assertThat(mTaskViewTransitions.hasPending()).isTrue(); } @Test public void transitionWithNoChanges_shouldNotBeHandled() { IBinder transition = new Binder(); TransitionInfo transitionInfo = new TransitionInfo(TRANSIT_CLOSE, /* flags= */ 0); boolean handled = mTaskViewTransitions.startAnimation(transition, transitionInfo, new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mock(Transitions.TransitionFinishCallback.class)); assertThat(handled).isFalse(); } @Test public void transitionWithNoChanges_tvtManaged_shouldStartNextTransition() { // enqueue an empty transition managed by TaskViewTransitions IBinder transition = new Binder(); TransitionInfo transitionInfo = new TransitionInfo(TRANSIT_CLOSE, /* flags= */ 0); mTaskViewTransitions.enqueueRunningExternal(mTaskViewTaskController, transition); assertThat(mTaskViewTransitions.hasPending()).isTrue(); // enqueue a normal transition mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true); TaskViewTransitions.PendingTransition pendingTransition = mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT); assertThat(pendingTransition).isNotNull(); assertThat(pendingTransition.mClaimed).isNull(); IBinder pendingTransitionToken = new Binder(); when(mTransitions.startTransition(pendingTransition.mType, pendingTransition.mWct, mTaskViewTransitions)).thenReturn(pendingTransitionToken); // dispatch the empty transition mTaskViewTransitions.startAnimation(transition, transitionInfo, new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mock(Transitions.TransitionFinishCallback.class)); // check that the next transition was dispatched assertThat(pendingTransition.mClaimed).isNotNull(); } @Test public void transitionWithNoChanges_nonTvtManaged_shouldNotStartNextTransition() { // enqueue a normal transition mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true); TaskViewTransitions.PendingTransition pendingTransition = mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT); assertThat(pendingTransition).isNotNull(); assertThat(pendingTransition.mClaimed).isNull(); // dispatch an empty transition which is not managed by TaskViewTransitions IBinder transition = new Binder(); TransitionInfo transitionInfo = new TransitionInfo(TRANSIT_CLOSE, /* flags= */ 0); mTaskViewTransitions.startAnimation(transition, transitionInfo, new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mock(Transitions.TransitionFinishCallback.class)); // check that the next transition was not dispatched assertThat(pendingTransition.mClaimed).isNull(); } private ActivityManager.RunningTaskInfo createMockTaskInfo(int taskId, WindowContainerToken token) { ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java +13 −0 Original line number Diff line number Diff line Loading @@ -766,6 +766,19 @@ public class TaskViewTransitions implements Transitions.TransitionHandler, TaskV @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { if (transitionInfo == null || transitionInfo.getChanges().isEmpty()) { PendingTransition pending = findPending(transition); if (pending != null) { ProtoLog.e(WM_SHELL_BUBBLES, "Transitions.startAnimation(): found a transition with" + "no changes that is managed by TaskViewTransitions. taskView=%d " + "type=%s transition=%s", pending.mTaskView.hashCode(), transitTypeToString(pending.mType), transition); mPending.remove(pending); startNextTransition(); } return false; } if (!Flags.taskViewTransitionsRefactor() && !enableHandlersDebuggingMode()) { return startAnimationLegacy(transition, transitionInfo, startTransaction, finishTransaction, finishCallback); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java +63 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.wm.shell.taskview; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; Loading Loading @@ -472,6 +473,68 @@ public class TaskViewTransitionsTest extends ShellTestCase { assertThat(mTaskViewTransitions.hasPending()).isTrue(); } @Test public void transitionWithNoChanges_shouldNotBeHandled() { IBinder transition = new Binder(); TransitionInfo transitionInfo = new TransitionInfo(TRANSIT_CLOSE, /* flags= */ 0); boolean handled = mTaskViewTransitions.startAnimation(transition, transitionInfo, new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mock(Transitions.TransitionFinishCallback.class)); assertThat(handled).isFalse(); } @Test public void transitionWithNoChanges_tvtManaged_shouldStartNextTransition() { // enqueue an empty transition managed by TaskViewTransitions IBinder transition = new Binder(); TransitionInfo transitionInfo = new TransitionInfo(TRANSIT_CLOSE, /* flags= */ 0); mTaskViewTransitions.enqueueRunningExternal(mTaskViewTaskController, transition); assertThat(mTaskViewTransitions.hasPending()).isTrue(); // enqueue a normal transition mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true); TaskViewTransitions.PendingTransition pendingTransition = mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT); assertThat(pendingTransition).isNotNull(); assertThat(pendingTransition.mClaimed).isNull(); IBinder pendingTransitionToken = new Binder(); when(mTransitions.startTransition(pendingTransition.mType, pendingTransition.mWct, mTaskViewTransitions)).thenReturn(pendingTransitionToken); // dispatch the empty transition mTaskViewTransitions.startAnimation(transition, transitionInfo, new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mock(Transitions.TransitionFinishCallback.class)); // check that the next transition was dispatched assertThat(pendingTransition.mClaimed).isNotNull(); } @Test public void transitionWithNoChanges_nonTvtManaged_shouldNotStartNextTransition() { // enqueue a normal transition mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true); TaskViewTransitions.PendingTransition pendingTransition = mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT); assertThat(pendingTransition).isNotNull(); assertThat(pendingTransition.mClaimed).isNull(); // dispatch an empty transition which is not managed by TaskViewTransitions IBinder transition = new Binder(); TransitionInfo transitionInfo = new TransitionInfo(TRANSIT_CLOSE, /* flags= */ 0); mTaskViewTransitions.startAnimation(transition, transitionInfo, new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mock(Transitions.TransitionFinishCallback.class)); // check that the next transition was not dispatched assertThat(pendingTransition.mClaimed).isNull(); } private ActivityManager.RunningTaskInfo createMockTaskInfo(int taskId, WindowContainerToken token) { ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo(); Loading