From 2af23635c22403c4c4ceaee12130492089a04d79 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Thu, 18 Jul 2024 10:04:21 +0800 Subject: Don't assocaite starting window to task for overlay TF Before, we always associate starting window to task for embedded TF. Now we don't do that for overlay TF because there must be a visible activity in a task, and we just need to show splash screen on the overlay TF. Test: manual - demo app Test: atest WmTests:ActivityRecordTests Fixes: 321881164 Flag: EXEMPT bugfix Change-Id: Ib361b45aa3ccd71f09394b19ab38939fbf9015b9 --- .../java/com/android/server/wm/ActivityRecord.java | 6 ++++++ .../com/android/server/wm/ActivityRecordTests.java | 25 +++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 3076b873058d..21618ea8cb58 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2896,6 +2896,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A || mStartingData.mAssociatedTask != null) { return; } + if (task.isVisible() && !task.inTransition()) { + // Don't associated with task if the task is visible especially when the activity is + // embedded. We just need to show splash screen on the activity in case the first frame + // is not ready. + return; + } associateStartingDataWithTask(); attachStartingSurfaceToAssociatedTask(); } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index b4505fad1b20..24fc7ee0c392 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -2955,7 +2955,8 @@ public class ActivityRecordTests extends WindowTestsBase { @Test public void testStartingWindowInTaskFragment() { - final ActivityRecord activity1 = new ActivityBuilder(mAtm).setCreateTask(true).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setCreateTask(true) + .setVisible(false).build(); final WindowState startingWindow = createWindowState( new WindowManager.LayoutParams(TYPE_APPLICATION_STARTING), activity1); activity1.addWindow(startingWindow); @@ -3010,6 +3011,28 @@ public class ActivityRecordTests extends WindowTestsBase { assertNull(task.mSharedStartingData); } + @Test + public void testStartingWindowInTaskFragmentWithVisibleTask() { + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setCreateTask(true).build(); + final Task task = activity1.getTask(); + final Rect taskBounds = task.getBounds(); + final Rect tfBounds = new Rect(taskBounds.left, taskBounds.top, + taskBounds.left + taskBounds.width() / 2, taskBounds.bottom); + final TaskFragment taskFragment = new TaskFragmentBuilder(mAtm).setParentTask(task) + .setBounds(tfBounds).build(); + + final ActivityRecord activity2 = new ActivityBuilder(mAtm).build(); + final WindowState startingWindow = createWindowState( + new WindowManager.LayoutParams(TYPE_APPLICATION_STARTING), activity1); + taskFragment.addChild(activity2); + activity2.addWindow(startingWindow); + activity2.mStartingData = mock(StartingData.class); + activity2.attachStartingWindow(startingWindow); + + assertNull(activity2.mStartingData.mAssociatedTask); + assertNull(task.mSharedStartingData); + } + @Test public void testTransitionAnimationBounds() { removeGlobalMinSizeRestriction(); -- cgit v1.2.3-59-g8ed1b