BridgeXmlPullAttributes.java revision c244feee4f2f1c8e0c466c152ab5a1ab025333d2
1ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski/*
2ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Copyright (C) 2008 The Android Open Source Project
3ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
4ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * you may not use this file except in compliance with the License.
6ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * You may obtain a copy of the License at
7ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
8ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski *
10ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Unless required by applicable law or agreed to in writing, software
11ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * See the License for the specific language governing permissions and
14ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * limitations under the License.
15ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski */
16ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
17ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskipackage android.util;
18ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
19ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.ide.common.rendering.api.RenderResources;
20ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.ide.common.rendering.api.ResourceValue;
21ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.internal.util.XmlUtils;
22ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.layoutlib.bridge.Bridge;
23ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.layoutlib.bridge.BridgeConstants;
24ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.layoutlib.bridge.android.BridgeContext;
25c244feee4f2f1c8e0c466c152ab5a1ab025333d2Deepanshu Guptaimport com.android.layoutlib.bridge.impl.ResourceHelper;
26ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.resources.ResourceType;
27ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
28ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport org.xmlpull.v1.XmlPullParser;
29ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
30ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski/**
31ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser
32ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski */
33ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskipublic class BridgeXmlPullAttributes extends XmlPullAttributes {
34ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
35ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    private final BridgeContext mContext;
36ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    private final boolean mPlatformFile;
37ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
38ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context,
39ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            boolean platformFile) {
40ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        super(parser);
41ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        mContext = context;
42ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        mPlatformFile = platformFile;
43ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
44ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
45ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    /*
46ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * (non-Javadoc)
47ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * @see android.util.XmlPullAttributes#getAttributeNameResource(int)
48ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     *
49ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * This methods must return com.android.internal.R.attr.<name> matching
50ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * the name of the attribute.
51ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * It returns 0 if it doesn't find anything.
52ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     */
53ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
54ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeNameResource(int index) {
55ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        // get the attribute name.
56ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String name = getAttributeName(index);
57ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
58ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        // get the attribute namespace
59ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String ns = mParser.getAttributeNamespace(index);
60ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
61ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (BridgeConstants.NS_RESOURCES.equals(ns)) {
62ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            Integer v = Bridge.getResourceId(ResourceType.ATTR, name);
63ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (v != null) {
64ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                return v.intValue();
65ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
66ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
67ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return 0;
68ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
69ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
70ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        // this is not an attribute in the android namespace, we query the customviewloader, if
71ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        // the namespaces match.
72ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (mContext.getProjectCallback().getNamespace().equals(ns)) {
73ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name);
74ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (v != null) {
75ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                return v.intValue();
76ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
77ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
78ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
79ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return 0;
80ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
81ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
82ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
83ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeListValue(String namespace, String attribute,
84ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            String[] options, int defaultValue) {
85ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(namespace, attribute);
86ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
87ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
88ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
89ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
90ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
91ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
92ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
93ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToList(value, options, defaultValue);
94ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
95ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
96ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
97ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
98ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
99ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
100ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public boolean getAttributeBooleanValue(String namespace, String attribute,
101ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            boolean defaultValue) {
102ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(namespace, attribute);
103ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
104ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
105ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
106ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
107ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
108ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
109ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
110ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToBoolean(value, defaultValue);
111ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
112ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
113ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
114ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
115ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
116ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
117ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) {
118ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(namespace, attribute);
119ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
120ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return resolveResourceValue(value, defaultValue);
121ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
122ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
123ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
124ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeIntValue(String namespace, String attribute,
125ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            int defaultValue) {
126ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(namespace, attribute);
127ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
128ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
129ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
130ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
131ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
132ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
133ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
134ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToInt(value, defaultValue);
135ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
136ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
137ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
138ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
139ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
140ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
141ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeUnsignedIntValue(String namespace, String attribute,
142ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            int defaultValue) {
143ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(namespace, attribute);
144ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
145ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
146ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
147ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
148ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
149ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
150ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
151ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToUnsignedInt(value, defaultValue);
152ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
153ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
154ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
155ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
156ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
157ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
158ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public float getAttributeFloatValue(String namespace, String attribute,
159ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            float defaultValue) {
160ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String s = getAttributeValue(namespace, attribute);
161ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (s != null) {
162ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(s);
163ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
164ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
165ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                s = r.getValue();
166ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
167ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
168ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return Float.parseFloat(s);
169ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
170ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
171ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
172ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
173ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
174ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
175ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeListValue(int index,
176ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            String[] options, int defaultValue) {
177ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return XmlUtils.convertValueToList(
178ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            getAttributeValue(index), options, defaultValue);
179ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
180ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
181ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
182ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public boolean getAttributeBooleanValue(int index, boolean defaultValue) {
183ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(index);
184ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
185ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
186ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
187ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
188ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
189ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
190ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
191ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToBoolean(value, defaultValue);
192ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
193ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
194ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
195ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
196ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
197ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
198ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeResourceValue(int index, int defaultValue) {
199ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(index);
200ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
201ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return resolveResourceValue(value, defaultValue);
202ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
203ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
204ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
205ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeIntValue(int index, int defaultValue) {
206ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(index);
207ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
208ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
209ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
210ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
211ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
212ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
213ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
214c244feee4f2f1c8e0c466c152ab5a1ab025333d2Deepanshu Gupta            if (value.charAt(0) == '#') {
215c244feee4f2f1c8e0c466c152ab5a1ab025333d2Deepanshu Gupta                return ResourceHelper.getColor(value);
216c244feee4f2f1c8e0c466c152ab5a1ab025333d2Deepanshu Gupta            }
217ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToInt(value, defaultValue);
218ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
219ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
220ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
221ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
222ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
223ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
224ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public int getAttributeUnsignedIntValue(int index, int defaultValue) {
225ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String value = getAttributeValue(index);
226ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (value != null) {
227ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(value);
228ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
229ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
230ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                value = r.getValue();
231ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
232ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
233ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return XmlUtils.convertValueToUnsignedInt(value, defaultValue);
234ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
235ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
236ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
237ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
238ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
239ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    @Override
240ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    public float getAttributeFloatValue(int index, float defaultValue) {
241ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        String s = getAttributeValue(index);
242ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (s != null) {
243ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            ResourceValue r = getResourceValue(s);
244ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
245ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (r != null) {
246ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                s = r.getValue();
247ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
248ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
249ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            return Float.parseFloat(s);
250ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
251ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
252ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
253ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
254ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
255ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    // -- private helper methods
256ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
257ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    /**
258ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * Returns a resolved {@link ResourceValue} from a given value.
259ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     */
260ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    private ResourceValue getResourceValue(String value) {
261ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        // now look for this particular value
262ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        RenderResources resources = mContext.getRenderResources();
263ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return resources.resolveResValue(resources.findResValue(value, mPlatformFile));
264ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
265ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
266ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    /**
267ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     * Resolves and return a value to its associated integer.
268ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski     */
269ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    private int resolveResourceValue(String value, int defaultValue) {
270ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        ResourceValue resource = getResourceValue(value);
271ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        if (resource != null) {
272ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            Integer id = null;
273ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (mPlatformFile || resource.isFramework()) {
274ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                id = Bridge.getResourceId(resource.getResourceType(), resource.getName());
275ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            } else {
276ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                id = mContext.getProjectCallback().getResourceId(
277ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                        resource.getResourceType(), resource.getName());
278ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
279ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
280ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            if (id != null) {
281ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski                return id;
282ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski            }
283ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        }
284ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski
285ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski        return defaultValue;
286ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski    }
287ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski}
288