diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/Activity.java | 2 | ||||
| -rw-r--r-- | core/java/android/app/ActivityTransitionState.java | 24 | ||||
| -rw-r--r-- | core/java/android/app/EnterTransitionCoordinator.java | 8 | ||||
| -rw-r--r-- | core/java/android/app/ExitTransitionCoordinator.java | 4 |
4 files changed, 34 insertions, 4 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index cc1d68e88b6f..309571849a65 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -1246,7 +1246,7 @@ public class Activity extends ContextThemeWrapper protected void onResume() { if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this); getApplication().dispatchActivityResumed(this); - mActivityTransitionState.onResume(); + mActivityTransitionState.onResume(this, isTopOfTask()); mCalled = true; } diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java index bf0bd795230e..d3ca7eebdfcd 100644 --- a/core/java/android/app/ActivityTransitionState.java +++ b/core/java/android/app/ActivityTransitionState.java @@ -236,9 +236,27 @@ class ActivityTransitionState { } } - public void onResume() { - restoreExitedViews(); - restoreReenteringViews(); + public void onResume(Activity activity, boolean isTopOfTask) { + // After orientation change, the onResume can come in before the top Activity has + // left, so if the Activity is not top, wait a second for the top Activity to exit. + if (mCalledExitCoordinator == null) { + return; // This is the called activity + } + if (isTopOfTask || mEnterTransitionCoordinator == null) { + restoreExitedViews(); + restoreReenteringViews(); + } else { + activity.mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (mEnterTransitionCoordinator == null || + mEnterTransitionCoordinator.isWaitingForRemoteExit()) { + restoreExitedViews(); + restoreReenteringViews(); + } + } + }, 1000); + } } public void clear() { diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index d89c0e0ef6f2..a5995846014e 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -244,6 +244,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } + public boolean isWaitingForRemoteExit() { + return mIsReturning && mResultReceiver != null; + } + /** * This is called onResume. If an Activity is resuming and the transitions * haven't started yet, force the views to appear. This is likely to be @@ -288,6 +292,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { cancelPendingTransitions(); } mAreViewsReady = true; + if (mResultReceiver != null) { + mResultReceiver.send(MSG_CANCEL, null); + mResultReceiver = null; + } } private void cancel() { diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java index ce017f68f082..040428877371 100644 --- a/core/java/android/app/ExitTransitionCoordinator.java +++ b/core/java/android/app/ExitTransitionCoordinator.java @@ -100,6 +100,10 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { mExitSharedElementBundle = resultData; sharedElementExitBack(); break; + case MSG_CANCEL: + mIsCanceled = true; + finish(); + break; } } |
