summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2010-06-16 18:32:00 -0700
committerGilles Debunne <debunne@google.com>2010-06-16 18:38:13 -0700
commit3030193dc179b3010f2dd3bffe9c1dec54da38fc (patch)
treee9c52a7df9fb0fd7710423aff21f87cd464e3cc7 /core/java
parent2f7a247c921ad1b86b7ba79cdb0431233827ad57 (diff)
downloadframeworks_base-3030193dc179b3010f2dd3bffe9c1dec54da38fc.zip
frameworks_base-3030193dc179b3010f2dd3bffe9c1dec54da38fc.tar.gz
frameworks_base-3030193dc179b3010f2dd3bffe9c1dec54da38fc.tar.bz2
Removed warnings in LayoutInflater.
These changes are similar to those of CL 49296. They do not include the generic fixes done on GenericInflater.java, which had issues and broke the build. Added a asSubClass method in LayoutInflater which will (correctly) throw a ClassCastException when the inflated class is not a View subclass. Performance testing on these changes showed a 10% performance improvement, which is still to be explained. Change-Id: Id4d3b45f0945baccdbbda15fcce095e855b23c9a
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/appwidget/AppWidgetHostView.java7
-rw-r--r--core/java/android/view/LayoutInflater.java35
-rw-r--r--core/java/android/widget/RemoteViews.java7
3 files changed, 29 insertions, 20 deletions
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index 5375193..f372529 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -23,9 +23,9 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
-import android.os.SystemClock;
-import android.os.Parcelable;
import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
@@ -58,7 +58,7 @@ public class AppWidgetHostView extends FrameLayout {
// When we're inflating the initialLayout for a AppWidget, we only allow
// views that are allowed in RemoteViews.
static final LayoutInflater.Filter sInflaterFilter = new LayoutInflater.Filter() {
- public boolean onLoadClass(Class clazz) {
+ public boolean onLoadClass(Class<?> clazz) {
return clazz.isAnnotationPresent(RemoteViews.RemoteView.class);
}
};
@@ -276,6 +276,7 @@ public class AppWidgetHostView extends FrameLayout {
}
}
+ @Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
if (CROSSFADE) {
int alpha;
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java
index 0dfe425..3e3dbdf 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -16,15 +16,15 @@
package android.view;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
import android.content.Context;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.util.AttributeSet;
import android.util.Xml;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.HashMap;
@@ -71,11 +71,11 @@ public abstract class LayoutInflater {
private final Object[] mConstructorArgs = new Object[2];
- private static final Class[] mConstructorSignature = new Class[] {
+ private static final Class<?>[] mConstructorSignature = new Class[] {
Context.class, AttributeSet.class};
- private static final HashMap<String, Constructor> sConstructorMap =
- new HashMap<String, Constructor>();
+ private static final HashMap<String, Constructor<? extends View>> sConstructorMap =
+ new HashMap<String, Constructor<? extends View>>();
private HashMap<String, Boolean> mFilterMap;
@@ -97,7 +97,7 @@ public abstract class LayoutInflater {
*
* @return True if this class is allowed to be inflated, or false otherwise
*/
- boolean onLoadClass(Class clazz);
+ boolean onLoadClass(Class<?> clazz);
}
public interface Factory {
@@ -453,18 +453,18 @@ public abstract class LayoutInflater {
* @param name The full name of the class to be instantiated.
* @param attrs The XML attributes supplied for this instance.
*
- * @return View The newly instantied view, or null.
+ * @return View The newly instantiated view, or null.
*/
public final View createView(String name, String prefix, AttributeSet attrs)
throws ClassNotFoundException, InflateException {
- Constructor constructor = sConstructorMap.get(name);
- Class clazz = null;
+ Constructor<? extends View> constructor = sConstructorMap.get(name);
+ Class<? extends View> clazz = null;
try {
if (constructor == null) {
// Class not found in the cache, see if it's real, and try to add it
clazz = mContext.getClassLoader().loadClass(
- prefix != null ? (prefix + name) : name);
+ prefix != null ? (prefix + name) : name).asSubclass(View.class);
if (mFilter != null && clazz != null) {
boolean allowed = mFilter.onLoadClass(clazz);
@@ -482,7 +482,7 @@ public abstract class LayoutInflater {
if (allowedState == null) {
// New class -- remember whether it is allowed
clazz = mContext.getClassLoader().loadClass(
- prefix != null ? (prefix + name) : name);
+ prefix != null ? (prefix + name) : name).asSubclass(View.class);
boolean allowed = clazz != null && mFilter.onLoadClass(clazz);
mFilterMap.put(name, allowed);
@@ -497,7 +497,7 @@ public abstract class LayoutInflater {
Object[] args = mConstructorArgs;
args[1] = attrs;
- return (View) constructor.newInstance(args);
+ return constructor.newInstance(args);
} catch (NoSuchMethodException e) {
InflateException ie = new InflateException(attrs.getPositionDescription()
@@ -506,6 +506,13 @@ public abstract class LayoutInflater {
ie.initCause(e);
throw ie;
+ } catch (ClassCastException e) {
+ // If loaded class is not a View subclass
+ InflateException ie = new InflateException(attrs.getPositionDescription()
+ + ": Class is not a View "
+ + (prefix != null ? (prefix + name) : name));
+ ie.initCause(e);
+ throw ie;
} catch (ClassNotFoundException e) {
// If loadClass fails, we should propagate the exception.
throw e;
@@ -519,7 +526,7 @@ public abstract class LayoutInflater {
}
/**
- * Throw an excpetion because the specified class is not allowed to be inflated.
+ * Throw an exception because the specified class is not allowed to be inflated.
*/
private void failNotAllowed(String name, String prefix, AttributeSet attrs) {
InflateException ie = new InflateException(attrs.getPositionDescription()
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 7a70c80..f1b05e2 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -60,12 +60,12 @@ public class RemoteViews implements Parcelable, Filter {
* The package name of the package containing the layout
* resource. (Added to the parcel)
*/
- private String mPackage;
+ private final String mPackage;
/**
* The resource ID of the layout file. (Added to the parcel)
*/
- private int mLayoutId;
+ private final int mLayoutId;
/**
* An array of actions to perform on the view tree once it has been
@@ -569,6 +569,7 @@ public class RemoteViews implements Parcelable, Filter {
}
}
+ @Override
public RemoteViews clone() {
final RemoteViews that = new RemoteViews(mPackage, mLayoutId);
if (mActions != null) {
@@ -989,7 +990,7 @@ public class RemoteViews implements Parcelable, Filter {
*
* @see android.view.LayoutInflater.Filter#onLoadClass(java.lang.Class)
*/
- public boolean onLoadClass(Class clazz) {
+ public boolean onLoadClass(Class<?> clazz) {
return clazz.isAnnotationPresent(RemoteView.class);
}