19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
177f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohetpackage android.util;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1970552fb92dbc5cb5b1d53b20f92f2a64969a50c4Xavier Ducrohetimport com.android.ide.common.rendering.api.RenderResources;
2019a021038f2f4683dddef651543d7298f5bd7218Xavier Ducrohetimport com.android.ide.common.rendering.api.ResourceValue;
21c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohetimport com.android.internal.util.XmlUtils;
22c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.Bridge;
23c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.BridgeConstants;
247f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohetimport com.android.layoutlib.bridge.android.BridgeContext;
2535ea7cd4c0c89122fda0b57af20061645082ffb9Xavier Ducrohetimport com.android.resources.ResourceType;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class BridgeXmlPullAttributes extends XmlPullAttributes {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final BridgeContext mContext;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final boolean mPlatformFile;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context,
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            boolean platformFile) {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(parser);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPlatformFile = platformFile;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (non-Javadoc)
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.util.XmlPullAttributes#getAttributeNameResource(int)
47c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet     *
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This methods must return com.android.internal.R.attr.<name> matching
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the name of the attribute.
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * It returns 0 if it doesn't find anything.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeNameResource(int index) {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // get the attribute name.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String name = getAttributeName(index);
56c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // get the attribute namespace
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String ns = mParser.getAttributeNamespace(index);
59c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (BridgeConstants.NS_RESOURCES.equals(ns)) {
61b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet            Integer v = Bridge.getResourceId(ResourceType.ATTR, name);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (v != null) {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return v.intValue();
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
65c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
68c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // this is not an attribute in the android namespace, we query the customviewloader, if
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // the namespaces match.
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mContext.getProjectCallback().getNamespace().equals(ns)) {
72b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet            Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (v != null) {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return v.intValue();
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
80c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
82c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeListValue(String namespace, String attribute,
83c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            String[] options, int defaultValue) {
84c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(namespace, attribute);
85c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
86c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
87c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
88c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
89c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
90c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
91c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
92c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToList(value, options, defaultValue);
93c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
94c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
95c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
96c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
97c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
98c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
99c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public boolean getAttributeBooleanValue(String namespace, String attribute,
100c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            boolean defaultValue) {
101c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(namespace, attribute);
102c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
103c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
104c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
105c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
106c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
107c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
108c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
109c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToBoolean(value, defaultValue);
110c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
111c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
112c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) {
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String value = getAttributeValue(namespace, attribute);
118c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return resolveResourceValue(value, defaultValue);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
122c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
123c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeIntValue(String namespace, String attribute,
124c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            int defaultValue) {
125c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(namespace, attribute);
126c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
127c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
128c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
129c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
130c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
131c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
132c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
133c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToInt(value, defaultValue);
134c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
135c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
136c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
137c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
138c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
139c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
140c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeUnsignedIntValue(String namespace, String attribute,
141c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            int defaultValue) {
142c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(namespace, attribute);
143c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
144c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
145c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
146c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
147c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
148c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
149c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
150c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToUnsignedInt(value, defaultValue);
151c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
152c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
153c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
154c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
155c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
156c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
157c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public float getAttributeFloatValue(String namespace, String attribute,
158c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            float defaultValue) {
159c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String s = getAttributeValue(namespace, attribute);
160c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (s != null) {
161c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(s);
162c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
163c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
164c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                s = r.getValue();
165c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
166c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
167c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return Float.parseFloat(s);
168c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
169c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
170c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
171c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
172c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
173c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
174c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeListValue(int index,
175c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            String[] options, int defaultValue) {
176c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return XmlUtils.convertValueToList(
177c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            getAttributeValue(index), options, defaultValue);
178c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
179c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
180c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
181c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public boolean getAttributeBooleanValue(int index, boolean defaultValue) {
182c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(index);
183c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
184c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
185c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
186c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
187c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
188c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
189c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
190c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToBoolean(value, defaultValue);
191c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
192c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
193c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
194c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
195c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
196c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
197c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeResourceValue(int index, int defaultValue) {
198c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(index);
199c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
200c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return resolveResourceValue(value, defaultValue);
201c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
202c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
203c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
204c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeIntValue(int index, int defaultValue) {
205c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(index);
206c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
207c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
208c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
209c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
210c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
211c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
212c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
213c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToInt(value, defaultValue);
214c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
215c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
216c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
217c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
218c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
219c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
220c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public int getAttributeUnsignedIntValue(int index, int defaultValue) {
221c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String value = getAttributeValue(index);
222c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (value != null) {
223c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(value);
224c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
225c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
226c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                value = r.getValue();
227c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
228c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
229c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return XmlUtils.convertValueToUnsignedInt(value, defaultValue);
230c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
231c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
232c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
233c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
234c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
235c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    @Override
236c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    public float getAttributeFloatValue(int index, float defaultValue) {
237c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        String s = getAttributeValue(index);
238c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        if (s != null) {
239c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            ResourceValue r = getResourceValue(s);
240c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
241c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            if (r != null) {
242c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet                s = r.getValue();
243c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            }
244c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
245c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet            return Float.parseFloat(s);
246c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        }
247c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
248c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return defaultValue;
249c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
250c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
251c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    // -- private helper methods
252c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet
253c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    /**
254c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet     * Returns a resolved {@link ResourceValue} from a given value.
255c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet     */
256c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    private ResourceValue getResourceValue(String value) {
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // now look for this particular value
25870552fb92dbc5cb5b1d53b20f92f2a64969a50c4Xavier Ducrohet        RenderResources resources = mContext.getRenderResources();
259c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        return resources.resolveResValue(resources.findResValue(value, mPlatformFile));
260c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    }
261c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
262c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    /**
263c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet     * Resolves and return a value to its associated integer.
264c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet     */
265c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet    private int resolveResourceValue(String value, int defaultValue) {
266c3f979f6fecb8b46e9315fddb2a1f344bf1f1447Xavier Ducrohet        ResourceValue resource = getResourceValue(value);
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (resource != null) {
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Integer id = null;
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mPlatformFile || resource.isFramework()) {
270b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet                id = Bridge.getResourceId(resource.getResourceType(), resource.getName());
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
272b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet                id = mContext.getProjectCallback().getResourceId(
27335ea7cd4c0c89122fda0b57af20061645082ffb9Xavier Ducrohet                        resource.getResourceType(), resource.getName());
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (id != null) {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return id;
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
280c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return defaultValue;
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
284