Add Activity.isChangingConfiguration().
This allows activities to know if they're being
torn down due to a configuration change.
Bug: 2557550
Change-Id: Ibd9bf5a06c92dbe3789049b84133cf4754381873
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 5cb8f89..aa3cb69 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -637,6 +637,8 @@
private boolean mStopped;
boolean mFinished;
boolean mStartedActivity;
+ /** true if the activity is being destroyed in order to recreate it with a new configuration */
+ /*package*/ boolean mChangingConfigurations = false;
/*package*/ int mConfigChangeFlags;
/*package*/ Configuration mCurrentConfig;
private SearchManager mSearchManager;
@@ -3402,6 +3404,19 @@
}
/**
+ * Check to see whether this activity is in the process of being destroyed in order to be
+ * recreated with a new configuration. This is often used in
+ * {@link #onStop} to determine whether the state needs to be cleaned up or will be passed
+ * on to the next instance of the activity via {@link #onRetainNonConfigurationInstance()}.
+ *
+ * @return If the activity is being torn down in order to be recreated with a new configuration,
+ * returns true; else returns false.
+ */
+ public boolean isChangingConfigurations() {
+ return mChangingConfigurations;
+ }
+
+ /**
* Call this when your activity is done and should be closed. The
* ActivityResult is propagated back to whoever launched you via
* onActivityResult().
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index acedcdb..3ec8bba 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3575,6 +3575,9 @@
if (finishing) {
r.activity.mFinished = true;
}
+ if (getNonConfigInstance) {
+ r.activity.mChangingConfigurations = true;
+ }
if (!r.paused) {
try {
r.activity.mCalled = false;