Reimplement TypedArray.getLayoutDimension(int, int) for the layout bridge.

This commit is contained in:
Xavier Ducrohet
2009-07-22 15:44:52 -07:00
parent 98a44df4b4
commit eba337ad09

View File

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