1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2008 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage android.util;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.RenderResources;
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ResourceValue;
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.internal.util.XmlUtils;
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.Bridge;
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.BridgeConstants;
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.android.BridgeContext;
2599d90a621084ec0f799dc7840cc05565a0589031Deepanshu Guptaimport com.android.layoutlib.bridge.impl.ResourceHelper;
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.resources.ResourceType;
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParser;
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/**
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic class BridgeXmlPullAttributes extends XmlPullAttributes {
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private final BridgeContext mContext;
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private final boolean mPlatformFile;
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context,
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            boolean platformFile) {
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        super(parser);
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mContext = context;
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mPlatformFile = platformFile;
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * (non-Javadoc)
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * @see android.util.XmlPullAttributes#getAttributeNameResource(int)
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     *
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * This methods must return com.android.internal.R.attr.<name> matching
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * the name of the attribute.
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * It returns 0 if it doesn't find anything.
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeNameResource(int index) {
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // get the attribute name.
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String name = getAttributeName(index);
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // get the attribute namespace
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String ns = mParser.getAttributeNamespace(index);
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (BridgeConstants.NS_RESOURCES.equals(ns)) {
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            Integer v = Bridge.getResourceId(ResourceType.ATTR, name);
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (v != null) {
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                return v.intValue();
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return 0;
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // this is not an attribute in the android namespace, we query the customviewloader, if
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // the namespaces match.
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (mContext.getProjectCallback().getNamespace().equals(ns)) {
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name);
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (v != null) {
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                return v.intValue();
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return 0;
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeListValue(String namespace, String attribute,
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            String[] options, int defaultValue) {
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(namespace, attribute);
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToList(value, options, defaultValue);
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public boolean getAttributeBooleanValue(String namespace, String attribute,
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            boolean defaultValue) {
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(namespace, attribute);
103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToBoolean(value, defaultValue);
111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) {
118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(namespace, attribute);
119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return resolveResourceValue(value, defaultValue);
121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeIntValue(String namespace, String attribute,
125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            int defaultValue) {
126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(namespace, attribute);
127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToInt(value, defaultValue);
135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeUnsignedIntValue(String namespace, String attribute,
142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            int defaultValue) {
143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(namespace, attribute);
144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToUnsignedInt(value, defaultValue);
152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public float getAttributeFloatValue(String namespace, String attribute,
159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            float defaultValue) {
160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String s = getAttributeValue(namespace, attribute);
161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (s != null) {
162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(s);
163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                s = r.getValue();
166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return Float.parseFloat(s);
169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeListValue(int index,
176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            String[] options, int defaultValue) {
177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return XmlUtils.convertValueToList(
178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            getAttributeValue(index), options, defaultValue);
179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public boolean getAttributeBooleanValue(int index, boolean defaultValue) {
183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(index);
184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToBoolean(value, defaultValue);
192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeResourceValue(int index, int defaultValue) {
199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(index);
200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return resolveResourceValue(value, defaultValue);
202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeIntValue(int index, int defaultValue) {
206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(index);
207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
21499d90a621084ec0f799dc7840cc05565a0589031Deepanshu Gupta            if (value.charAt(0) == '#') {
21599d90a621084ec0f799dc7840cc05565a0589031Deepanshu Gupta                return ResourceHelper.getColor(value);
21699d90a621084ec0f799dc7840cc05565a0589031Deepanshu Gupta            }
217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToInt(value, defaultValue);
218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public int getAttributeUnsignedIntValue(int index, int defaultValue) {
225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String value = getAttributeValue(index);
226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (value != null) {
227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(value);
228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                value = r.getValue();
231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return XmlUtils.convertValueToUnsignedInt(value, defaultValue);
234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public float getAttributeFloatValue(int index, float defaultValue) {
241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String s = getAttributeValue(index);
242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (s != null) {
243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            ResourceValue r = getResourceValue(s);
244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (r != null) {
246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                s = r.getValue();
247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return Float.parseFloat(s);
250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    // -- private helper methods
256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Returns a resolved {@link ResourceValue} from a given value.
259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private ResourceValue getResourceValue(String value) {
261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // now look for this particular value
262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        RenderResources resources = mContext.getRenderResources();
263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return resources.resolveResValue(resources.findResValue(value, mPlatformFile));
264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /**
267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     * Resolves and return a value to its associated integer.
268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski     */
269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private int resolveResourceValue(String value, int defaultValue) {
270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        ResourceValue resource = getResourceValue(value);
271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (resource != null) {
272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            Integer id = null;
273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (mPlatformFile || resource.isFramework()) {
274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                id = Bridge.getResourceId(resource.getResourceType(), resource.getName());
275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            } else {
276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                id = mContext.getProjectCallback().getResourceId(
277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                        resource.getResourceType(), resource.getName());
278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (id != null) {
281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                return id;
282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return defaultValue;
286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
288