diff options
2 files changed, 28 insertions, 8 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java index 5c02dbcb5255..473deba3b7d2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java @@ -57,7 +57,9 @@ public class HomeTransitionObserver implements TransitionObserver, @NonNull SurfaceControl.Transaction finishTransaction) { for (TransitionInfo.Change change : info.getChanges()) { final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo(); - if (taskInfo == null || taskInfo.taskId == -1) { + if (taskInfo == null + || taskInfo.taskId == -1 + || !taskInfo.isRunning) { continue; } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java index 421c44511a54..50802c3759c9 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java @@ -101,7 +101,7 @@ public class HomeTransitionObserverTest extends ShellTestCase { when(change.getTaskInfo()).thenReturn(taskInfo); when(info.getChanges()).thenReturn(new ArrayList<>(List.of(change))); - setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_OPEN); + setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_OPEN, true); mHomeTransitionObserver.onTransitionReady(mock(IBinder.class), info, @@ -119,7 +119,7 @@ public class HomeTransitionObserverTest extends ShellTestCase { when(change.getTaskInfo()).thenReturn(taskInfo); when(info.getChanges()).thenReturn(new ArrayList<>(List.of(change))); - setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_TO_BACK); + setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_TO_BACK, true); mHomeTransitionObserver.onTransitionReady(mock(IBinder.class), info, @@ -137,7 +137,25 @@ public class HomeTransitionObserverTest extends ShellTestCase { when(change.getTaskInfo()).thenReturn(taskInfo); when(info.getChanges()).thenReturn(new ArrayList<>(List.of(change))); - setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_UNDEFINED, TRANSIT_TO_BACK); + setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_UNDEFINED, TRANSIT_TO_BACK, true); + + mHomeTransitionObserver.onTransitionReady(mock(IBinder.class), + info, + mock(SurfaceControl.Transaction.class), + mock(SurfaceControl.Transaction.class)); + + verify(mListener, times(0)).onHomeVisibilityChanged(anyBoolean()); + } + + @Test + public void testNonRunningHomeActivityDoesNotTriggerCallback() throws RemoteException { + TransitionInfo info = mock(TransitionInfo.class); + TransitionInfo.Change change = mock(TransitionInfo.Change.class); + ActivityManager.RunningTaskInfo taskInfo = mock(ActivityManager.RunningTaskInfo.class); + when(change.getTaskInfo()).thenReturn(taskInfo); + when(info.getChanges()).thenReturn(new ArrayList<>(List.of(change))); + + setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_UNDEFINED, TRANSIT_TO_BACK, false); mHomeTransitionObserver.onTransitionReady(mock(IBinder.class), info, @@ -156,7 +174,7 @@ public class HomeTransitionObserverTest extends ShellTestCase { when(info.getChanges()).thenReturn(new ArrayList<>(List.of(change))); when(change.hasFlags(FLAG_BACK_GESTURE_ANIMATED)).thenReturn(true); - setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_CHANGE); + setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_CHANGE, true); mHomeTransitionObserver.onTransitionReady(mock(IBinder.class), info, @@ -166,16 +184,16 @@ public class HomeTransitionObserverTest extends ShellTestCase { verify(mListener, times(1)).onHomeVisibilityChanged(true); } - /** * Helper class to initialize variables for the rest. */ private void setupTransitionInfo(ActivityManager.RunningTaskInfo taskInfo, TransitionInfo.Change change, @ActivityType int activityType, - @TransitionMode int mode) { + @TransitionMode int mode, + boolean isRunning) { when(taskInfo.getActivityType()).thenReturn(activityType); when(change.getMode()).thenReturn(mode); + taskInfo.isRunning = isRunning; } - } |