From edbda50a0e4f3eb09c7ff3d4a1d27aa47b6047a6 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Mon, 27 Apr 2020 15:51:42 +0800 Subject: [PATCH] Allow non-leaf task to be moved to top Non-leaf task was not able to moved to top because the task was created from another user. Therefore, home task didn't moved to top when entering split-screen on secondary user. Check if the topmost task is current profile instead. Bug: 154237928 Test: atest TaskStackTests Change-Id: Iffa80d0bbadd3a54dcae3da6282aeafa094b0819 --- services/core/java/com/android/server/wm/Task.java | 3 ++- .../wmtests/src/com/android/server/wm/TaskStackTests.java | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 2115a591a6b77..18cb5e6233363 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3112,7 +3112,8 @@ class Task extends WindowContainer { @Override boolean showToCurrentUser() { - return mForceShowForAllUsers || showForAllUsers() || mWmService.isCurrentProfile(mUserId); + return mForceShowForAllUsers || showForAllUsers() + || mWmService.isCurrentProfile(getTopMostTask().mUserId); } void setForceShowForAllUsers(boolean forceShowForAllUsers) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java index f354a04101f56..9fdb9d8f9844a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java @@ -72,6 +72,13 @@ public class TaskStackTests extends WindowTestsBase { stack.positionChildAt(WindowContainer.POSITION_TOP, task2, false /* includingParents */); assertEquals(stack.mChildren.get(0), task2); assertEquals(stack.mChildren.get(1), task1); + + // Non-leaf task should be moved to top regardless of the user id. + createTaskInStack((ActivityStack) task2, 0 /* userId */); + createTaskInStack((ActivityStack) task2, 1 /* userId */); + stack.positionChildAt(WindowContainer.POSITION_TOP, task2, false /* includingParents */); + assertEquals(stack.mChildren.get(0), task1); + assertEquals(stack.mChildren.get(1), task2); } @Test