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