Merge "Wait for relaunching activity to finish sync" into udc-dev
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 839a039..acfa30c 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -10608,6 +10608,7 @@
return false;
}
if (!isVisibleRequested()) return true;
+ if (mPendingRelaunchCount > 0) return false;
// Wait for attach. That is the earliest time where we know if there will be an associated
// display rotation. If we don't wait, the starting-window can finishDrawing first and
// cause the display rotation to end-up in a following transition.
diff --git a/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java b/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java
index 5eebe74..fc5e9ca 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java
@@ -18,6 +18,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
@@ -119,6 +120,22 @@
assertTrue(mockWC.onSyncFinishedDrawing());
bse.onSurfacePlacement();
verify(listener, times(1)).onTransactionReady(eq(id), notNull());
+
+ // The sync is not finished for a relaunching activity.
+ id = startSyncSet(bse, listener);
+ final ActivityRecord r = new ActivityBuilder(mAtm).setCreateTask(true).build();
+ final WindowState w = mock(WindowState.class);
+ doReturn(true).when(w).isVisibleRequested();
+ doReturn(true).when(w).fillsParent();
+ doReturn(true).when(w).isSyncFinished(any());
+ r.mChildren.add(w);
+ bse.addToSyncSet(id, r);
+ r.onSyncFinishedDrawing();
+ assertTrue(r.isSyncFinished(r.getSyncGroup()));
+ r.startRelaunching();
+ assertFalse(r.isSyncFinished(r.getSyncGroup()));
+ r.finishRelaunching();
+ assertTrue(r.isSyncFinished(r.getSyncGroup()));
}
@Test