Merge "Fix issue with project resources overriding framework resources." into gingerbread
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
index 1436494..ecd22e2 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
@@ -266,7 +266,7 @@
             customStyle = parser.getAttributeValue(null /* namespace*/, "style");
         }
         if (customStyle != null) {
-            IResourceValue item = findResValue(customStyle);
+            IResourceValue item = findResValue(customStyle, false /*forceFrameworkOnly*/);
 
             if (item instanceof IStyleResourceValue) {
                 defStyleValues = (IStyleResourceValue)item;
@@ -283,7 +283,7 @@
 
                 if (item != null) {
                     // item is a reference to a style entry. Search for it.
-                    item = findResValue(item.getValue());
+                    item = findResValue(item.getValue(), false /*forceFrameworkOnly*/);
 
                     if (item instanceof IStyleResourceValue) {
                         defStyleValues = (IStyleResourceValue)item;
@@ -413,7 +413,7 @@
         }
 
         // get the IResourceValue referenced by this value
-        IResourceValue resValue = findResValue(value);
+        IResourceValue resValue = findResValue(value, false /*forceFrameworkOnly*/);
 
         // if resValue is null, but value is not null, this means it was not a reference.
         // we return the name/value wrapper in a IResourceValue
@@ -449,7 +449,7 @@
         }
 
         // else attempt to find another IResourceValue referenced by this one.
-        IResourceValue resolvedValue = findResValue(value.getValue());
+        IResourceValue resolvedValue = findResValue(value.getValue(), value.isFramework());
 
         // if the value did not reference anything, then we simply return the input value
         if (resolvedValue == null) {
@@ -476,9 +476,11 @@
      * only support the android namespace.
      *
      * @param reference the resource reference to search for.
+     * @param forceFrameworkOnly if true all references are considered to be toward framework
+     *      resource even if the reference does not include the android: prefix.
      * @return a {@link IResourceValue} or <code>null</code>.
      */
-    IResourceValue findResValue(String reference) {
+    IResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
         if (reference == null) {
             return null;
         }
@@ -560,7 +562,8 @@
                 segments[1] = segments[1].substring(BridgeConstants.PREFIX_ANDROID.length());
             }
 
-            return findResValue(segments[0], segments[1], frameworkOnly);
+            return findResValue(segments[0], segments[1],
+                    forceFrameworkOnly ? true :frameworkOnly);
         }
 
         // Looks like the value didn't reference anything. Return null.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeXmlPullAttributes.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeXmlPullAttributes.java
index 4be6eabc..d145ff6 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeXmlPullAttributes.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeXmlPullAttributes.java
@@ -41,7 +41,7 @@
     /*
      * (non-Javadoc)
      * @see android.util.XmlPullAttributes#getAttributeNameResource(int)
-     * 
+     *
      * This methods must return com.android.internal.R.attr.<name> matching
      * the name of the attribute.
      * It returns 0 if it doesn't find anything.
@@ -50,19 +50,19 @@
     public int getAttributeNameResource(int index) {
         // get the attribute name.
         String name = getAttributeName(index);
-        
+
         // get the attribute namespace
         String ns = mParser.getAttributeNamespace(index);
-        
+
         if (BridgeConstants.NS_RESOURCES.equals(ns)) {
             Integer v = Bridge.getResourceValue(BridgeConstants.RES_ATTR, name);
             if (v != null) {
                 return v.intValue();
             }
-            
+
             return 0;
         }
-        
+
         // this is not an attribute in the android namespace, we query the customviewloader, if
         // the namespaces match.
         if (mContext.getProjectCallback().getNamespace().equals(ns)) {
@@ -75,7 +75,7 @@
 
         return 0;
     }
-    
+
     /*
      * (non-Javadoc)
      * @see android.util.XmlPullAttributes#getAttributeResourceValue(int, int)
@@ -83,7 +83,7 @@
     @Override
     public int getAttributeResourceValue(int index, int defaultValue) {
         String value = getAttributeValue(index);
-        
+
         return resolveResourceValue(value, defaultValue);
     }
 
@@ -94,14 +94,15 @@
     @Override
     public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) {
         String value = getAttributeValue(namespace, attribute);
-        
+
         return resolveResourceValue(value, defaultValue);
     }
 
     private int resolveResourceValue(String value, int defaultValue) {
         // now look for this particular value
-        IResourceValue resource = mContext.resolveResValue(mContext.findResValue(value));
-        
+        IResourceValue resource = mContext.resolveResValue(
+                mContext.findResValue(value, mPlatformFile));
+
         if (resource != null) {
             Integer id = null;
             if (mPlatformFile || resource.isFramework()) {
@@ -115,7 +116,7 @@
                 return id;
             }
         }
-        
+
         return defaultValue;
     }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/ResourceHelper.java
index 3d0dd73..f624753 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/ResourceHelper.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/ResourceHelper.java
@@ -148,8 +148,7 @@
                     parser.setInput(new FileReader(f));
 
                     d = Drawable.createFromXml(context.getResources(),
-                            // FIXME: we need to know if this resource is platform or not
-                            new BridgeXmlBlockParser(parser, context, false));
+                            new BridgeXmlBlockParser(parser, context, isFramework));
                     return d;
                 } catch (XmlPullParserException e) {
                     context.getLogger().error(e);