Reimplement TypedArray.getLayoutDimension(int, int) for the layout bridge.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user