From 23bc78ac57a22984c714b3d1f77cd4f2f851d8d2 Mon Sep 17 00:00:00 2001 From: Yao Qijing Date: Thu, 6 Apr 2023 10:39:56 +0000 Subject: [PATCH] Skip home activity in removeUnreachableHiddenTasks For devices that support multiple displays, when connecting to a new display, a new home activity will be added under the new display. It triggers RecentTasks#removeUnreachableHiddenTasks() to clean up the unreachable hidden tasks, which may also remove the home activity of the old display(eg. when the task on the old display is in fullscreen, the home activity is an unreachable hidden task and therefore, gets removed). This is not a desired behavior because each display is expected to have its own home activity. This change adds a check to avoid removing the home activities in the removeUnreachableHiddenTasks() method. Bug: 274862596 Test: Manual test, make sure that connecting an external display doesn't remove the original home activity. Change-Id: I1b7e8c9706d8b5ab53766779aec63141ca0669ed --- services/core/java/com/android/server/wm/RecentTasks.java | 2 +- 1 file changed, 1 insertion(+), 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 14b845c6f6435..6c708498cba6c 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -1512,7 +1512,7 @@ class RecentTasks { // callbacks here. final Task removedTask = mTasks.remove(removeIndex); if (removedTask != task) { - if (removedTask.hasChild()) { + if (removedTask.hasChild() && !removedTask.isActivityTypeHome()) { Slog.i(TAG, "Add " + removedTask + " to hidden list because adding " + task); // A non-empty task is replaced by a new task. Because the removed task is no longer // managed by the recent tasks list, add it to the hidden list to prevent the task