summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2013-09-26 16:14:36 -0700
committerAmith Yamasani <yamasani@google.com>2013-09-27 10:28:09 -0700
commit427864188dfc5dd803b15797379b9dc6673abd16 (patch)
tree1b9980738775f95bbfe99b22be67817b6a4d79ff
parent32c990044f027542a034a7606cf010dca6df252f (diff)
downloadframeworks_base-427864188dfc5dd803b15797379b9dc6673abd16.zip
frameworks_base-427864188dfc5dd803b15797379b9dc6673abd16.tar.gz
frameworks_base-427864188dfc5dd803b15797379b9dc6673abd16.tar.bz2
Don't instantiate non-Fragments in Fragment.instantiate
Backport... Fix for PreferenceActivities being invoked with non-Fragment class names via extras in the intent. Make sure that the constructor doesn't get called if the class name is not for a Fragment type. Bug: 9901133 Change-Id: I227756fb4246deac796cee09077e482237bb5b0d
-rw-r--r--core/java/android/app/Fragment.java4
1 files changed, 4 insertions, 0 deletions
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 28876d3..32ee601 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -572,6 +572,10 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
if (clazz == null) {
// Class not found in the cache, see if it's real, and try to add it
clazz = context.getClassLoader().loadClass(fname);
+ if (!Fragment.class.isAssignableFrom(clazz)) {
+ throw new InstantiationException("Trying to instantiate a class " + fname
+ + " that is not a Fragment", new ClassCastException());
+ }
sClassMap.put(fname, clazz);
}
Fragment f = (Fragment)clazz.newInstance();