1*d57664e9SAndroid Build Coastguard Worker // 2*d57664e9SAndroid Build Coastguard Worker // Copyright 2006 The Android Open Source Project 3*d57664e9SAndroid Build Coastguard Worker // 4*d57664e9SAndroid Build Coastguard Worker // Build resource files from raw assets. 5*d57664e9SAndroid Build Coastguard Worker // 6*d57664e9SAndroid Build Coastguard Worker 7*d57664e9SAndroid Build Coastguard Worker #ifndef RESOURCE_TABLE_H 8*d57664e9SAndroid Build Coastguard Worker #define RESOURCE_TABLE_H 9*d57664e9SAndroid Build Coastguard Worker 10*d57664e9SAndroid Build Coastguard Worker #include <map> 11*d57664e9SAndroid Build Coastguard Worker #include <queue> 12*d57664e9SAndroid Build Coastguard Worker #include <set> 13*d57664e9SAndroid Build Coastguard Worker 14*d57664e9SAndroid Build Coastguard Worker #include "ConfigDescription.h" 15*d57664e9SAndroid Build Coastguard Worker #include "ResourceFilter.h" 16*d57664e9SAndroid Build Coastguard Worker #include "SourcePos.h" 17*d57664e9SAndroid Build Coastguard Worker #include "StringPool.h" 18*d57664e9SAndroid Build Coastguard Worker #include "Symbol.h" 19*d57664e9SAndroid Build Coastguard Worker 20*d57664e9SAndroid Build Coastguard Worker class XMLNode; 21*d57664e9SAndroid Build Coastguard Worker class ResourceTable; 22*d57664e9SAndroid Build Coastguard Worker 23*d57664e9SAndroid Build Coastguard Worker enum { 24*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_STRIP_COMMENTS = 1<<0, 25*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_ASSIGN_ATTRIBUTE_IDS = 1<<1, 26*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_PARSE_VALUES = 1 << 2, 27*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_COMPACT_WHITESPACE = 1<<3, 28*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_STRIP_WHITESPACE = 1<<4, 29*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_STRIP_RAW_VALUES = 1<<5, 30*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_UTF8 = 1<<6, 31*d57664e9SAndroid Build Coastguard Worker 32*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_STANDARD_RESOURCE = 33*d57664e9SAndroid Build Coastguard Worker XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS | XML_COMPILE_PARSE_VALUES 34*d57664e9SAndroid Build Coastguard Worker | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES 35*d57664e9SAndroid Build Coastguard Worker }; 36*d57664e9SAndroid Build Coastguard Worker 37*d57664e9SAndroid Build Coastguard Worker status_t compileXmlFile(const Bundle* bundle, 38*d57664e9SAndroid Build Coastguard Worker const sp<AaptAssets>& assets, 39*d57664e9SAndroid Build Coastguard Worker const String16& resourceName, 40*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& target, 41*d57664e9SAndroid Build Coastguard Worker ResourceTable* table, 42*d57664e9SAndroid Build Coastguard Worker int options = XML_COMPILE_STANDARD_RESOURCE); 43*d57664e9SAndroid Build Coastguard Worker 44*d57664e9SAndroid Build Coastguard Worker status_t compileXmlFile(const Bundle* bundle, 45*d57664e9SAndroid Build Coastguard Worker const sp<AaptAssets>& assets, 46*d57664e9SAndroid Build Coastguard Worker const String16& resourceName, 47*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& target, 48*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& outTarget, 49*d57664e9SAndroid Build Coastguard Worker ResourceTable* table, 50*d57664e9SAndroid Build Coastguard Worker int options = XML_COMPILE_STANDARD_RESOURCE); 51*d57664e9SAndroid Build Coastguard Worker 52*d57664e9SAndroid Build Coastguard Worker status_t compileXmlFile(const Bundle* bundle, 53*d57664e9SAndroid Build Coastguard Worker const sp<AaptAssets>& assets, 54*d57664e9SAndroid Build Coastguard Worker const String16& resourceName, 55*d57664e9SAndroid Build Coastguard Worker const sp<XMLNode>& xmlTree, 56*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& target, 57*d57664e9SAndroid Build Coastguard Worker ResourceTable* table, 58*d57664e9SAndroid Build Coastguard Worker int options = XML_COMPILE_STANDARD_RESOURCE); 59*d57664e9SAndroid Build Coastguard Worker 60*d57664e9SAndroid Build Coastguard Worker status_t compileResourceFile(Bundle* bundle, 61*d57664e9SAndroid Build Coastguard Worker const sp<AaptAssets>& assets, 62*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& in, 63*d57664e9SAndroid Build Coastguard Worker const ResTable_config& defParams, 64*d57664e9SAndroid Build Coastguard Worker const bool overwrite, 65*d57664e9SAndroid Build Coastguard Worker ResourceTable* outTable); 66*d57664e9SAndroid Build Coastguard Worker 67*d57664e9SAndroid Build Coastguard Worker struct AccessorCookie 68*d57664e9SAndroid Build Coastguard Worker { 69*d57664e9SAndroid Build Coastguard Worker SourcePos sourcePos; 70*d57664e9SAndroid Build Coastguard Worker String8 attr; 71*d57664e9SAndroid Build Coastguard Worker String8 value; 72*d57664e9SAndroid Build Coastguard Worker AccessorCookieAccessorCookie73*d57664e9SAndroid Build Coastguard Worker AccessorCookie(const SourcePos&p, const String8& a, const String8& v) 74*d57664e9SAndroid Build Coastguard Worker :sourcePos(p), 75*d57664e9SAndroid Build Coastguard Worker attr(a), 76*d57664e9SAndroid Build Coastguard Worker value(v) 77*d57664e9SAndroid Build Coastguard Worker { 78*d57664e9SAndroid Build Coastguard Worker } 79*d57664e9SAndroid Build Coastguard Worker }; 80*d57664e9SAndroid Build Coastguard Worker 81*d57664e9SAndroid Build Coastguard Worker // Holds the necessary information to compile the 82*d57664e9SAndroid Build Coastguard Worker // resource. 83*d57664e9SAndroid Build Coastguard Worker struct CompileResourceWorkItem { 84*d57664e9SAndroid Build Coastguard Worker String16 resourceName; 85*d57664e9SAndroid Build Coastguard Worker String8 resPath; 86*d57664e9SAndroid Build Coastguard Worker sp<AaptFile> file; 87*d57664e9SAndroid Build Coastguard Worker sp<XMLNode> xmlRoot; 88*d57664e9SAndroid Build Coastguard Worker bool needsCompiling = true; 89*d57664e9SAndroid Build Coastguard Worker }; 90*d57664e9SAndroid Build Coastguard Worker 91*d57664e9SAndroid Build Coastguard Worker class ResourceTable : public ResTable::Accessor 92*d57664e9SAndroid Build Coastguard Worker { 93*d57664e9SAndroid Build Coastguard Worker public: 94*d57664e9SAndroid Build Coastguard Worker // The type of package to build. 95*d57664e9SAndroid Build Coastguard Worker enum PackageType { 96*d57664e9SAndroid Build Coastguard Worker App, 97*d57664e9SAndroid Build Coastguard Worker System, 98*d57664e9SAndroid Build Coastguard Worker SharedLibrary, 99*d57664e9SAndroid Build Coastguard Worker AppFeature 100*d57664e9SAndroid Build Coastguard Worker }; 101*d57664e9SAndroid Build Coastguard Worker 102*d57664e9SAndroid Build Coastguard Worker class Package; 103*d57664e9SAndroid Build Coastguard Worker class Type; 104*d57664e9SAndroid Build Coastguard Worker class Entry; 105*d57664e9SAndroid Build Coastguard Worker class ConfigList; 106*d57664e9SAndroid Build Coastguard Worker 107*d57664e9SAndroid Build Coastguard Worker /** 108*d57664e9SAndroid Build Coastguard Worker * Exposed for testing. Determines whether a versioned resource should be generated 109*d57664e9SAndroid Build Coastguard Worker * based on the other available configurations for that resource. 110*d57664e9SAndroid Build Coastguard Worker */ 111*d57664e9SAndroid Build Coastguard Worker static bool shouldGenerateVersionedResource(const sp<ConfigList>& configList, 112*d57664e9SAndroid Build Coastguard Worker const ConfigDescription& sourceConfig, 113*d57664e9SAndroid Build Coastguard Worker const int sdkVersionToGenerate); 114*d57664e9SAndroid Build Coastguard Worker 115*d57664e9SAndroid Build Coastguard Worker ResourceTable(Bundle* bundle, const String16& assetsPackage, PackageType type); 116*d57664e9SAndroid Build Coastguard Worker getAssetsPackage()117*d57664e9SAndroid Build Coastguard Worker const String16& getAssetsPackage() const { 118*d57664e9SAndroid Build Coastguard Worker return mAssetsPackage; 119*d57664e9SAndroid Build Coastguard Worker } 120*d57664e9SAndroid Build Coastguard Worker 121*d57664e9SAndroid Build Coastguard Worker /** 122*d57664e9SAndroid Build Coastguard Worker * Returns the queue of resources that need to be compiled. 123*d57664e9SAndroid Build Coastguard Worker * This is only used for resources that have been generated 124*d57664e9SAndroid Build Coastguard Worker * during the compilation phase. If they were just added 125*d57664e9SAndroid Build Coastguard Worker * to the AaptAssets, then they may be skipped over 126*d57664e9SAndroid Build Coastguard Worker * and would mess up iteration order for the existing 127*d57664e9SAndroid Build Coastguard Worker * resources. 128*d57664e9SAndroid Build Coastguard Worker */ getWorkQueue()129*d57664e9SAndroid Build Coastguard Worker std::queue<CompileResourceWorkItem>& getWorkQueue() { 130*d57664e9SAndroid Build Coastguard Worker return mWorkQueue; 131*d57664e9SAndroid Build Coastguard Worker } 132*d57664e9SAndroid Build Coastguard Worker 133*d57664e9SAndroid Build Coastguard Worker status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets); 134*d57664e9SAndroid Build Coastguard Worker 135*d57664e9SAndroid Build Coastguard Worker status_t addPublic(const SourcePos& pos, 136*d57664e9SAndroid Build Coastguard Worker const String16& package, 137*d57664e9SAndroid Build Coastguard Worker const String16& type, 138*d57664e9SAndroid Build Coastguard Worker const String16& name, 139*d57664e9SAndroid Build Coastguard Worker const uint32_t ident); 140*d57664e9SAndroid Build Coastguard Worker 141*d57664e9SAndroid Build Coastguard Worker status_t addEntry(const SourcePos& pos, 142*d57664e9SAndroid Build Coastguard Worker const String16& package, 143*d57664e9SAndroid Build Coastguard Worker const String16& type, 144*d57664e9SAndroid Build Coastguard Worker const String16& name, 145*d57664e9SAndroid Build Coastguard Worker const String16& value, 146*d57664e9SAndroid Build Coastguard Worker const Vector<StringPool::entry_style_span>* style = NULL, 147*d57664e9SAndroid Build Coastguard Worker const ResTable_config* params = NULL, 148*d57664e9SAndroid Build Coastguard Worker const bool doSetIndex = false, 149*d57664e9SAndroid Build Coastguard Worker const int32_t format = ResTable_map::TYPE_ANY, 150*d57664e9SAndroid Build Coastguard Worker const bool overwrite = false); 151*d57664e9SAndroid Build Coastguard Worker 152*d57664e9SAndroid Build Coastguard Worker status_t startBag(const SourcePos& pos, 153*d57664e9SAndroid Build Coastguard Worker const String16& package, 154*d57664e9SAndroid Build Coastguard Worker const String16& type, 155*d57664e9SAndroid Build Coastguard Worker const String16& name, 156*d57664e9SAndroid Build Coastguard Worker const String16& bagParent, 157*d57664e9SAndroid Build Coastguard Worker const ResTable_config* params = NULL, 158*d57664e9SAndroid Build Coastguard Worker bool overlay = false, 159*d57664e9SAndroid Build Coastguard Worker bool replace = false, 160*d57664e9SAndroid Build Coastguard Worker bool isId = false); 161*d57664e9SAndroid Build Coastguard Worker 162*d57664e9SAndroid Build Coastguard Worker status_t addBag(const SourcePos& pos, 163*d57664e9SAndroid Build Coastguard Worker const String16& package, 164*d57664e9SAndroid Build Coastguard Worker const String16& type, 165*d57664e9SAndroid Build Coastguard Worker const String16& name, 166*d57664e9SAndroid Build Coastguard Worker const String16& bagParent, 167*d57664e9SAndroid Build Coastguard Worker const String16& bagKey, 168*d57664e9SAndroid Build Coastguard Worker const String16& value, 169*d57664e9SAndroid Build Coastguard Worker const Vector<StringPool::entry_style_span>* style = NULL, 170*d57664e9SAndroid Build Coastguard Worker const ResTable_config* params = NULL, 171*d57664e9SAndroid Build Coastguard Worker bool replace = false, 172*d57664e9SAndroid Build Coastguard Worker bool isId = false, 173*d57664e9SAndroid Build Coastguard Worker const int32_t format = ResTable_map::TYPE_ANY); 174*d57664e9SAndroid Build Coastguard Worker 175*d57664e9SAndroid Build Coastguard Worker bool hasBagOrEntry(const String16& package, 176*d57664e9SAndroid Build Coastguard Worker const String16& type, 177*d57664e9SAndroid Build Coastguard Worker const String16& name) const; 178*d57664e9SAndroid Build Coastguard Worker 179*d57664e9SAndroid Build Coastguard Worker bool hasBagOrEntry(const String16& package, 180*d57664e9SAndroid Build Coastguard Worker const String16& type, 181*d57664e9SAndroid Build Coastguard Worker const String16& name, 182*d57664e9SAndroid Build Coastguard Worker const ResTable_config& config) const; 183*d57664e9SAndroid Build Coastguard Worker 184*d57664e9SAndroid Build Coastguard Worker bool hasBagOrEntry(const String16& ref, 185*d57664e9SAndroid Build Coastguard Worker const String16* defType = NULL, 186*d57664e9SAndroid Build Coastguard Worker const String16* defPackage = NULL); 187*d57664e9SAndroid Build Coastguard Worker 188*d57664e9SAndroid Build Coastguard Worker bool appendComment(const String16& package, 189*d57664e9SAndroid Build Coastguard Worker const String16& type, 190*d57664e9SAndroid Build Coastguard Worker const String16& name, 191*d57664e9SAndroid Build Coastguard Worker const String16& comment, 192*d57664e9SAndroid Build Coastguard Worker bool onlyIfEmpty = false); 193*d57664e9SAndroid Build Coastguard Worker 194*d57664e9SAndroid Build Coastguard Worker bool appendTypeComment(const String16& package, 195*d57664e9SAndroid Build Coastguard Worker const String16& type, 196*d57664e9SAndroid Build Coastguard Worker const String16& name, 197*d57664e9SAndroid Build Coastguard Worker const String16& comment); 198*d57664e9SAndroid Build Coastguard Worker 199*d57664e9SAndroid Build Coastguard Worker void canAddEntry(const SourcePos& pos, 200*d57664e9SAndroid Build Coastguard Worker const String16& package, const String16& type, const String16& name); 201*d57664e9SAndroid Build Coastguard Worker 202*d57664e9SAndroid Build Coastguard Worker size_t size() const; 203*d57664e9SAndroid Build Coastguard Worker size_t numLocalResources() const; 204*d57664e9SAndroid Build Coastguard Worker bool hasResources() const; 205*d57664e9SAndroid Build Coastguard Worker 206*d57664e9SAndroid Build Coastguard Worker bool versionForCompat(const Bundle* bundle, const String16& resourceName, 207*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& file, const sp<XMLNode>& root); 208*d57664e9SAndroid Build Coastguard Worker 209*d57664e9SAndroid Build Coastguard Worker status_t modifyForCompat(const Bundle* bundle); 210*d57664e9SAndroid Build Coastguard Worker status_t modifyForCompat(const Bundle* bundle, 211*d57664e9SAndroid Build Coastguard Worker const String16& resourceName, 212*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& file, 213*d57664e9SAndroid Build Coastguard Worker const sp<XMLNode>& root); 214*d57664e9SAndroid Build Coastguard Worker 215*d57664e9SAndroid Build Coastguard Worker status_t processBundleFormat(const Bundle* bundle, 216*d57664e9SAndroid Build Coastguard Worker const String16& resourceName, 217*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& file, 218*d57664e9SAndroid Build Coastguard Worker const sp<XMLNode>& parent); 219*d57664e9SAndroid Build Coastguard Worker 220*d57664e9SAndroid Build Coastguard Worker 221*d57664e9SAndroid Build Coastguard Worker sp<AaptFile> flatten(Bundle* bundle, const sp<const ResourceFilter>& filter, 222*d57664e9SAndroid Build Coastguard Worker const bool isBase); 223*d57664e9SAndroid Build Coastguard Worker makeResId(uint32_t packageId,uint32_t typeId,uint32_t nameId)224*d57664e9SAndroid Build Coastguard Worker static inline uint32_t makeResId(uint32_t packageId, 225*d57664e9SAndroid Build Coastguard Worker uint32_t typeId, 226*d57664e9SAndroid Build Coastguard Worker uint32_t nameId) 227*d57664e9SAndroid Build Coastguard Worker { 228*d57664e9SAndroid Build Coastguard Worker return nameId | (typeId<<16) | (packageId<<24); 229*d57664e9SAndroid Build Coastguard Worker } 230*d57664e9SAndroid Build Coastguard Worker 231*d57664e9SAndroid Build Coastguard Worker static inline uint32_t getResId(const sp<Package>& p, 232*d57664e9SAndroid Build Coastguard Worker const sp<Type>& t, 233*d57664e9SAndroid Build Coastguard Worker uint32_t nameId); 234*d57664e9SAndroid Build Coastguard Worker 235*d57664e9SAndroid Build Coastguard Worker uint32_t getResId(const String16& package, 236*d57664e9SAndroid Build Coastguard Worker const String16& type, 237*d57664e9SAndroid Build Coastguard Worker const String16& name, 238*d57664e9SAndroid Build Coastguard Worker bool onlyPublic = true) const; 239*d57664e9SAndroid Build Coastguard Worker 240*d57664e9SAndroid Build Coastguard Worker uint32_t getResId(const String16& ref, 241*d57664e9SAndroid Build Coastguard Worker const String16* defType = NULL, 242*d57664e9SAndroid Build Coastguard Worker const String16* defPackage = NULL, 243*d57664e9SAndroid Build Coastguard Worker const char** outErrorMsg = NULL, 244*d57664e9SAndroid Build Coastguard Worker bool onlyPublic = true) const; 245*d57664e9SAndroid Build Coastguard Worker 246*d57664e9SAndroid Build Coastguard Worker static bool isValidResourceName(const String16& s); 247*d57664e9SAndroid Build Coastguard Worker 248*d57664e9SAndroid Build Coastguard Worker bool stringToValue(Res_value* outValue, StringPool* pool, 249*d57664e9SAndroid Build Coastguard Worker const String16& str, 250*d57664e9SAndroid Build Coastguard Worker bool preserveSpaces, bool coerceType, 251*d57664e9SAndroid Build Coastguard Worker uint32_t attrID, 252*d57664e9SAndroid Build Coastguard Worker const Vector<StringPool::entry_style_span>* style = NULL, 253*d57664e9SAndroid Build Coastguard Worker String16* outStr = NULL, void* accessorCookie = NULL, 254*d57664e9SAndroid Build Coastguard Worker uint32_t attrType = ResTable_map::TYPE_ANY, 255*d57664e9SAndroid Build Coastguard Worker const String8* configTypeName = NULL, 256*d57664e9SAndroid Build Coastguard Worker const ConfigDescription* config = NULL); 257*d57664e9SAndroid Build Coastguard Worker 258*d57664e9SAndroid Build Coastguard Worker status_t assignResourceIds(); 259*d57664e9SAndroid Build Coastguard Worker status_t addSymbols(const sp<AaptSymbols>& outSymbols = NULL, 260*d57664e9SAndroid Build Coastguard Worker bool skipSymbolsWithoutDefaultLocalization = false); 261*d57664e9SAndroid Build Coastguard Worker void addLocalization(const String16& name, const String8& locale, const SourcePos& src); 262*d57664e9SAndroid Build Coastguard Worker void addDefaultLocalization(const String16& name); 263*d57664e9SAndroid Build Coastguard Worker status_t validateLocalizations(void); 264*d57664e9SAndroid Build Coastguard Worker 265*d57664e9SAndroid Build Coastguard Worker status_t flatten(Bundle* bundle, const sp<const ResourceFilter>& filter, 266*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& dest, const bool isBase); 267*d57664e9SAndroid Build Coastguard Worker status_t flattenLibraryTable(const sp<AaptFile>& dest, const Vector<sp<Package> >& libs); 268*d57664e9SAndroid Build Coastguard Worker 269*d57664e9SAndroid Build Coastguard Worker void writePublicDefinitions(const String16& package, FILE* fp); 270*d57664e9SAndroid Build Coastguard Worker 271*d57664e9SAndroid Build Coastguard Worker virtual uint32_t getCustomResource(const String16& package, 272*d57664e9SAndroid Build Coastguard Worker const String16& type, 273*d57664e9SAndroid Build Coastguard Worker const String16& name) const; 274*d57664e9SAndroid Build Coastguard Worker virtual uint32_t getCustomResourceWithCreation(const String16& package, 275*d57664e9SAndroid Build Coastguard Worker const String16& type, 276*d57664e9SAndroid Build Coastguard Worker const String16& name, 277*d57664e9SAndroid Build Coastguard Worker const bool createIfNeeded); 278*d57664e9SAndroid Build Coastguard Worker virtual uint32_t getRemappedPackage(uint32_t origPackage) const; 279*d57664e9SAndroid Build Coastguard Worker virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); 280*d57664e9SAndroid Build Coastguard Worker virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); 281*d57664e9SAndroid Build Coastguard Worker virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); 282*d57664e9SAndroid Build Coastguard Worker virtual bool getAttributeKeys(uint32_t attrID, Vector<String16>* outKeys); 283*d57664e9SAndroid Build Coastguard Worker virtual bool getAttributeEnum(uint32_t attrID, 284*d57664e9SAndroid Build Coastguard Worker const char16_t* name, size_t nameLen, 285*d57664e9SAndroid Build Coastguard Worker Res_value* outValue); 286*d57664e9SAndroid Build Coastguard Worker virtual bool getAttributeFlags(uint32_t attrID, 287*d57664e9SAndroid Build Coastguard Worker const char16_t* name, size_t nameLen, 288*d57664e9SAndroid Build Coastguard Worker Res_value* outValue); 289*d57664e9SAndroid Build Coastguard Worker virtual uint32_t getAttributeL10N(uint32_t attrID); 290*d57664e9SAndroid Build Coastguard Worker 291*d57664e9SAndroid Build Coastguard Worker virtual bool getLocalizationSetting(); 292*d57664e9SAndroid Build Coastguard Worker virtual void reportError(void* accessorCookie, const char* fmt, ...); 293*d57664e9SAndroid Build Coastguard Worker setCurrentXmlPos(const SourcePos & pos)294*d57664e9SAndroid Build Coastguard Worker void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } 295*d57664e9SAndroid Build Coastguard Worker 296*d57664e9SAndroid Build Coastguard Worker class Item { 297*d57664e9SAndroid Build Coastguard Worker public: Item()298*d57664e9SAndroid Build Coastguard Worker Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) 299*d57664e9SAndroid Build Coastguard Worker { memset(&parsedValue, 0, sizeof(parsedValue)); } 300*d57664e9SAndroid Build Coastguard Worker Item(const SourcePos& pos, 301*d57664e9SAndroid Build Coastguard Worker bool _isId, 302*d57664e9SAndroid Build Coastguard Worker const String16& _value, 303*d57664e9SAndroid Build Coastguard Worker const Vector<StringPool::entry_style_span>* _style = NULL, 304*d57664e9SAndroid Build Coastguard Worker int32_t format = ResTable_map::TYPE_ANY); Item(const Item & o)305*d57664e9SAndroid Build Coastguard Worker Item(const Item& o) : sourcePos(o.sourcePos), 306*d57664e9SAndroid Build Coastguard Worker isId(o.isId), value(o.value), style(o.style), 307*d57664e9SAndroid Build Coastguard Worker format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { 308*d57664e9SAndroid Build Coastguard Worker memset(&parsedValue, 0, sizeof(parsedValue)); 309*d57664e9SAndroid Build Coastguard Worker } ~Item()310*d57664e9SAndroid Build Coastguard Worker ~Item() { } 311*d57664e9SAndroid Build Coastguard Worker 312*d57664e9SAndroid Build Coastguard Worker Item& operator=(const Item& o) { 313*d57664e9SAndroid Build Coastguard Worker sourcePos = o.sourcePos; 314*d57664e9SAndroid Build Coastguard Worker isId = o.isId; 315*d57664e9SAndroid Build Coastguard Worker value = o.value; 316*d57664e9SAndroid Build Coastguard Worker style = o.style; 317*d57664e9SAndroid Build Coastguard Worker format = o.format; 318*d57664e9SAndroid Build Coastguard Worker bagKeyId = o.bagKeyId; 319*d57664e9SAndroid Build Coastguard Worker parsedValue = o.parsedValue; 320*d57664e9SAndroid Build Coastguard Worker return *this; 321*d57664e9SAndroid Build Coastguard Worker } 322*d57664e9SAndroid Build Coastguard Worker 323*d57664e9SAndroid Build Coastguard Worker SourcePos sourcePos; 324*d57664e9SAndroid Build Coastguard Worker mutable bool isId; 325*d57664e9SAndroid Build Coastguard Worker String16 value; 326*d57664e9SAndroid Build Coastguard Worker Vector<StringPool::entry_style_span> style; 327*d57664e9SAndroid Build Coastguard Worker int32_t format; 328*d57664e9SAndroid Build Coastguard Worker uint32_t bagKeyId; 329*d57664e9SAndroid Build Coastguard Worker mutable bool evaluating; 330*d57664e9SAndroid Build Coastguard Worker Res_value parsedValue; 331*d57664e9SAndroid Build Coastguard Worker }; 332*d57664e9SAndroid Build Coastguard Worker 333*d57664e9SAndroid Build Coastguard Worker class Entry : public RefBase { 334*d57664e9SAndroid Build Coastguard Worker public: Entry(const String16 & name,const SourcePos & pos)335*d57664e9SAndroid Build Coastguard Worker Entry(const String16& name, const SourcePos& pos) 336*d57664e9SAndroid Build Coastguard Worker : mName(name), mType(TYPE_UNKNOWN), 337*d57664e9SAndroid Build Coastguard Worker mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) 338*d57664e9SAndroid Build Coastguard Worker { } 339*d57664e9SAndroid Build Coastguard Worker 340*d57664e9SAndroid Build Coastguard Worker Entry(const Entry& entry); 341*d57664e9SAndroid Build Coastguard Worker Entry& operator=(const Entry& entry); 342*d57664e9SAndroid Build Coastguard Worker ~Entry()343*d57664e9SAndroid Build Coastguard Worker virtual ~Entry() { } 344*d57664e9SAndroid Build Coastguard Worker 345*d57664e9SAndroid Build Coastguard Worker enum type { 346*d57664e9SAndroid Build Coastguard Worker TYPE_UNKNOWN = 0, 347*d57664e9SAndroid Build Coastguard Worker TYPE_ITEM, 348*d57664e9SAndroid Build Coastguard Worker TYPE_BAG 349*d57664e9SAndroid Build Coastguard Worker }; 350*d57664e9SAndroid Build Coastguard Worker getName()351*d57664e9SAndroid Build Coastguard Worker String16 getName() const { return mName; } getType()352*d57664e9SAndroid Build Coastguard Worker type getType() const { return mType; } 353*d57664e9SAndroid Build Coastguard Worker setParent(const String16 & parent)354*d57664e9SAndroid Build Coastguard Worker void setParent(const String16& parent) { mParent = parent; } getParent()355*d57664e9SAndroid Build Coastguard Worker String16 getParent() const { return mParent; } 356*d57664e9SAndroid Build Coastguard Worker 357*d57664e9SAndroid Build Coastguard Worker status_t makeItABag(const SourcePos& sourcePos); 358*d57664e9SAndroid Build Coastguard Worker 359*d57664e9SAndroid Build Coastguard Worker status_t emptyBag(const SourcePos& sourcePos); 360*d57664e9SAndroid Build Coastguard Worker 361*d57664e9SAndroid Build Coastguard Worker status_t setItem(const SourcePos& pos, 362*d57664e9SAndroid Build Coastguard Worker const String16& value, 363*d57664e9SAndroid Build Coastguard Worker const Vector<StringPool::entry_style_span>* style = NULL, 364*d57664e9SAndroid Build Coastguard Worker int32_t format = ResTable_map::TYPE_ANY, 365*d57664e9SAndroid Build Coastguard Worker const bool overwrite = false); 366*d57664e9SAndroid Build Coastguard Worker 367*d57664e9SAndroid Build Coastguard Worker status_t addToBag(const SourcePos& pos, 368*d57664e9SAndroid Build Coastguard Worker const String16& key, const String16& value, 369*d57664e9SAndroid Build Coastguard Worker const Vector<StringPool::entry_style_span>* style = NULL, 370*d57664e9SAndroid Build Coastguard Worker bool replace=false, bool isId = false, 371*d57664e9SAndroid Build Coastguard Worker int32_t format = ResTable_map::TYPE_ANY); 372*d57664e9SAndroid Build Coastguard Worker 373*d57664e9SAndroid Build Coastguard Worker status_t removeFromBag(const String16& key); 374*d57664e9SAndroid Build Coastguard Worker 375*d57664e9SAndroid Build Coastguard Worker // Index of the entry's name string in the key pool. getNameIndex()376*d57664e9SAndroid Build Coastguard Worker int32_t getNameIndex() const { return mNameIndex; } setNameIndex(int32_t index)377*d57664e9SAndroid Build Coastguard Worker void setNameIndex(int32_t index) { mNameIndex = index; } 378*d57664e9SAndroid Build Coastguard Worker getItem()379*d57664e9SAndroid Build Coastguard Worker const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } getBag()380*d57664e9SAndroid Build Coastguard Worker const KeyedVector<String16, Item>& getBag() const { return mBag; } 381*d57664e9SAndroid Build Coastguard Worker 382*d57664e9SAndroid Build Coastguard Worker status_t generateAttributes(ResourceTable* table, 383*d57664e9SAndroid Build Coastguard Worker const String16& package); 384*d57664e9SAndroid Build Coastguard Worker 385*d57664e9SAndroid Build Coastguard Worker status_t assignResourceIds(ResourceTable* table, 386*d57664e9SAndroid Build Coastguard Worker const String16& package); 387*d57664e9SAndroid Build Coastguard Worker 388*d57664e9SAndroid Build Coastguard Worker status_t prepareFlatten(StringPool* strings, ResourceTable* table, 389*d57664e9SAndroid Build Coastguard Worker const String8* configTypeName, const ConfigDescription* config); 390*d57664e9SAndroid Build Coastguard Worker 391*d57664e9SAndroid Build Coastguard Worker status_t remapStringValue(StringPool* strings); 392*d57664e9SAndroid Build Coastguard Worker 393*d57664e9SAndroid Build Coastguard Worker ssize_t flatten(Bundle*, const sp<AaptFile>& data, bool isPublic); 394*d57664e9SAndroid Build Coastguard Worker getPos()395*d57664e9SAndroid Build Coastguard Worker const SourcePos& getPos() const { return mPos; } 396*d57664e9SAndroid Build Coastguard Worker 397*d57664e9SAndroid Build Coastguard Worker private: 398*d57664e9SAndroid Build Coastguard Worker String16 mName; 399*d57664e9SAndroid Build Coastguard Worker String16 mParent; 400*d57664e9SAndroid Build Coastguard Worker type mType; 401*d57664e9SAndroid Build Coastguard Worker Item mItem; 402*d57664e9SAndroid Build Coastguard Worker int32_t mItemFormat; 403*d57664e9SAndroid Build Coastguard Worker KeyedVector<String16, Item> mBag; 404*d57664e9SAndroid Build Coastguard Worker int32_t mNameIndex; 405*d57664e9SAndroid Build Coastguard Worker uint32_t mParentId; 406*d57664e9SAndroid Build Coastguard Worker SourcePos mPos; 407*d57664e9SAndroid Build Coastguard Worker }; 408*d57664e9SAndroid Build Coastguard Worker 409*d57664e9SAndroid Build Coastguard Worker class ConfigList : public RefBase { 410*d57664e9SAndroid Build Coastguard Worker public: ConfigList(const String16 & name,const SourcePos & pos)411*d57664e9SAndroid Build Coastguard Worker ConfigList(const String16& name, const SourcePos& pos) 412*d57664e9SAndroid Build Coastguard Worker : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } ~ConfigList()413*d57664e9SAndroid Build Coastguard Worker virtual ~ConfigList() { } 414*d57664e9SAndroid Build Coastguard Worker getName()415*d57664e9SAndroid Build Coastguard Worker String16 getName() const { return mName; } getPos()416*d57664e9SAndroid Build Coastguard Worker const SourcePos& getPos() const { return mPos; } 417*d57664e9SAndroid Build Coastguard Worker 418*d57664e9SAndroid Build Coastguard Worker void appendComment(const String16& comment, bool onlyIfEmpty = false); getComment()419*d57664e9SAndroid Build Coastguard Worker const String16& getComment() const { return mComment; } 420*d57664e9SAndroid Build Coastguard Worker 421*d57664e9SAndroid Build Coastguard Worker void appendTypeComment(const String16& comment); getTypeComment()422*d57664e9SAndroid Build Coastguard Worker const String16& getTypeComment() const { return mTypeComment; } 423*d57664e9SAndroid Build Coastguard Worker 424*d57664e9SAndroid Build Coastguard Worker // Index of this entry in its Type. getEntryIndex()425*d57664e9SAndroid Build Coastguard Worker int32_t getEntryIndex() const { return mEntryIndex; } setEntryIndex(int32_t index)426*d57664e9SAndroid Build Coastguard Worker void setEntryIndex(int32_t index) { mEntryIndex = index; } 427*d57664e9SAndroid Build Coastguard Worker setPublic(bool pub)428*d57664e9SAndroid Build Coastguard Worker void setPublic(bool pub) { mPublic = pub; } getPublic()429*d57664e9SAndroid Build Coastguard Worker bool getPublic() const { return mPublic; } setPublicSourcePos(const SourcePos & pos)430*d57664e9SAndroid Build Coastguard Worker void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } getPublicSourcePos()431*d57664e9SAndroid Build Coastguard Worker const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } 432*d57664e9SAndroid Build Coastguard Worker addEntry(const ResTable_config & config,const sp<Entry> & entry)433*d57664e9SAndroid Build Coastguard Worker void addEntry(const ResTable_config& config, const sp<Entry>& entry) { 434*d57664e9SAndroid Build Coastguard Worker mEntries.add(config, entry); 435*d57664e9SAndroid Build Coastguard Worker } 436*d57664e9SAndroid Build Coastguard Worker removeEntry(const ResTable_config & config)437*d57664e9SAndroid Build Coastguard Worker void removeEntry(const ResTable_config& config) { 438*d57664e9SAndroid Build Coastguard Worker mEntries.removeItem(config); 439*d57664e9SAndroid Build Coastguard Worker } 440*d57664e9SAndroid Build Coastguard Worker getEntries()441*d57664e9SAndroid Build Coastguard Worker const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } 442*d57664e9SAndroid Build Coastguard Worker private: 443*d57664e9SAndroid Build Coastguard Worker const String16 mName; 444*d57664e9SAndroid Build Coastguard Worker const SourcePos mPos; 445*d57664e9SAndroid Build Coastguard Worker String16 mComment; 446*d57664e9SAndroid Build Coastguard Worker String16 mTypeComment; 447*d57664e9SAndroid Build Coastguard Worker bool mPublic; 448*d57664e9SAndroid Build Coastguard Worker SourcePos mPublicSourcePos; 449*d57664e9SAndroid Build Coastguard Worker int32_t mEntryIndex; 450*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<ConfigDescription, sp<Entry> > mEntries; 451*d57664e9SAndroid Build Coastguard Worker }; 452*d57664e9SAndroid Build Coastguard Worker 453*d57664e9SAndroid Build Coastguard Worker class Public { 454*d57664e9SAndroid Build Coastguard Worker public: Public()455*d57664e9SAndroid Build Coastguard Worker Public() : sourcePos(), ident(0) { } Public(const SourcePos & pos,const String16 & _comment,uint32_t _ident)456*d57664e9SAndroid Build Coastguard Worker Public(const SourcePos& pos, 457*d57664e9SAndroid Build Coastguard Worker const String16& _comment, 458*d57664e9SAndroid Build Coastguard Worker uint32_t _ident) 459*d57664e9SAndroid Build Coastguard Worker : sourcePos(pos), 460*d57664e9SAndroid Build Coastguard Worker comment(_comment), ident(_ident) { } Public(const Public & o)461*d57664e9SAndroid Build Coastguard Worker Public(const Public& o) : sourcePos(o.sourcePos), 462*d57664e9SAndroid Build Coastguard Worker comment(o.comment), ident(o.ident) { } ~Public()463*d57664e9SAndroid Build Coastguard Worker ~Public() { } 464*d57664e9SAndroid Build Coastguard Worker 465*d57664e9SAndroid Build Coastguard Worker Public& operator=(const Public& o) { 466*d57664e9SAndroid Build Coastguard Worker sourcePos = o.sourcePos; 467*d57664e9SAndroid Build Coastguard Worker comment = o.comment; 468*d57664e9SAndroid Build Coastguard Worker ident = o.ident; 469*d57664e9SAndroid Build Coastguard Worker return *this; 470*d57664e9SAndroid Build Coastguard Worker } 471*d57664e9SAndroid Build Coastguard Worker 472*d57664e9SAndroid Build Coastguard Worker SourcePos sourcePos; 473*d57664e9SAndroid Build Coastguard Worker String16 comment; 474*d57664e9SAndroid Build Coastguard Worker uint32_t ident; 475*d57664e9SAndroid Build Coastguard Worker }; 476*d57664e9SAndroid Build Coastguard Worker 477*d57664e9SAndroid Build Coastguard Worker class Type : public RefBase { 478*d57664e9SAndroid Build Coastguard Worker public: Type(const String16 & name,const SourcePos & pos)479*d57664e9SAndroid Build Coastguard Worker Type(const String16& name, const SourcePos& pos) 480*d57664e9SAndroid Build Coastguard Worker : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) 481*d57664e9SAndroid Build Coastguard Worker { } ~Type()482*d57664e9SAndroid Build Coastguard Worker virtual ~Type() { delete mFirstPublicSourcePos; } 483*d57664e9SAndroid Build Coastguard Worker 484*d57664e9SAndroid Build Coastguard Worker status_t addPublic(const SourcePos& pos, 485*d57664e9SAndroid Build Coastguard Worker const String16& name, 486*d57664e9SAndroid Build Coastguard Worker const uint32_t ident); 487*d57664e9SAndroid Build Coastguard Worker 488*d57664e9SAndroid Build Coastguard Worker void canAddEntry(const String16& name); 489*d57664e9SAndroid Build Coastguard Worker getName()490*d57664e9SAndroid Build Coastguard Worker String16 getName() const { return mName; } 491*d57664e9SAndroid Build Coastguard Worker sp<Entry> getEntry(const String16& entry, 492*d57664e9SAndroid Build Coastguard Worker const SourcePos& pos, 493*d57664e9SAndroid Build Coastguard Worker const ResTable_config* config = NULL, 494*d57664e9SAndroid Build Coastguard Worker bool doSetIndex = false, 495*d57664e9SAndroid Build Coastguard Worker bool overlay = false, 496*d57664e9SAndroid Build Coastguard Worker bool autoAddOverlay = false); 497*d57664e9SAndroid Build Coastguard Worker isPublic(const String16 & entry)498*d57664e9SAndroid Build Coastguard Worker bool isPublic(const String16& entry) const { 499*d57664e9SAndroid Build Coastguard Worker return mPublic.indexOfKey(entry) >= 0; 500*d57664e9SAndroid Build Coastguard Worker } 501*d57664e9SAndroid Build Coastguard Worker 502*d57664e9SAndroid Build Coastguard Worker sp<ConfigList> removeEntry(const String16& entry); 503*d57664e9SAndroid Build Coastguard Worker 504*d57664e9SAndroid Build Coastguard Worker SortedVector<ConfigDescription> getUniqueConfigs() const; 505*d57664e9SAndroid Build Coastguard Worker getFirstPublicSourcePos()506*d57664e9SAndroid Build Coastguard Worker const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } 507*d57664e9SAndroid Build Coastguard Worker getPublicIndex()508*d57664e9SAndroid Build Coastguard Worker int32_t getPublicIndex() const { return mPublicIndex; } 509*d57664e9SAndroid Build Coastguard Worker getIndex()510*d57664e9SAndroid Build Coastguard Worker int32_t getIndex() const { return mIndex; } setIndex(int32_t index)511*d57664e9SAndroid Build Coastguard Worker void setIndex(int32_t index) { mIndex = index; } 512*d57664e9SAndroid Build Coastguard Worker 513*d57664e9SAndroid Build Coastguard Worker status_t applyPublicEntryOrder(); 514*d57664e9SAndroid Build Coastguard Worker getConfigs()515*d57664e9SAndroid Build Coastguard Worker const DefaultKeyedVector<String16, sp<ConfigList> >& getConfigs() const { return mConfigs; } getOrderedConfigs()516*d57664e9SAndroid Build Coastguard Worker const Vector<sp<ConfigList> >& getOrderedConfigs() const { return mOrderedConfigs; } getCanAddEntries()517*d57664e9SAndroid Build Coastguard Worker const SortedVector<String16>& getCanAddEntries() const { return mCanAddEntries; } 518*d57664e9SAndroid Build Coastguard Worker getPos()519*d57664e9SAndroid Build Coastguard Worker const SourcePos& getPos() const { return mPos; } 520*d57664e9SAndroid Build Coastguard Worker 521*d57664e9SAndroid Build Coastguard Worker private: 522*d57664e9SAndroid Build Coastguard Worker String16 mName; 523*d57664e9SAndroid Build Coastguard Worker SourcePos* mFirstPublicSourcePos; 524*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, Public> mPublic; 525*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, sp<ConfigList> > mConfigs; 526*d57664e9SAndroid Build Coastguard Worker Vector<sp<ConfigList> > mOrderedConfigs; 527*d57664e9SAndroid Build Coastguard Worker SortedVector<String16> mCanAddEntries; 528*d57664e9SAndroid Build Coastguard Worker int32_t mPublicIndex; 529*d57664e9SAndroid Build Coastguard Worker int32_t mIndex; 530*d57664e9SAndroid Build Coastguard Worker SourcePos mPos; 531*d57664e9SAndroid Build Coastguard Worker }; 532*d57664e9SAndroid Build Coastguard Worker 533*d57664e9SAndroid Build Coastguard Worker class Package : public RefBase { 534*d57664e9SAndroid Build Coastguard Worker public: 535*d57664e9SAndroid Build Coastguard Worker Package(const String16& name, size_t packageId); ~Package()536*d57664e9SAndroid Build Coastguard Worker virtual ~Package() { } 537*d57664e9SAndroid Build Coastguard Worker getName()538*d57664e9SAndroid Build Coastguard Worker String16 getName() const { return mName; } 539*d57664e9SAndroid Build Coastguard Worker sp<Type> getType(const String16& type, 540*d57664e9SAndroid Build Coastguard Worker const SourcePos& pos, 541*d57664e9SAndroid Build Coastguard Worker bool doSetIndex = false); 542*d57664e9SAndroid Build Coastguard Worker getAssignedId()543*d57664e9SAndroid Build Coastguard Worker size_t getAssignedId() const { return mPackageId; } 544*d57664e9SAndroid Build Coastguard Worker getTypeStrings()545*d57664e9SAndroid Build Coastguard Worker const ResStringPool& getTypeStrings() const { return mTypeStrings; } indexOfTypeString(const String16 & s)546*d57664e9SAndroid Build Coastguard Worker uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } getTypeStringsData()547*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile> getTypeStringsData() const { return mTypeStringsData; } 548*d57664e9SAndroid Build Coastguard Worker status_t setTypeStrings(const sp<AaptFile>& data); 549*d57664e9SAndroid Build Coastguard Worker getKeyStrings()550*d57664e9SAndroid Build Coastguard Worker const ResStringPool& getKeyStrings() const { return mKeyStrings; } indexOfKeyString(const String16 & s)551*d57664e9SAndroid Build Coastguard Worker uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } getKeyStringsData()552*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile> getKeyStringsData() const { return mKeyStringsData; } 553*d57664e9SAndroid Build Coastguard Worker status_t setKeyStrings(const sp<AaptFile>& data); 554*d57664e9SAndroid Build Coastguard Worker 555*d57664e9SAndroid Build Coastguard Worker status_t applyPublicTypeOrder(); 556*d57664e9SAndroid Build Coastguard Worker getTypes()557*d57664e9SAndroid Build Coastguard Worker const DefaultKeyedVector<String16, sp<Type> >& getTypes() const { return mTypes; } getOrderedTypes()558*d57664e9SAndroid Build Coastguard Worker const Vector<sp<Type> >& getOrderedTypes() const { return mOrderedTypes; } 559*d57664e9SAndroid Build Coastguard Worker 560*d57664e9SAndroid Build Coastguard Worker void movePrivateAttrs(); 561*d57664e9SAndroid Build Coastguard Worker 562*d57664e9SAndroid Build Coastguard Worker private: 563*d57664e9SAndroid Build Coastguard Worker status_t setStrings(const sp<AaptFile>& data, 564*d57664e9SAndroid Build Coastguard Worker ResStringPool* strings, 565*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, uint32_t>* mappings); 566*d57664e9SAndroid Build Coastguard Worker 567*d57664e9SAndroid Build Coastguard Worker const String16 mName; 568*d57664e9SAndroid Build Coastguard Worker const size_t mPackageId; 569*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, sp<Type> > mTypes; 570*d57664e9SAndroid Build Coastguard Worker Vector<sp<Type> > mOrderedTypes; 571*d57664e9SAndroid Build Coastguard Worker sp<AaptFile> mTypeStringsData; 572*d57664e9SAndroid Build Coastguard Worker sp<AaptFile> mKeyStringsData; 573*d57664e9SAndroid Build Coastguard Worker ResStringPool mTypeStrings; 574*d57664e9SAndroid Build Coastguard Worker ResStringPool mKeyStrings; 575*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, uint32_t> mTypeStringsMapping; 576*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, uint32_t> mKeyStringsMapping; 577*d57664e9SAndroid Build Coastguard Worker }; 578*d57664e9SAndroid Build Coastguard Worker 579*d57664e9SAndroid Build Coastguard Worker void getDensityVaryingResources(KeyedVector<Symbol, Vector<SymbolDefinition> >& resources); 580*d57664e9SAndroid Build Coastguard Worker 581*d57664e9SAndroid Build Coastguard Worker /** 582*d57664e9SAndroid Build Coastguard Worker * Make an attribute with the specified format. If another attribute with the same name but 583*d57664e9SAndroid Build Coastguard Worker * different format exists, this method returns false. If the name is not taken, or if the 584*d57664e9SAndroid Build Coastguard Worker * format is identical, this returns true. 585*d57664e9SAndroid Build Coastguard Worker */ 586*d57664e9SAndroid Build Coastguard Worker bool makeAttribute(const String16& package, 587*d57664e9SAndroid Build Coastguard Worker const String16& name, 588*d57664e9SAndroid Build Coastguard Worker const SourcePos& source, 589*d57664e9SAndroid Build Coastguard Worker int32_t format, 590*d57664e9SAndroid Build Coastguard Worker const String16& comment, 591*d57664e9SAndroid Build Coastguard Worker bool appendComment); 592*d57664e9SAndroid Build Coastguard Worker 593*d57664e9SAndroid Build Coastguard Worker sp<Package> getPackage(const String16& package); 594*d57664e9SAndroid Build Coastguard Worker 595*d57664e9SAndroid Build Coastguard Worker private: 596*d57664e9SAndroid Build Coastguard Worker void writePublicDefinitions(const String16& package, FILE* fp, bool pub); 597*d57664e9SAndroid Build Coastguard Worker sp<Type> getType(const String16& package, 598*d57664e9SAndroid Build Coastguard Worker const String16& type, 599*d57664e9SAndroid Build Coastguard Worker const SourcePos& pos, 600*d57664e9SAndroid Build Coastguard Worker bool doSetIndex = false); 601*d57664e9SAndroid Build Coastguard Worker sp<Entry> getEntry(const String16& package, 602*d57664e9SAndroid Build Coastguard Worker const String16& type, 603*d57664e9SAndroid Build Coastguard Worker const String16& name, 604*d57664e9SAndroid Build Coastguard Worker const SourcePos& pos, 605*d57664e9SAndroid Build Coastguard Worker bool overlay, 606*d57664e9SAndroid Build Coastguard Worker const ResTable_config* config = NULL, 607*d57664e9SAndroid Build Coastguard Worker bool doSetIndex = false); 608*d57664e9SAndroid Build Coastguard Worker sp<const Entry> getEntry(uint32_t resID, 609*d57664e9SAndroid Build Coastguard Worker const ResTable_config* config = NULL) const; 610*d57664e9SAndroid Build Coastguard Worker sp<ConfigList> getConfigList(const String16& package, 611*d57664e9SAndroid Build Coastguard Worker const String16& type, 612*d57664e9SAndroid Build Coastguard Worker const String16& name) const; 613*d57664e9SAndroid Build Coastguard Worker const Item* getItem(uint32_t resID, uint32_t attrID) const; 614*d57664e9SAndroid Build Coastguard Worker bool getItemValue(uint32_t resID, uint32_t attrID, 615*d57664e9SAndroid Build Coastguard Worker Res_value* outValue); 616*d57664e9SAndroid Build Coastguard Worker int getPublicAttributeSdkLevel(uint32_t attrId) const; 617*d57664e9SAndroid Build Coastguard Worker 618*d57664e9SAndroid Build Coastguard Worker status_t processBundleFormatImpl(const Bundle* bundle, 619*d57664e9SAndroid Build Coastguard Worker const String16& resourceName, 620*d57664e9SAndroid Build Coastguard Worker const sp<AaptFile>& file, 621*d57664e9SAndroid Build Coastguard Worker const sp<XMLNode>& parent, 622*d57664e9SAndroid Build Coastguard Worker Vector<sp<XMLNode> >* namespaces); 623*d57664e9SAndroid Build Coastguard Worker 624*d57664e9SAndroid Build Coastguard Worker String16 mAssetsPackage; 625*d57664e9SAndroid Build Coastguard Worker PackageType mPackageType; 626*d57664e9SAndroid Build Coastguard Worker sp<AaptAssets> mAssets; 627*d57664e9SAndroid Build Coastguard Worker uint32_t mTypeIdOffset; 628*d57664e9SAndroid Build Coastguard Worker DefaultKeyedVector<String16, sp<Package> > mPackages; 629*d57664e9SAndroid Build Coastguard Worker Vector<sp<Package> > mOrderedPackages; 630*d57664e9SAndroid Build Coastguard Worker size_t mNumLocal; 631*d57664e9SAndroid Build Coastguard Worker SourcePos mCurrentXmlPos; 632*d57664e9SAndroid Build Coastguard Worker Bundle* mBundle; 633*d57664e9SAndroid Build Coastguard Worker 634*d57664e9SAndroid Build Coastguard Worker // key = string resource name, value = set of locales in which that name is defined 635*d57664e9SAndroid Build Coastguard Worker std::map<String16, std::map<String8, SourcePos>> mLocalizations; 636*d57664e9SAndroid Build Coastguard Worker // set of string resources names that have a default localization 637*d57664e9SAndroid Build Coastguard Worker std::set<String16> mHasDefaultLocalization; 638*d57664e9SAndroid Build Coastguard Worker std::queue<CompileResourceWorkItem> mWorkQueue; 639*d57664e9SAndroid Build Coastguard Worker }; 640*d57664e9SAndroid Build Coastguard Worker 641*d57664e9SAndroid Build Coastguard Worker #endif 642