Merge "Fix starting window isn't removed" into tm-dev

This commit is contained in:
Charles Chen
2022-05-12 03:39:28 +00:00
committed by Android (Google) Code Review
2 changed files with 9 additions and 2 deletions

View File

@@ -6340,8 +6340,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
mSharedStartingData != null ? mSharedStartingData.mAssociatedTask : null; mSharedStartingData != null ? mSharedStartingData.mAssociatedTask : null;
if (associatedTask == null) { if (associatedTask == null) {
removeStartingWindow(); removeStartingWindow();
} else if (associatedTask.getActivity( } else if (associatedTask.getActivity(r -> r.mVisibleRequested && !r.firstWindowDrawn
r -> r.mVisibleRequested && !r.firstWindowDrawn) == null) { // Don't block starting window removal if an Activity can't be a starting window
// target.
&& r.mSharedStartingData != null) == null) {
// The last drawn activity may not be the one that owns the starting window. // The last drawn activity may not be the one that owns the starting window.
final ActivityRecord r = associatedTask.topActivityContainsStartingWindow(); final ActivityRecord r = associatedTask.topActivityContainsStartingWindow();
if (r != null) { if (r != null) {

View File

@@ -2853,6 +2853,11 @@ public class ActivityRecordTests extends WindowTestsBase {
assertTrue(activity2.isResizeable()); assertTrue(activity2.isResizeable());
activity1.reparent(taskFragment1, POSITION_TOP); activity1.reparent(taskFragment1, POSITION_TOP);
// Adds an Activity which doesn't have shared starting data, and verify if it blocks
// starting window removal.
final ActivityRecord activity3 = new ActivityBuilder(mAtm).build();
taskFragment2.addChild(activity3, POSITION_TOP);
verify(activity1.getSyncTransaction()).reparent(eq(startingWindow.mSurfaceControl), verify(activity1.getSyncTransaction()).reparent(eq(startingWindow.mSurfaceControl),
eq(task.mSurfaceControl)); eq(task.mSurfaceControl));
assertEquals(activity1.mStartingData, startingWindow.mStartingData); assertEquals(activity1.mStartingData, startingWindow.mStartingData);