diff options
| author | 2016-06-20 13:11:03 +0000 | |
|---|---|---|
| committer | 2016-06-20 13:11:04 +0000 | |
| commit | e96706141d36e554e2d7044e966a0042619b23cc (patch) | |
| tree | 1697069e364780061f59f7dc03b0fb265cf36a41 | |
| parent | 4f5beed66f1141372a0ea2daf6d2b28b65f1c871 (diff) | |
| parent | cd916f24a30ea4717ae2c0e66dfeac3355f56869 (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.java | 15 |
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) { |