ResourceTable.h revision f878e2d80c3a0afefe3b018d232df6066379e1d5
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, 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STANDARD_RESOURCE = 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t compileXmlFile(const sp<AaptAssets>& assets, 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& target, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceTable* table, 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int options = XML_COMPILE_STANDARD_RESOURCE); 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackbornstatus_t compileXmlFile(const sp<AaptAssets>& assets, 39a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn const sp<XMLNode>& xmlTree, 40a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn const sp<AaptFile>& target, 41a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn ResourceTable* table, 42a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn int options = XML_COMPILE_STANDARD_RESOURCE); 43a96cbb435d7b2197ab2b61fd98d14cbd6e0c5c3dDianne Hackborn 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t compileResourceFile(Bundle* bundle, 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptAssets>& assets, 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& in, 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config& defParams, 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool overwrite, 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceTable* outTable); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct AccessorCookie 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 attr; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 value; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AccessorCookie(const SourcePos&p, const String8& a, const String8& v) 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :sourcePos(p), 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attr(a), 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value(v) 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ResourceTable : public ResTable::Accessor 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Package; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Type; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Entry; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceTable(Bundle* bundle, const String16& assetsPackage); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addPublic(const SourcePos& pos, 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint32_t ident); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addEntry(const SourcePos& pos, 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& value, 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* params = NULL, 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool doSetIndex = false, 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const int32_t format = ResTable_map::TYPE_ANY, 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool overwrite = false); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t startBag(const SourcePos& pos, 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& bagParent, 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* params = NULL, 991aa8170e6a448afad86e5d62927d3b8ca4cd9707Robert Greenwalt bool overlay = false, 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool replace = false, 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isId = false); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addBag(const SourcePos& pos, 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package, 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& bagParent, 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& bagKey, 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& value, 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* params = NULL, 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool replace = false, 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isId = false, 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const int32_t format = ResTable_map::TYPE_ANY); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasBagOrEntry(const String16& package, 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name) const; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasBagOrEntry(const String16& ref, 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defType = NULL, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defPackage = NULL); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool appendComment(const String16& package, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& comment, 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool onlyIfEmpty = false); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool appendTypeComment(const String16& package, 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& comment); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t size() const; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t numLocalResources() const; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasResources() const; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> flatten(Bundle*); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static inline uint32_t makeResId(uint32_t packageId, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t typeId, 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t nameId) 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nameId | (typeId<<16) | (packageId<<24); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static inline uint32_t getResId(const sp<Package>& p, 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<Type>& t, 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t nameId); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getResId(const String16& package, 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool onlyPublic = false) const; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getResId(const String16& ref, 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defType = NULL, 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16* defPackage = NULL, 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char** outErrorMsg = NULL, 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool onlyPublic = false) const; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool isValidResourceName(const String16& s); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool stringToValue(Res_value* outValue, StringPool* pool, 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& str, 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool preserveSpaces, bool coerceType, 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t attrID, 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16* outStr = NULL, void* accessorCookie = NULL, 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t attrType = ResTable_map::TYPE_ANY); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t assignResourceIds(); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addSymbols(const sp<AaptSymbols>& outSymbols = NULL); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addLocalization(const String16& name, const String8& locale); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t validateLocalizations(void); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t flatten(Bundle*, const sp<AaptFile>& dest); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void writePublicDefinitions(const String16& package, FILE* fp); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getCustomResource(const String16& package, 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name) const; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getCustomResourceWithCreation(const String16& package, 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool createIfNeeded); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getRemappedPackage(uint32_t origPackage) const; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeKeys(uint32_t attrID, Vector<String16>* outKeys); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeEnum(uint32_t attrID, 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char16_t* name, size_t nameLen, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value* outValue); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getAttributeFlags(uint32_t attrID, 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char16_t* name, size_t nameLen, 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value* outValue); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getAttributeL10N(uint32_t attrID); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool getLocalizationSetting(); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void reportError(void* accessorCookie, const char* fmt, ...); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Item { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { memset(&parsedValue, 0, sizeof(parsedValue)); } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item(const SourcePos& pos, 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool _isId, 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& _value, 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* _style = NULL, 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format = ResTable_map::TYPE_ANY); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item(const Item& o) : sourcePos(o.sourcePos), 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isId(o.isId), value(o.value), style(o.style), 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memset(&parsedValue, 0, sizeof(parsedValue)); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~Item() { } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item& operator=(const Item& o) { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sourcePos = o.sourcePos; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isId = o.isId; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = o.value; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project style = o.style; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project format = o.format; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bagKeyId = o.bagKeyId; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parsedValue = o.parsedValue; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable bool isId; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 value; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<StringPool::entry_style_span> style; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t bagKeyId; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable bool evaluating; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value parsedValue; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Entry : public RefBase { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Entry(const String16& name, const SourcePos& pos) 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mName(name), mType(TYPE_UNKNOWN), 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Entry() { } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum type { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_UNKNOWN = 0, 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_ITEM, 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_BAG 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type getType() const { return mType; } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setParent(const String16& parent) { mParent = parent; } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getParent() const { return mParent; } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t makeItABag(const SourcePos& sourcePos); 2654b4f4a908895bc0ba63f929bfdc02eec22c0f6e5Robert Greenwalt 2664b4f4a908895bc0ba63f929bfdc02eec22c0f6e5Robert Greenwalt status_t emptyBag(const SourcePos& sourcePos); 2674b4f4a908895bc0ba63f929bfdc02eec22c0f6e5Robert Greenwalt 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setItem(const SourcePos& pos, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& value, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format = ResTable_map::TYPE_ANY, 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool overwrite = false); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addToBag(const SourcePos& pos, 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& key, const String16& value, 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<StringPool::entry_style_span>* style = NULL, 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool replace=false, bool isId = false, 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t format = ResTable_map::TYPE_ANY); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Index of the entry's name string in the key pool. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getNameIndex() const { return mNameIndex; } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setNameIndex(int32_t index) { mNameIndex = index; } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const KeyedVector<String16, Item>& getBag() const { return mBag; } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t generateAttributes(ResourceTable* table, 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t assignResourceIds(ResourceTable* table, 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& package); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t prepareFlatten(StringPool* strings, ResourceTable* table); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t flatten(Bundle*, const sp<AaptFile>& data, bool isPublic); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPos() const { return mPos; } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mName; 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mParent; 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type mType; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Item mItem; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mItemFormat; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<String16, Item> mBag; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mNameIndex; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mParentId; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mPos; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct ConfigDescription : public ResTable_config { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigDescription() { 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memset(this, 0, sizeof(*this)); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size = sizeof(ResTable_config); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigDescription(const ResTable_config&o) { 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *static_cast<ResTable_config*>(this) = o; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size = sizeof(ResTable_config); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigDescription(const ConfigDescription&o) { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *static_cast<ResTable_config*>(this) = o; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigDescription& operator=(const ResTable_config& o) { 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *static_cast<ResTable_config*>(this) = o; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size = sizeof(ResTable_config); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigDescription& operator=(const ConfigDescription& o) { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *static_cast<ResTable_config*>(this) = o; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator<(const ConfigDescription& o) const { return compare(o) < 0; } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator<=(const ConfigDescription& o) const { return compare(o) <= 0; } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator==(const ConfigDescription& o) const { return compare(o) == 0; } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator!=(const ConfigDescription& o) const { return compare(o) != 0; } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator>=(const ConfigDescription& o) const { return compare(o) >= 0; } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator>(const ConfigDescription& o) const { return compare(o) > 0; } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class ConfigList : public RefBase { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConfigList(const String16& name, const SourcePos& pos) 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~ConfigList() { } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPos() const { return mPos; } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendComment(const String16& comment, bool onlyIfEmpty = false); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getComment() const { return mComment; } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendTypeComment(const String16& comment); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getTypeComment() const { return mTypeComment; } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Index of this entry in its Type. 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getEntryIndex() const { return mEntryIndex; } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setEntryIndex(int32_t index) { mEntryIndex = index; } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPublic(bool pub) { mPublic = pub; } 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool getPublic() const { return mPublic; } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addEntry(const ResTable_config& config, const sp<Entry>& entry) { 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEntries.add(config, entry); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16 mName; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos mPos; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mComment; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mTypeComment; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mPublic; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mPublicSourcePos; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mEntryIndex; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<ConfigDescription, sp<Entry> > mEntries; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Public { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public() : sourcePos(), ident(0) { } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public(const SourcePos& pos, 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& _comment, 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t _ident) 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sourcePos(pos), 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment(_comment), ident(_ident) { } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public(const Public& o) : sourcePos(o.sourcePos), 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment(o.comment), ident(o.ident) { } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~Public() { } 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Public& operator=(const Public& o) { 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sourcePos = o.sourcePos; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment = o.comment; 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ident = o.ident; 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 comment; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t ident; 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Type : public RefBase { 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type(const String16& name, const SourcePos& pos) 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { } 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Type() { delete mFirstPublicSourcePos; } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addPublic(const SourcePos& pos, 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint32_t ident); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Entry> getEntry(const String16& entry, 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* config = NULL, 421f878e2d80c3a0afefe3b018d232df6066379e1d5Robert Greenwalt bool doSetIndex = false, 422f878e2d80c3a0afefe3b018d232df6066379e1d5Robert Greenwalt bool overlay = false); 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getPublicIndex() const { return mPublicIndex; } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t getIndex() const { return mIndex; } 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setIndex(int32_t index) { mIndex = index; } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t applyPublicEntryOrder(); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SortedVector<ConfigDescription>& getUniqueConfigs() const { return mUniqueConfigs; } 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String16, sp<ConfigList> >& getConfigs() const { return mConfigs; } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<sp<ConfigList> >& getOrderedConfigs() const { return mOrderedConfigs; } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& getPos() const { return mPos; } 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mName; 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos* mFirstPublicSourcePos; 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, Public> mPublic; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SortedVector<ConfigDescription> mUniqueConfigs; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, sp<ConfigList> > mConfigs; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<ConfigList> > mOrderedConfigs; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mPublicIndex; 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mIndex; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mPos; 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Package : public RefBase { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Package(const String16& name, ssize_t includedId=-1); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Package() { } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 getName() const { return mName; } 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Type> getType(const String16& type, 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doSetIndex = false); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t getAssignedId() const { return mIncludedId; } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResStringPool& getTypeStrings() const { return mTypeStrings; } 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile> getTypeStringsData() const { return mTypeStringsData; } 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setTypeStrings(const sp<AaptFile>& data); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResStringPool& getKeyStrings() const { return mKeyStrings; } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile> getKeyStringsData() const { return mKeyStringsData; } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setKeyStrings(const sp<AaptFile>& data); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t applyPublicTypeOrder(); 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String16, sp<Type> >& getTypes() const { return mTypes; } 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Vector<sp<Type> >& getOrderedTypes() const { return mOrderedTypes; } 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setStrings(const sp<AaptFile>& data, 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResStringPool* strings, 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, uint32_t>* mappings); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16 mName; 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ssize_t mIncludedId; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, sp<Type> > mTypes; 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<Type> > mOrderedTypes; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> mTypeStringsData; 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> mKeyStringsData; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResStringPool mTypeStrings; 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResStringPool mKeyStrings; 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, uint32_t> mTypeStringsMapping; 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, uint32_t> mKeyStringsMapping; 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void writePublicDefinitions(const String16& package, FILE* fp, bool pub); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Package> getPackage(const String16& package); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Type> getType(const String16& package, 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doSetIndex = false); 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Entry> getEntry(const String16& package, 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& type, 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& name, 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos, 506f878e2d80c3a0afefe3b018d232df6066379e1d5Robert Greenwalt bool overlay, 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* config = NULL, 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doSetIndex = false); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<const Entry> getEntry(uint32_t resID, 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable_config* config = NULL) const; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Item* getItem(uint32_t resID, uint32_t attrID) const; 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool getItemValue(uint32_t resID, uint32_t attrID, 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Res_value* outValue); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 mAssetsPackage; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptAssets> mAssets; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String16, sp<Package> > mPackages; 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<Package> > mOrderedPackages; 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mNextPackageId; 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mHaveAppPackage; 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mIsAppPackage; 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mNumLocal; 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos mCurrentXmlPos; 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle* mBundle; 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // key = string resource name, value = set of locales in which that name is defined 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project map<String16, set<String8> > mLocalizations; 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ResourceFilter 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResourceFilter() : mData(), mContainsPseudo(false) {} 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t parse(const char* arg); 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool match(int axis, uint32_t value); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool match(const ResTable_config& config); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool containsPseudo() { return mContainsPseudo; } 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<int,SortedVector<uint32_t> > mData; 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mContainsPseudo; 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 547