diff options
author | Xavier Ducrohet <xav@android.com> | 2009-07-22 15:44:52 -0700 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2009-07-22 15:44:52 -0700 |
commit | eba337ad09ba93b31f4e9ec8f99be3ae2811bf89 (patch) | |
tree | 4901a790301de9d194aeeb55dc79e435fe375e04 /tools | |
parent | 98a44df4b4cc8cd28276ad888a7e17f81353ae44 (diff) | |
download | frameworks_base-eba337ad09ba93b31f4e9ec8f99be3ae2811bf89.zip frameworks_base-eba337ad09ba93b31f4e9ec8f99be3ae2811bf89.tar.gz frameworks_base-eba337ad09ba93b31f4e9ec8f99be3ae2811bf89.tar.bz2 |
Reimplement TypedArray.getLayoutDimension(int, int) for the layout bridge.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeTypedArray.java | 223 |
1 files changed, 114 insertions, 109 deletions
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeTypedArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeTypedArray.java index 48998db..10421de 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeTypedArray.java @@ -39,7 +39,7 @@ import java.util.Map; * TODO: describe. */ public final class BridgeTypedArray extends TypedArray { - + @SuppressWarnings("hiding") private BridgeResources mResources; private BridgeContext mContext; @@ -47,7 +47,7 @@ public final class BridgeTypedArray extends TypedArray { private IResourceValue[] mData; private String[] mNames; private final boolean mPlatformFile; - + public BridgeTypedArray(BridgeResources resources, BridgeContext context, int len, boolean platformFile) { super(null, null, null, 0); @@ -58,12 +58,12 @@ public final class BridgeTypedArray extends TypedArray { mNames = new String[len]; } - /** A bridge-specific method that sets a value in the type array */ + /** A bridge-specific method that sets a value in the type array */ public void bridgeSetValue(int index, String name, IResourceValue value) { mData[index] = value; mNames[index] = name; } - + /** * Seals the array after all calls to {@link #bridgeSetValue(int, String, IResourceValue)} have * been done. @@ -79,11 +79,11 @@ public final class BridgeTypedArray extends TypedArray { count++; } } - + // allocate the table with an extra to store the size mIndices = new int[count+1]; mIndices[0] = count; - + // fill the array with the indices. int index = 1; for (int i = 0 ; i < mData.length ; i++) { @@ -100,7 +100,7 @@ public final class BridgeTypedArray extends TypedArray { public int length() { return mData.length; } - + /** * Return the Resources object this array was loaded from. */ @@ -108,13 +108,13 @@ public final class BridgeTypedArray extends TypedArray { public Resources getResources() { return mResources; } - + /** * Retrieve the styled string value for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. - * - * @return CharSequence holding string data. May be styled. Returns + * + * @return CharSequence holding string data. May be styled. Returns * null if the attribute is not defined. */ @Override @@ -129,9 +129,9 @@ public final class BridgeTypedArray extends TypedArray { /** * Retrieve the string value for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. - * + * * @return String holding string data. Any styling information is * removed. Returns null if the attribute is not defined. */ @@ -140,16 +140,16 @@ public final class BridgeTypedArray extends TypedArray { if (mData[index] != null) { return mData[index].getValue(); } - + return null; } /** * Retrieve the boolean value for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined. - * + * * @return Attribute boolean value, or defValue if not defined. */ @Override @@ -162,16 +162,16 @@ public final class BridgeTypedArray extends TypedArray { if (s != null) { return XmlUtils.convertValueToBoolean(s, defValue); } - + return defValue; } /** * Retrieve the integer value for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined. - * + * * @return Attribute int value, or defValue if not defined. */ @Override @@ -181,7 +181,7 @@ public final class BridgeTypedArray extends TypedArray { } String s = mData[index].getValue(); - + try { return (s == null) ? defValue : XmlUtils.convertValueToInt(s, defValue); } catch (NumberFormatException e) { @@ -192,11 +192,11 @@ public final class BridgeTypedArray extends TypedArray { // Check for possible constants and try to find them. // Get the map of attribute-constant -> IntegerValue Map<String, Integer> map = Bridge.getEnumValues(mNames[index]); - + if (map != null) { // accumulator to store the value of the 1+ constants. int result = 0; - + // split the value in case this is a mix of several flags. String[] keywords = s.split("\\|"); for (String keyword : keywords) { @@ -217,9 +217,9 @@ public final class BridgeTypedArray extends TypedArray { /** * Retrieve the float value for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. - * + * * @return Attribute float value, or defValue if not defined.. */ @Override @@ -237,23 +237,23 @@ public final class BridgeTypedArray extends TypedArray { mContext.getLogger().warning(String.format( "Unable to convert \"%s\" into a float in attribute \"%2$s\"", s, mNames[index])); - + // we'll return the default value below. } } return defValue; } - + /** * Retrieve the color value for the attribute at <var>index</var>. If * the attribute references a color resource holding a complex * {@link android.content.res.ColorStateList}, then the default color from * the set is returned. - * + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined or * not a resource. - * + * * @return Attribute color value, or defValue if not defined. */ @Override @@ -261,7 +261,7 @@ public final class BridgeTypedArray extends TypedArray { if (mData[index] == null) { return defValue; } - + String s = mData[index].getValue(); try { return ResourceHelper.getColor(s); @@ -280,9 +280,9 @@ public final class BridgeTypedArray extends TypedArray { * Retrieve the ColorStateList for the attribute at <var>index</var>. * The value may be either a single solid color or a reference to * a color or complex {@link android.content.res.ColorStateList} description. - * + * * @param index Index of attribute to retrieve. - * + * * @return ColorStateList for the attribute, or null if not defined. */ @Override @@ -296,14 +296,14 @@ public final class BridgeTypedArray extends TypedArray { if (value == null) { return null; } - + try { int color = ResourceHelper.getColor(value); return ColorStateList.valueOf(color); } catch (NumberFormatException e) { // if it's not a color value, we'll attempt to read the xml based color below. } - + // let the framework inflate the ColorStateList from the XML file. try { File f = new File(value); @@ -311,7 +311,7 @@ public final class BridgeTypedArray extends TypedArray { KXmlParser parser = new KXmlParser(); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); - + ColorStateList colorStateList = ColorStateList.createFromXml( mContext.getResources(), // FIXME: we need to know if this resource is platform or not @@ -325,22 +325,22 @@ public final class BridgeTypedArray extends TypedArray { // return null below. } - + // looks like were unable to resolve the color value. mContext.getLogger().warning(String.format( "Unable to resolve color value \"%1$s\" in attribute \"%2$s\"", value, mNames[index])); - + return null; } - + /** * Retrieve the integer value for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined or * not a resource. - * + * * @return Attribute integer value, or defValue if not defined. */ @Override @@ -362,23 +362,23 @@ public final class BridgeTypedArray extends TypedArray { // The default value is returned below. } } - + return defValue; } /** - * Retrieve a dimensional unit attribute at <var>index</var>. Unit - * conversions are based on the current {@link DisplayMetrics} - * associated with the resources this {@link TypedArray} object - * came from. - * + * Retrieve a dimensional unit attribute at <var>index</var>. Unit + * conversions are based on the current {@link DisplayMetrics} + * associated with the resources this {@link TypedArray} object + * came from. + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined or * not a resource. - * - * @return Attribute dimension value multiplied by the appropriate + * + * @return Attribute dimension value multiplied by the appropriate * metric, or defValue if not defined. - * + * * @see #getDimensionPixelOffset * @see #getDimensionPixelSize */ @@ -397,11 +397,11 @@ public final class BridgeTypedArray extends TypedArray { } else if (s.equals(BridgeConstants.WRAP_CONTENT)) { return LayoutParams.WRAP_CONTENT; } - + if (ResourceHelper.stringToFloat(s, mValue)) { return mValue.getDimension(mResources.mMetrics); } - + // looks like we were unable to resolve the dimension value mContext.getLogger().warning(String.format( "Unable to resolve dimension value \"%1$s\" in attribute \"%2$s\"", @@ -416,14 +416,14 @@ public final class BridgeTypedArray extends TypedArray { * {@link #getDimension}, except the returned value is converted to * integer pixels for you. An offset conversion involves simply * truncating the base value to an integer. - * + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined or * not a resource. - * - * @return Attribute dimension value multiplied by the appropriate + * + * @return Attribute dimension value multiplied by the appropriate * metric and truncated to integer pixels, or defValue if not defined. - * + * * @see #getDimension * @see #getDimensionPixelSize */ @@ -439,14 +439,14 @@ public final class BridgeTypedArray extends TypedArray { * integer pixels for use as a size. A size conversion involves * rounding the base value, and ensuring that a non-zero base value * is at least one pixel in size. - * + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined or * not a resource. - * - * @return Attribute dimension value multiplied by the appropriate + * + * @return Attribute dimension value multiplied by the appropriate * metric and truncated to integer pixels, or defValue if not defined. - * + * * @see #getDimension * @see #getDimensionPixelOffset */ @@ -465,7 +465,7 @@ public final class BridgeTypedArray extends TypedArray { } else if (s.equals(BridgeConstants.WRAP_CONTENT)) { return LayoutParams.WRAP_CONTENT; } - + // FIXME huh? float f = getDimension(index, defValue); @@ -483,11 +483,11 @@ public final class BridgeTypedArray extends TypedArray { * {@link android.view.ViewGroup}'s layout_width and layout_height * attributes. This is only here for performance reasons; applications * should use {@link #getDimensionPixelSize}. - * + * * @param index Index of the attribute to retrieve. * @param name Textual name of attribute for error reporting. - * - * @return Attribute dimension value multiplied by the appropriate + * + * @return Attribute dimension value multiplied by the appropriate * metric and truncated to integer pixels. */ @Override @@ -495,20 +495,25 @@ public final class BridgeTypedArray extends TypedArray { return getDimensionPixelSize(index, 0); } + @Override + public int getLayoutDimension(int index, int defValue) { + return getDimensionPixelSize(index, defValue); + } + /** * Retrieve a fractional unit attribute at <var>index</var>. - * - * @param index Index of attribute to retrieve. - * @param base The base value of this fraction. In other words, a + * + * @param index Index of attribute to retrieve. + * @param base The base value of this fraction. In other words, a * standard fraction is multiplied by this value. - * @param pbase The parent base value of this fraction. In other + * @param pbase The parent base value of this fraction. In other * words, a parent fraction (nn%p) is multiplied by this * value. * @param defValue Value to return if the attribute is not defined or * not a resource. - * - * @return Attribute fractional value multiplied by the appropriate - * base value, or defValue if not defined. + * + * @return Attribute fractional value multiplied by the appropriate + * base value, or defValue if not defined. */ @Override public float getFraction(int index, int base, int pbase, float defValue) { @@ -520,7 +525,7 @@ public final class BridgeTypedArray extends TypedArray { if (value == null) { return defValue; } - + if (ResourceHelper.stringToFloat(value, mValue)) { return mValue.getFraction(base, pbase); } @@ -529,29 +534,29 @@ public final class BridgeTypedArray extends TypedArray { mContext.getLogger().warning(String.format( "Unable to resolve fraction value \"%1$s\" in attribute \"%2$s\"", value, mNames[index])); - + return defValue; } /** * Retrieve the resource identifier for the attribute at - * <var>index</var>. Note that attribute resource as resolved when - * the overall {@link TypedArray} object is retrieved. As a - * result, this function will return the resource identifier of the - * final resource value that was found, <em>not</em> necessarily the - * original resource that was specified by the attribute. - * + * <var>index</var>. Note that attribute resource as resolved when + * the overall {@link TypedArray} object is retrieved. As a + * result, this function will return the resource identifier of the + * final resource value that was found, <em>not</em> necessarily the + * original resource that was specified by the attribute. + * * @param index Index of attribute to retrieve. * @param defValue Value to return if the attribute is not defined or * not a resource. - * + * * @return Attribute resource identifier, or defValue if not defined. */ @Override public int getResourceId(int index, int defValue) { // get the IResource for this index IResourceValue resValue = mData[index]; - + // no data, return the default value. if (resValue == null) { return defValue; @@ -562,7 +567,7 @@ public final class BridgeTypedArray extends TypedArray { // get the id that will represent this style. return mContext.getDynamicIdByStyle((IStyleResourceValue)resValue); } - + // if the attribute was a reference to an id, and not a declaration of an id (@+id), then // the xml attribute value was "resolved" which leads us to a IResourceValue with // getType() returning "id" and getName() returning the id name @@ -583,7 +588,7 @@ public final class BridgeTypedArray extends TypedArray { if (value == null) { return defValue; } - + // if the value is just an integer, return it. try { int i = Integer.parseInt(value); @@ -601,14 +606,14 @@ public final class BridgeTypedArray extends TypedArray { // fact in the android.R and com.android.internal.R classes. // The field mPlatformFile will indicate that all IDs are to be looked up in the android R // classes exclusively. - + // if this is a reference to an id, find it. if (value.startsWith("@id/") || value.startsWith("@+") || value.startsWith("@android:id/")) { - + int pos = value.indexOf('/'); String idName = value.substring(pos + 1); - + // if this is a framework id if (mPlatformFile || value.startsWith("@android") || value.startsWith("@+android")) { // look for idName in the android R classes @@ -621,7 +626,7 @@ public final class BridgeTypedArray extends TypedArray { // not a direct id valid reference? resolve it Integer idValue = null; - + if (resValue.isFramework()) { idValue = Bridge.getResourceValue(resValue.getType(), resValue.getName()); } else { @@ -632,7 +637,7 @@ public final class BridgeTypedArray extends TypedArray { if (idValue != null) { return idValue.intValue(); } - + mContext.getLogger().warning(String.format( "Unable to resolve id \"%1$s\" for attribute \"%2$s\"", value, mNames[index])); return defValue; @@ -643,9 +648,9 @@ public final class BridgeTypedArray extends TypedArray { * gets the resource ID of the selected attribute, and uses * {@link Resources#getDrawable Resources.getDrawable} of the owning * Resources object to retrieve its Drawable. - * + * * @param index Index of attribute to retrieve. - * + * * @return Drawable for the attribute, or null if not defined. */ @Override @@ -658,13 +663,13 @@ public final class BridgeTypedArray extends TypedArray { if (value == null || BridgeConstants.REFERENCE_NULL.equals(value)) { return null; } - + Drawable d = ResourceHelper.getDrawable(value, mContext, mData[index].isFramework()); - + if (d != null) { return d; } - + // looks like we were unable to resolve the drawable mContext.getLogger().warning(String.format( "Unable to resolve drawable \"%1$s\" in attribute \"%2$s\"", value, mNames[index])); @@ -678,9 +683,9 @@ public final class BridgeTypedArray extends TypedArray { * This gets the resource ID of the selected attribute, and uses * {@link Resources#getTextArray Resources.getTextArray} of the owning * Resources object to retrieve its String[]. - * + * * @param index Index of attribute to retrieve. - * + * * @return CharSequence[] for the attribute, or null if not defined. */ @Override @@ -693,7 +698,7 @@ public final class BridgeTypedArray extends TypedArray { if (value != null) { return new CharSequence[] { value }; } - + mContext.getLogger().warning(String.format( String.format("Unknown value for getTextArray(%d) => %s", //DEBUG index, mData[index].getName()))); @@ -703,44 +708,44 @@ public final class BridgeTypedArray extends TypedArray { /** * Retrieve the raw TypedValue for the attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. * @param outValue TypedValue object in which to place the attribute's * data. - * - * @return Returns true if the value was retrieved, else false. + * + * @return Returns true if the value was retrieved, else false. */ @Override public boolean getValue(int index, TypedValue outValue) { if (mData[index] == null) { return false; } - + String s = mData[index].getValue(); - + return ResourceHelper.stringToFloat(s, outValue); } /** * Determines whether there is an attribute at <var>index</var>. - * + * * @param index Index of attribute to retrieve. - * + * * @return True if the attribute has a value, false otherwise. */ @Override public boolean hasValue(int index) { return mData[index] != null; } - + /** - * Retrieve the raw TypedValue for the attribute at <var>index</var> - * and return a temporary object holding its data. This object is only - * valid until the next call on to {@link TypedArray}. - * + * Retrieve the raw TypedValue for the attribute at <var>index</var> + * and return a temporary object holding its data. This object is only + * valid until the next call on to {@link TypedArray}. + * * @param index Index of attribute to retrieve. - * - * @return Returns a TypedValue object if the attribute is defined, + * + * @return Returns a TypedValue object if the attribute is defined, * containing its data; otherwise returns null. (You will not * receive a TypedValue whose type is TYPE_NULL.) */ @@ -749,7 +754,7 @@ public final class BridgeTypedArray extends TypedArray { if (getValue(index, mValue)) { return mValue; } - + return null; } |