summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Louis Chang <louischang@google.com> 2020-05-20 16:04:31 +0800
committer Louis Chang <louischang@google.com> 2020-05-25 10:14:57 +0800
commit523e3e8cd622201705419f64a65f0a6348440ced (patch)
tree9d32d4b1c6d3ec1a10e508182a5c6282e0fe0a29
parente39c2e7e61ebcab215af5bd7c9c6525bd4b76f35 (diff)
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
-rw-r--r--services/core/java/com/android/server/wm/Task.java6
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskTests.java12
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 cc72dcfb0be2..3facfd4837c8 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<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 473c1c57d625..1415c506a1c9 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));
+ }
}