diff options
3 files changed, 21 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 430232c1bfc4..c74284e5976c 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -2311,8 +2311,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { mService.setLastResumedActivityUncheckLocked(mTopResumedActivity, reason); } scheduleTopResumedActivityStateIfNeeded(); - - mService.updateTopApp(mTopResumedActivity); + // If the device is not sleeping and there is no top resumed, do not update top app because + // it may be an intermediate state while moving a task to front. The actual top will be set + // when TaskFragment#setResumedActivity is called. + if (mTopResumedActivity != null || mService.isSleepingLocked()) { + mService.updateTopApp(mTopResumedActivity); + } return mTopResumedActivity; } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java index 6b614fadba39..27a4a2b69e31 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java @@ -343,6 +343,20 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase { verify(mAtm).setLastResumedActivityUncheckLocked(any(), eq("test")); } + @Test + public void testUpdateTopResumed_moveToFront() { + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setCreateTask(true).build(); + final ActivityRecord activity2 = new ActivityBuilder(mAtm).setCreateTask(true).build(); + activity2.setState(ActivityRecord.State.RESUMED, "test"); + assertEquals(activity2.app, mAtm.mTopApp); + activity1.getTask().moveToFront("test"); + // If the device is not sleeping, the app should be only set with resumed state. + assertEquals(activity2.app, mAtm.mTopApp); + activity2.setState(ActivityRecord.State.PAUSED, "test"); + activity1.setState(ActivityRecord.State.RESUMED, "test"); + assertEquals(activity1.app, mAtm.mTopApp); + } + /** * We need to launch home again after user unlocked for those displays that do not have * encryption aware home app. diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java index 400e4b6686cb..059fed20c38d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java @@ -406,6 +406,7 @@ public class WindowProcessControllerTests extends WindowTestsBase { verify(tracker).onActivityResumedWhileVisible(mWpc); assertTrue(tracker.hasResumedActivity(mWpc.mUid)); + mAtm.mTopApp = null; activity.makeFinishingLocked(); activity.setState(PAUSING, "test"); |