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; 21c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.Bridge; 22c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.BridgeConstants; 237f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohetimport com.android.layoutlib.bridge.android.BridgeContext; 2435ea7cd4c0c89122fda0b57af20061645082ffb9Xavier Ducrohetimport com.android.resources.ResourceType; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.XmlPullAttributes; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class BridgeXmlPullAttributes extends XmlPullAttributes { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final BridgeContext mContext; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final boolean mPlatformFile; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context, 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean platformFile) { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(parser); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPlatformFile = platformFile; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (non-Javadoc) 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.util.XmlPullAttributes#getAttributeNameResource(int) 49c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet * 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This methods must return com.android.internal.R.attr.<name> matching 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the name of the attribute. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It returns 0 if it doesn't find anything. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getAttributeNameResource(int index) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get the attribute name. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String name = getAttributeName(index); 58c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get the attribute namespace 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ns = mParser.getAttributeNamespace(index); 61c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (BridgeConstants.NS_RESOURCES.equals(ns)) { 63b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet Integer v = Bridge.getResourceId(ResourceType.ATTR, name); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (v != null) { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return v.intValue(); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 67c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 70c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this is not an attribute in the android namespace, we query the customviewloader, if 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the namespaces match. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mContext.getProjectCallback().getNamespace().equals(ns)) { 74b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (v != null) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return v.intValue(); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 82c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (non-Javadoc) 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.util.XmlPullAttributes#getAttributeResourceValue(int, int) 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getAttributeResourceValue(int index, int defaultValue) { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String value = getAttributeValue(index); 90c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return resolveResourceValue(value, defaultValue); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (non-Javadoc) 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.util.XmlPullAttributes#getAttributeResourceValue(java.lang.String, java.lang.String, int) 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String value = getAttributeValue(namespace, attribute); 101c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return resolveResourceValue(value, defaultValue); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int resolveResourceValue(String value, int defaultValue) { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now look for this particular value 10770552fb92dbc5cb5b1d53b20f92f2a64969a50c4Xavier Ducrohet RenderResources resources = mContext.getRenderResources(); 10870552fb92dbc5cb5b1d53b20f92f2a64969a50c4Xavier Ducrohet ResourceValue resource = resources.resolveResValue( 10970552fb92dbc5cb5b1d53b20f92f2a64969a50c4Xavier Ducrohet resources.findResValue(value, mPlatformFile)); 110c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (resource != null) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer id = null; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPlatformFile || resource.isFramework()) { 114b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet id = Bridge.getResourceId(resource.getResourceType(), resource.getName()); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 116b353495192ba1acce94b8ab8aeeffe3c9a3bcfacXavier Ducrohet id = mContext.getProjectCallback().getResourceId( 11735ea7cd4c0c89122fda0b57af20061645082ffb9Xavier Ducrohet resource.getResourceType(), resource.getName()); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (id != null) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return id; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 124c2e28dd74813799aad132673ff9d302657dd04edXavier Ducrohet 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return defaultValue; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 129