diff options
-rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 12 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/StartingData.java | 4 |
2 files changed, 9 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index f52a74fcdf9f..8c23eaad5521 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2641,7 +2641,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return true; } // Only do transfer after transaction has done when starting window exist. - if (mStartingData != null && mStartingData.mWaitForSyncTransactionCommit) { + if (mStartingData != null && mStartingData.mWaitForSyncTransactionCommitCount > 0) { mStartingData.mRemoveAfterTransaction = AFTER_TRANSACTION_COPY_TO_CLIENT; return true; } @@ -2804,9 +2804,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A @Override void waitForSyncTransactionCommit(ArraySet<WindowContainer> wcAwaitingCommit) { + // Only add once per transition. + final boolean added = wcAwaitingCommit.contains(this); super.waitForSyncTransactionCommit(wcAwaitingCommit); - if (mStartingData != null) { - mStartingData.mWaitForSyncTransactionCommit = true; + if (!added && mStartingData != null) { + mStartingData.mWaitForSyncTransactionCommitCount++; } } @@ -2817,7 +2819,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return; } final StartingData lastData = mStartingData; - lastData.mWaitForSyncTransactionCommit = false; + lastData.mWaitForSyncTransactionCommitCount--; if (lastData.mRemoveAfterTransaction == AFTER_TRANSACTION_REMOVE_DIRECTLY) { removeStartingWindowAnimation(lastData.mPrepareRemoveAnimation); } else if (lastData.mRemoveAfterTransaction == AFTER_TRANSACTION_COPY_TO_CLIENT) { @@ -2847,7 +2849,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final boolean animate; final boolean hasImeSurface; if (mStartingData != null) { - if (mStartingData.mWaitForSyncTransactionCommit + if (mStartingData.mWaitForSyncTransactionCommitCount > 0 || mSyncState != SYNC_STATE_NONE) { mStartingData.mRemoveAfterTransaction = AFTER_TRANSACTION_REMOVE_DIRECTLY; mStartingData.mPrepareRemoveAnimation = prepareAnimation; diff --git a/services/core/java/com/android/server/wm/StartingData.java b/services/core/java/com/android/server/wm/StartingData.java index 24fb20731c43..22c7e8c98808 100644 --- a/services/core/java/com/android/server/wm/StartingData.java +++ b/services/core/java/com/android/server/wm/StartingData.java @@ -69,7 +69,7 @@ public abstract class StartingData { * Note this isn't equal to transition playing, the period should be * Sync finishNow -> Start transaction apply. */ - boolean mWaitForSyncTransactionCommit; + int mWaitForSyncTransactionCommitCount; /** * For Shell transition. @@ -112,7 +112,7 @@ public abstract class StartingData { public String toString() { return getClass().getSimpleName() + "{" + Integer.toHexString(System.identityHashCode(this)) - + " waitForSyncTransactionCommit=" + mWaitForSyncTransactionCommit + + " mWaitForSyncTransactionCommitCount=" + mWaitForSyncTransactionCommitCount + " removeAfterTransaction= " + mRemoveAfterTransaction + "}"; } |