summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Clara Bayarri <clarabayarri@google.com> 2016-06-20 13:11:03 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-06-20 13:11:04 +0000
commite96706141d36e554e2d7044e966a0042619b23cc (patch)
tree1697069e364780061f59f7dc03b0fb265cf36a41
parent4f5beed66f1141372a0ea2daf6d2b28b65f1c871 (diff)
parentcd916f24a30ea4717ae2c0e66dfeac3355f56869 (diff)
Merge "Throw ISE when adding a non-public non-static fragment class instance to a transaction"
-rw-r--r--core/java/android/app/BackStackRecord.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java
index 1e2cc2662018..00ed21f6908b 100644
--- a/core/java/android/app/BackStackRecord.java
+++ b/core/java/android/app/BackStackRecord.java
@@ -17,6 +17,7 @@
package android.app;
import android.graphics.Rect;
+import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -35,6 +36,7 @@ import com.android.internal.util.FastPrintWriter;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
@@ -462,6 +464,19 @@ final class BackStackRecord extends FragmentTransaction implements
}
private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) {
+ if (mManager.mHost.getContext() != null) {
+ final int targetSdkVersion =
+ mManager.mHost.getContext().getApplicationInfo().targetSdkVersion;
+ final Class fragmentClass = fragment.getClass();
+ final int modifiers = fragmentClass.getModifiers();
+ // TODO: make the check N_MR1 or O
+ if (targetSdkVersion > Build.VERSION_CODES.N && (fragmentClass.isAnonymousClass()
+ || !Modifier.isPublic(modifiers)
+ || (fragmentClass.isMemberClass() && !Modifier.isStatic(modifiers)))) {
+ throw new IllegalStateException("Fragment must be a public static class to be "
+ + "properly recreated on configuration change.");
+ }
+ }
fragment.mFragmentManager = mManager;
if (tag != null) {