From e91a468a599ce8e138fedfd120296335efec26eb Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 5 Apr 2023 23:03:46 +0000 Subject: [PATCH] Ignore empty tasks when unfreezing recents list after timeout - The top task can sometimes be a root that doesn't have any children (ie. split root), which can lead to an empty task being in the recents list Bug: 275425871 Test: atest SwitchBetweenSplitPairs Change-Id: Ia0bd7a08870e8cbd4849f79506fd8db9a1d18d65 --- services/core/java/com/android/server/wm/RecentTasks.java | 3 ++- .../wmtests/src/com/android/server/wm/RecentTasksTest.java | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index dda0d6c3c3f27..0877e3c1f4614 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -338,7 +338,8 @@ class RecentTasks { synchronized (mService.mGlobalLock) { final Task focusedStack = mService.getTopDisplayFocusedRootTask(); final Task topTask = focusedStack != null ? focusedStack.getTopMostTask() : null; - resetFreezeTaskListReordering(topTask); + final Task reorderToEndTask = topTask != null && topTask.hasChild() ? topTask : null; + resetFreezeTaskListReordering(reorderToEndTask); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java index 9ebc7307418d4..10f4158205e6a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java @@ -924,6 +924,11 @@ public class RecentTasksTest extends WindowTestsBase { @Test public void testFreezeTaskListOrder_timeout() { + for (Task t : mTasks) { + // Make all the tasks non-empty + new ActivityBuilder(mAtm).setTask(t).build(); + } + // Add some tasks mRecentTasks.add(mTasks.get(0)); mRecentTasks.add(mTasks.get(1));