From 523e3e8cd622201705419f64a65f0a6348440ced Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Wed, 20 May 2020 16:04:31 +0800 Subject: [PATCH] Fix returning activity that not in the task Illegal state warning logs were able to observe on normal activity starts flow. Also should only returning the activity if it is the descendant of this task. Bug: 156882835 Test: atest TaskTests Change-Id: Ia44bbbd8254e3f05b440153c180a3317e4d79209 --- services/core/java/com/android/server/wm/Task.java | 6 +----- .../wmtests/src/com/android/server/wm/TaskTests.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index cc72dcfb0be21..3facfd4837c80 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3766,11 +3766,7 @@ class Task extends WindowContainer { if (r == null) { return null; } - final Task task = r.getRootTask(); - if (task != null && r.isDescendantOf(task)) { - if (task != this) Slog.w(TAG, "Illegal state! task does not point to stack it is in. " - + "stack=" + this + " task=" + task + " r=" + r - + " callers=" + Debug.getCallers(15, "\n")); + if (r.isDescendantOf(this)) { return r; } return null; diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java index 473c1c57d625c..1415c506a1c9f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java @@ -146,4 +146,16 @@ public class TaskTests extends WindowTestsBase { task.setBounds(bounds); assertEquals(new Point(bounds.left, bounds.top), task.getLastSurfacePosition()); } + + @Test + public void testIsInStack() { + final Task task1 = createTaskStackOnDisplay(mDisplayContent); + final Task task2 = createTaskStackOnDisplay(mDisplayContent); + final ActivityRecord activity1 = + WindowTestUtils.createActivityRecordInTask(mDisplayContent, task1); + final ActivityRecord activity2 = + WindowTestUtils.createActivityRecordInTask(mDisplayContent, task2); + assertEquals(activity1, task1.isInTask(activity1)); + assertNull(task1.isInTask(activity2)); + } }