diff options
author | Xavier Ducrohet <xav@android.com> | 2011-06-28 18:53:54 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-06-28 18:53:54 -0700 |
commit | 155cf6c1e191bb03fe24db8663715862d8e6a43d (patch) | |
tree | 9dfacc0c137a1b6e7b8909778a1c7b14679c46b2 /tools | |
parent | e0947693c9984727dfa775a747dd32aaaeb90284 (diff) | |
parent | 9918ffb07f47430e22f6e53576d59b599f5a3534 (diff) | |
download | frameworks_base-155cf6c1e191bb03fe24db8663715862d8e6a43d.zip frameworks_base-155cf6c1e191bb03fe24db8663715862d8e6a43d.tar.gz frameworks_base-155cf6c1e191bb03fe24db8663715862d8e6a43d.tar.bz2 |
am 9918ffb0: Merge "CherryPick 988eeeb5 from hc-mr1. do not merge." into gingerbread
* commit '9918ffb07f47430e22f6e53576d59b599f5a3534':
CherryPick 988eeeb5 from hc-mr1. do not merge.
Diffstat (limited to 'tools')
3 files changed, 49 insertions, 16 deletions
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java index ea3d5d2..7e13bb1 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java @@ -76,6 +76,8 @@ import java.util.IdentityHashMap; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; /** * Custom implementation of Context/Activity to handle non compiled resources. @@ -502,11 +504,12 @@ public final class BridgeContext extends Activity { return null; } - boolean[] frameworkAttributes = new boolean[1]; - TreeMap<Integer, String> styleNameMap = searchAttrs(attrs, frameworkAttributes); + AtomicBoolean frameworkAttributes = new AtomicBoolean(); + AtomicReference<String> attrName = new AtomicReference<String>(); + TreeMap<Integer, String> styleNameMap = searchAttrs(attrs, frameworkAttributes, attrName); BridgeTypedArray ta = ((BridgeResources) mSystemResources).newTypeArray(attrs.length, - isPlatformFile); + isPlatformFile, frameworkAttributes.get(), attrName.get()); // look for a custom style. String customStyle = null; @@ -597,7 +600,7 @@ public final class BridgeContext extends Activity { } String namespace = BridgeConstants.NS_RESOURCES; - if (frameworkAttributes[0] == false) { + if (frameworkAttributes.get() == false) { // need to use the application namespace namespace = mProjectCallback.getNamespace(); } @@ -674,10 +677,12 @@ public final class BridgeContext extends Activity { */ private BridgeTypedArray createStyleBasedTypedArray(StyleResourceValue style, int[] attrs) throws Resources.NotFoundException { - TreeMap<Integer, String> styleNameMap = searchAttrs(attrs, null); + AtomicBoolean frameworkAttributes = new AtomicBoolean(); + AtomicReference<String> attrName = new AtomicReference<String>(); + TreeMap<Integer, String> styleNameMap = searchAttrs(attrs, frameworkAttributes, attrName); BridgeTypedArray ta = ((BridgeResources) mSystemResources).newTypeArray(attrs.length, - false /* platformResourceFlag */); + style.isFramework(), frameworkAttributes.get(), attrName.get()); // loop through all the values in the style map, and init the TypedArray with // the style we got from the dynamic id @@ -709,10 +714,13 @@ public final class BridgeContext extends Activity { * that is used to reference the attribute later in the TypedArray. * * @param attrs An attribute array reference given to obtainStyledAttributes. + * @param outFrameworkFlag out value indicating if the attr array is a framework value + * @param outAttrName out value for the resolved attr name. * @return A sorted map Attribute-Value to Attribute-Name for all attributes declared by the * attribute array. Returns null if nothing is found. */ - private TreeMap<Integer,String> searchAttrs(int[] attrs, boolean[] outFrameworkFlag) { + private TreeMap<Integer,String> searchAttrs(int[] attrs, AtomicBoolean outFrameworkFlag, + AtomicReference<String> outAttrName) { // get the name of the array from the framework resources String arrayName = Bridge.resolveResourceId(attrs); if (arrayName != null) { @@ -729,7 +737,10 @@ public final class BridgeContext extends Activity { } if (outFrameworkFlag != null) { - outFrameworkFlag[0] = true; + outFrameworkFlag.set(true); + } + if (outAttrName != null) { + outAttrName.set(arrayName); } return attributes; @@ -751,7 +762,10 @@ public final class BridgeContext extends Activity { } if (outFrameworkFlag != null) { - outFrameworkFlag[0] = false; + outFrameworkFlag.set(false); + } + if (outAttrName != null) { + outAttrName.set(arrayName); } return attributes; diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java index 345f053..ca44f6e 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java @@ -125,8 +125,10 @@ public final class BridgeResources extends Resources { mProjectCallback = projectCallback; } - public BridgeTypedArray newTypeArray(int numEntries, boolean platformFile) { - return new BridgeTypedArray(this, mContext, numEntries, platformFile); + public BridgeTypedArray newTypeArray(int numEntries, boolean platformFile, + boolean platformStyleable, String styleableName) { + return new BridgeTypedArray(this, mContext, numEntries, platformFile, + platformStyleable, styleableName); } private ResourceValue getResourceValue(int id, boolean[] platformResFlag_out) { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java index d4600a1..b1fbf08 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java @@ -16,6 +16,7 @@ package com.android.layoutlib.bridge.android; +import com.android.ide.common.rendering.api.DeclareStyleableResourceValue; import com.android.ide.common.rendering.api.LayoutLog; import com.android.ide.common.rendering.api.RenderResources; import com.android.ide.common.rendering.api.ResourceValue; @@ -49,18 +50,23 @@ import java.util.Map; */ public final class BridgeTypedArray extends TypedArray { - private BridgeResources mBridgeResources; - private BridgeContext mContext; + private final BridgeResources mBridgeResources; + private final BridgeContext mContext; + private final boolean mPlatformFile; + private final boolean mPlatformStyleable; + private final String mStyleableName; + private ResourceValue[] mResourceData; private String[] mNames; - private final boolean mPlatformFile; public BridgeTypedArray(BridgeResources resources, BridgeContext context, int len, - boolean platformFile) { + boolean platformFile, boolean platformStyleable, String styleableName) { super(null, null, null, 0); mBridgeResources = resources; mContext = context; mPlatformFile = platformFile; + mPlatformStyleable = platformStyleable; + mStyleableName = styleableName; mResourceData = new ResourceValue[len]; mNames = new String[len]; } @@ -202,7 +208,18 @@ public final class BridgeTypedArray extends TypedArray { // Field is not null and is not an integer. // Check for possible constants and try to find them. // Get the map of attribute-constant -> IntegerValue - Map<String, Integer> map = Bridge.getEnumValues(mNames[index]); + Map<String, Integer> map = null; + if (mPlatformStyleable) { + map = Bridge.getEnumValues(mNames[index]); + } else { + // get the styleable matching the resolved name + RenderResources res = mContext.getRenderResources(); + ResourceValue styleable = res.getProjectResource(ResourceType.DECLARE_STYLEABLE, + mStyleableName); + if (styleable instanceof DeclareStyleableResourceValue) { + map = ((DeclareStyleableResourceValue) styleable).getAttributeValues(mNames[index]); + } + } if (map != null) { // accumulator to store the value of the 1+ constants. |