summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/Activity.java2
-rw-r--r--core/java/android/app/ActivityTransitionState.java24
-rw-r--r--core/java/android/app/EnterTransitionCoordinator.java8
-rw-r--r--core/java/android/app/ExitTransitionCoordinator.java4
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;
}
}