diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index ad1a205a4910f..bafe418ec7ac0 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1378,6 +1378,9 @@ class Task extends WindowContainer { void addChild(WindowContainer child, int index) { // If this task had any child before we added this one. boolean hadChild = hasChild(); + // getActivityType() looks at the top child, so we need to read the type before adding + // a new child in case the new child is on top and UNDEFINED. + final int activityType = getActivityType(); index = getAdjustedChildPosition(child, index); super.addChild(child, index); @@ -1418,7 +1421,7 @@ class Task extends WindowContainer { ActivityTaskManager.getMaxAppRecentsLimitStatic()); } else { // Otherwise make all added activities match this one. - r.setActivityType(getActivityType()); + r.setActivityType(activityType); } updateEffectiveIntent(); 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 413ae134fe186..7cb5e84e4e480 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java @@ -208,4 +208,22 @@ public class TaskStackTests extends WindowTestsBase { assertEquals(stackBounds.left - stackOutset, stack.getLastSurfacePosition().x); assertEquals(stackBounds.top - stackOutset, stack.getLastSurfacePosition().y); } + + @Test + public void testActivityAndTaskGetsProperType() { + final ActivityStack stack = createTaskStackOnDisplay(mDisplayContent); + final Task task1 = createTaskInStack(stack, 0 /* userId */); + ActivityRecord activity1 = WindowTestUtils.createTestActivityRecord(mDisplayContent); + + // First activity should become standard + task1.addChild(activity1, 0); + assertEquals(WindowConfiguration.ACTIVITY_TYPE_STANDARD, activity1.getActivityType()); + assertEquals(WindowConfiguration.ACTIVITY_TYPE_STANDARD, task1.getActivityType()); + + // Second activity should also become standard + ActivityRecord activity2 = WindowTestUtils.createTestActivityRecord(mDisplayContent); + task1.addChild(activity2, WindowContainer.POSITION_TOP); + assertEquals(WindowConfiguration.ACTIVITY_TYPE_STANDARD, activity2.getActivityType()); + assertEquals(WindowConfiguration.ACTIVITY_TYPE_STANDARD, task1.getActivityType()); + } }