19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Copyright 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Build resource files from raw assets. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef RESOURCE_TABLE_H 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define RESOURCE_TABLE_H 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "StringPool.h" 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SourcePos.h" 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <set> 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <map> 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace std; 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackbornclass XMLNode; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ResourceTable; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STRIP_COMMENTS = 1<<0, 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_ASSIGN_ATTRIBUTE_IDS = 1<<1, 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_COMPACT_WHITESPACE = 1<<2, 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STRIP_WHITESPACE = 1<<3, 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STRIP_RAW_VALUES = 1<<4, 2719138468caf7050d482dc15f35a344eab11bb756Kenny Root XML_COMPILE_UTF8 = 1<<5, 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STANDARD_RESOURCE = 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t compileXmlFile(const sp<AaptAssets>& assets, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& target, 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceTable* table, 37cf244ada58539ce857ec041d7288d0271204fbb6Dianne Hackborn int options = XML_COMPILE_STANDARD_RESOURCE); 38cf244ada58539ce857ec041d7288d0271204fbb6Dianne Hackborn 39cf244ada58539ce857ec041d7288d0271204fbb6Dianne Hackbornstatus_t compileXmlFile(const sp<AaptAssets>& assets, 40cf244ada58539ce857ec041d7288d0271204fbb6Dianne Hackborn const sp<AaptFile>& target, 41cf244ada58539ce857ec041d7288d0271204fbb6Dianne Hackborn const sp<AaptFile>& outTarget, 42cf244ada58539ce857ec041d7288d0271204fbb6Dianne Hackborn ResourceTable* table, 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int options = XML_COMPILE_STANDARD_RESOURCE); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackbornstatus_t compileXmlFile(const sp<AaptAssets>& assets, 46a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn const sp<XMLNode>& xmlTree, 47a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn const sp<AaptFile>& target, 48a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn ResourceTable* table, 49a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn int options = XML_COMPILE_STANDARD_RESOURCE); 50a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t compileResourceFile(Bundle* bundle, 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptAssets>& assets, 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& in, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config& defParams, 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool overwrite, 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceTable* outTable); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct AccessorCookie 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 attr; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 value; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AccessorCookie(const SourcePos&p, const String8& a, const String8& v) 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :sourcePos(p), 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attr(a), 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value(v) 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ResourceTable : public ResTable::Accessor 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Package; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Type; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Entry; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 796c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn struct ConfigDescription : public ResTable_config { 806c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn ConfigDescription() { 816c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn memset(this, 0, sizeof(*this)); 826c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn size = sizeof(ResTable_config); 836c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn } 846c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn ConfigDescription(const ResTable_config&o) { 856c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn *static_cast<ResTable_config*>(this) = o; 866c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn size = sizeof(ResTable_config); 876c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn } 886c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn ConfigDescription(const ConfigDescription&o) { 896c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn *static_cast<ResTable_config*>(this) = o; 906c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn } 916c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn 926c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn ConfigDescription& operator=(const ResTable_config& o) { 936c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn *static_cast<ResTable_config*>(this) = o; 946c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn size = sizeof(ResTable_config); 956c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn return *this; 966c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn } 976c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn ConfigDescription& operator=(const ConfigDescription& o) { 986c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn *static_cast<ResTable_config*>(this) = o; 996c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn return *this; 1006c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn } 1016c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn 1026c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn inline bool operator<(const ConfigDescription& o) const { return compare(o) < 0; } 1036c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn inline bool operator<=(const ConfigDescription& o) const { return compare(o) <= 0; } 1046c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn inline bool operator==(const ConfigDescription& o) const { return compare(o) == 0; } 1056c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn inline bool operator!=(const ConfigDescription& o) const { return compare(o) != 0; } 1066c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn inline bool operator>=(const ConfigDescription& o) const { return compare(o) >= 0; } 1076c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn inline bool operator>(const ConfigDescription& o) const { return compare(o) > 0; } 1086c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn }; 1096c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceTable(Bundle* bundle, const String16& assetsPackage); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addPublic(const SourcePos& pos, 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint32_t ident); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addEntry(const SourcePos& pos, 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& value, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* params = NULL, 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool doSetIndex = false, 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const int32_t format = ResTable_map::TYPE_ANY, 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool overwrite = false); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t startBag(const SourcePos& pos, 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& bagParent, 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* params = NULL, 1371aa8170e6a448afad86e5d62927d3b8ca4cd9707Robert Greenwalt bool overlay = false, 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool replace = false, 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isId = false); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addBag(const SourcePos& pos, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& bagParent, 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& bagKey, 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& value, 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* params = NULL, 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool replace = false, 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isId = false, 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const int32_t format = ResTable_map::TYPE_ANY); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasBagOrEntry(const String16& package, 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name) const; 157914f7e683a01f15f8830810c49eaecc31bc554a6Eric Fischer 158914f7e683a01f15f8830810c49eaecc31bc554a6Eric Fischer bool hasBagOrEntry(const String16& package, 159914f7e683a01f15f8830810c49eaecc31bc554a6Eric Fischer const String16& type, 160914f7e683a01f15f8830810c49eaecc31bc554a6Eric Fischer const String16& name, 161914f7e683a01f15f8830810c49eaecc31bc554a6Eric Fischer const ResTable_config& config) const; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasBagOrEntry(const String16& ref, 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defType = NULL, 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defPackage = NULL); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool appendComment(const String16& package, 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& comment, 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool onlyIfEmpty = false); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool appendTypeComment(const String16& package, 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& comment); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17858c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn void canAddEntry(const SourcePos& pos, 17958c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn const String16& package, const String16& type, const String16& name); 18058c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t size() const; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t numLocalResources() const; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasResources() const; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> flatten(Bundle*); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static inline uint32_t makeResId(uint32_t packageId, 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t typeId, 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t nameId) 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nameId | (typeId<<16) | (packageId<<24); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static inline uint32_t getResId(const sp<Package>& p, 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<Type>& t, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t nameId); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getResId(const String16& package, 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 201426431adcc220b6adfbe1d9530247f897e60fa36Dianne Hackborn bool onlyPublic = true) const; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getResId(const String16& ref, 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defType = NULL, 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defPackage = NULL, 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char** outErrorMsg = NULL, 207426431adcc220b6adfbe1d9530247f897e60fa36Dianne Hackborn bool onlyPublic = true) const; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool isValidResourceName(const String16& s); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool stringToValue(Res_value* outValue, StringPool* pool, 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& str, 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool preserveSpaces, bool coerceType, 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t attrID, 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16* outStr = NULL, void* accessorCookie = NULL, 2176c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn uint32_t attrType = ResTable_map::TYPE_ANY, 2186c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn const String8* configTypeName = NULL, 2196c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn const ConfigDescription* config = NULL); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t assignResourceIds(); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addSymbols(const sp<AaptSymbols>& outSymbols = NULL); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addLocalization(const String16& name, const String8& locale); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t validateLocalizations(void); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t flatten(Bundle*, const sp<AaptFile>& dest); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void writePublicDefinitions(const String16& package, FILE* fp); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getCustomResource(const String16& package, 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name) const; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getCustomResourceWithCreation(const String16& package, 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool createIfNeeded); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getRemappedPackage(uint32_t origPackage) const; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeKeys(uint32_t attrID, Vector<String16>* outKeys); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeEnum(uint32_t attrID, 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char16_t* name, size_t nameLen, 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value* outValue); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeFlags(uint32_t attrID, 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char16_t* name, size_t nameLen, 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value* outValue); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getAttributeL10N(uint32_t attrID); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getLocalizationSetting(); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void reportError(void* accessorCookie, const char* fmt, ...); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Item { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { memset(&parsedValue, 0, sizeof(parsedValue)); } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item(const SourcePos& pos, 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool _isId, 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& _value, 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* _style = NULL, 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format = ResTable_map::TYPE_ANY); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item(const Item& o) : sourcePos(o.sourcePos), 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isId(o.isId), value(o.value), style(o.style), 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memset(&parsedValue, 0, sizeof(parsedValue)); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~Item() { } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item& operator=(const Item& o) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sourcePos = o.sourcePos; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isId = o.isId; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = o.value; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project style = o.style; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project format = o.format; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bagKeyId = o.bagKeyId; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parsedValue = o.parsedValue; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable bool isId; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 value; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<StringPool::entry_style_span> style; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t bagKeyId; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable bool evaluating; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value parsedValue; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Entry : public RefBase { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Entry(const String16& name, const SourcePos& pos) 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mName(name), mType(TYPE_UNKNOWN), 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Entry() { } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum type { 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_UNKNOWN = 0, 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_ITEM, 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_BAG 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type getType() const { return mType; } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setParent(const String16& parent) { mParent = parent; } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getParent() const { return mParent; } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t makeItABag(const SourcePos& sourcePos); 3134b4f4a908895bc0ba63f929bfdc02eec22c0f6e5Robert Greenwalt 3144b4f4a908895bc0ba63f929bfdc02eec22c0f6e5Robert Greenwalt status_t emptyBag(const SourcePos& sourcePos); 3154b4f4a908895bc0ba63f929bfdc02eec22c0f6e5Robert Greenwalt 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setItem(const SourcePos& pos, 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& value, 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format = ResTable_map::TYPE_ANY, 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool overwrite = false); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addToBag(const SourcePos& pos, 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& key, const String16& value, 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool replace=false, bool isId = false, 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format = ResTable_map::TYPE_ANY); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Index of the entry's name string in the key pool. 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getNameIndex() const { return mNameIndex; } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setNameIndex(int32_t index) { mNameIndex = index; } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const KeyedVector<String16, Item>& getBag() const { return mBag; } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t generateAttributes(ResourceTable* table, 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t assignResourceIds(ResourceTable* table, 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3416c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn status_t prepareFlatten(StringPool* strings, ResourceTable* table, 3426c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn const String8* configTypeName, const ConfigDescription* config); 3436c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn 3446c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn status_t remapStringValue(StringPool* strings); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t flatten(Bundle*, const sp<AaptFile>& data, bool isPublic); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPos() const { return mPos; } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mName; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mParent; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type mType; 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item mItem; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mItemFormat; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<String16, Item> mBag; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mNameIndex; 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mParentId; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mPos; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class ConfigList : public RefBase { 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigList(const String16& name, const SourcePos& pos) 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~ConfigList() { } 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPos() const { return mPos; } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendComment(const String16& comment, bool onlyIfEmpty = false); 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getComment() const { return mComment; } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendTypeComment(const String16& comment); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getTypeComment() const { return mTypeComment; } 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Index of this entry in its Type. 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getEntryIndex() const { return mEntryIndex; } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setEntryIndex(int32_t index) { mEntryIndex = index; } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPublic(bool pub) { mPublic = pub; } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool getPublic() const { return mPublic; } 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addEntry(const ResTable_config& config, const sp<Entry>& entry) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEntries.add(config, entry); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16 mName; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos mPos; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mComment; 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mTypeComment; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mPublic; 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mPublicSourcePos; 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mEntryIndex; 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<ConfigDescription, sp<Entry> > mEntries; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Public { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public() : sourcePos(), ident(0) { } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public(const SourcePos& pos, 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& _comment, 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t _ident) 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sourcePos(pos), 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment(_comment), ident(_ident) { } 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public(const Public& o) : sourcePos(o.sourcePos), 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment(o.comment), ident(o.ident) { } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~Public() { } 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public& operator=(const Public& o) { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sourcePos = o.sourcePos; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment = o.comment; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ident = o.ident; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 comment; 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t ident; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Type : public RefBase { 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type(const String16& name, const SourcePos& pos) 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { } 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Type() { delete mFirstPublicSourcePos; } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addPublic(const SourcePos& pos, 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint32_t ident); 43658c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn 43758c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn void canAddEntry(const String16& name); 43858c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Entry> getEntry(const String16& entry, 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* config = NULL, 443f878e2d80c3a0afefe3b018d232df6066379e1d5Robert Greenwalt bool doSetIndex = false, 44499080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet bool overlay = false, 44599080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet bool autoAddOverlay = false); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getPublicIndex() const { return mPublicIndex; } 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getIndex() const { return mIndex; } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setIndex(int32_t index) { mIndex = index; } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t applyPublicEntryOrder(); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SortedVector<ConfigDescription>& getUniqueConfigs() const { return mUniqueConfigs; } 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String16, sp<ConfigList> >& getConfigs() const { return mConfigs; } 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<sp<ConfigList> >& getOrderedConfigs() const { return mOrderedConfigs; } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 46158c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn const SortedVector<String16>& getCanAddEntries() const { return mCanAddEntries; } 46258c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPos() const { return mPos; } 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mName; 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos* mFirstPublicSourcePos; 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, Public> mPublic; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SortedVector<ConfigDescription> mUniqueConfigs; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, sp<ConfigList> > mConfigs; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<ConfigList> > mOrderedConfigs; 47158c27a0a03f573791935116fa35f6a7c8bf93896Dianne Hackborn SortedVector<String16> mCanAddEntries; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mPublicIndex; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mIndex; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mPos; 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Package : public RefBase { 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Package(const String16& name, ssize_t includedId=-1); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Package() { } 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Type> getType(const String16& type, 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doSetIndex = false); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t getAssignedId() const { return mIncludedId; } 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResStringPool& getTypeStrings() const { return mTypeStrings; } 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile> getTypeStringsData() const { return mTypeStringsData; } 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setTypeStrings(const sp<AaptFile>& data); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResStringPool& getKeyStrings() const { return mKeyStrings; } 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile> getKeyStringsData() const { return mKeyStringsData; } 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setKeyStrings(const sp<AaptFile>& data); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t applyPublicTypeOrder(); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String16, sp<Type> >& getTypes() const { return mTypes; } 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<sp<Type> >& getOrderedTypes() const { return mOrderedTypes; } 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setStrings(const sp<AaptFile>& data, 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResStringPool* strings, 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, uint32_t>* mappings); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16 mName; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ssize_t mIncludedId; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, sp<Type> > mTypes; 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<Type> > mOrderedTypes; 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> mTypeStringsData; 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> mKeyStringsData; 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResStringPool mTypeStrings; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResStringPool mKeyStrings; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, uint32_t> mTypeStringsMapping; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, uint32_t> mKeyStringsMapping; 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void writePublicDefinitions(const String16& package, FILE* fp, bool pub); 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Package> getPackage(const String16& package); 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Type> getType(const String16& package, 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doSetIndex = false); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Entry> getEntry(const String16& package, 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 532f878e2d80c3a0afefe3b018d232df6066379e1d5Robert Greenwalt bool overlay, 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* config = NULL, 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doSetIndex = false); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<const Entry> getEntry(uint32_t resID, 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* config = NULL) const; 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Item* getItem(uint32_t resID, uint32_t attrID) const; 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool getItemValue(uint32_t resID, uint32_t attrID, 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value* outValue); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mAssetsPackage; 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptAssets> mAssets; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, sp<Package> > mPackages; 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<Package> > mOrderedPackages; 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mNextPackageId; 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mHaveAppPackage; 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mIsAppPackage; 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mNumLocal; 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mCurrentXmlPos; 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle* mBundle; 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // key = string resource name, value = set of locales in which that name is defined 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project map<String16, set<String8> > mLocalizations; 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 558