1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Copyright 2006 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Build resource files from raw assets. 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifndef RESOURCE_TABLE_H 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#define RESOURCE_TABLE_H 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <map> 11e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski#include <queue> 12e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski#include <set> 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 14de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "ConfigDescription.h" 15de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "ResourceFilter.h" 16de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "SourcePos.h" 17de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "StringPool.h" 18de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "Symbol.h" 19de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing namespace std; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass XMLNode; 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass ResourceTable; 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskienum { 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_COMMENTS = 1<<0, 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_ASSIGN_ATTRIBUTE_IDS = 1<<1, 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_COMPACT_WHITESPACE = 1<<2, 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_WHITESPACE = 1<<3, 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_RAW_VALUES = 1<<4, 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_UTF8 = 1<<5, 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STANDARD_RESOURCE = 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 38e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistatus_t compileXmlFile(const Bundle* bundle, 39e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptAssets>& assets, 40e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& target, 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* table, 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int options = XML_COMPILE_STANDARD_RESOURCE); 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 45e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistatus_t compileXmlFile(const Bundle* bundle, 46e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptAssets>& assets, 47e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& target, 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& outTarget, 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* table, 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int options = XML_COMPILE_STANDARD_RESOURCE); 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 53e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistatus_t compileXmlFile(const Bundle* bundle, 54e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptAssets>& assets, 55e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<XMLNode>& xmlTree, 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& target, 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* table, 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int options = XML_COMPILE_STANDARD_RESOURCE); 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistatus_t compileResourceFile(Bundle* bundle, 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptAssets>& assets, 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& in, 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config& defParams, 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool overwrite, 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* outTable); 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct AccessorCookie 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos sourcePos; 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 attr; 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 value; 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski AccessorCookie(const SourcePos&p, const String8& a, const String8& v) 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski :sourcePos(p), 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski attr(a), 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value(v) 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 82e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski// Holds the necessary information to compile the 83e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski// resource. 84e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistruct CompileResourceWorkItem { 85e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski String16 resourceName; 86e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski String8 resPath; 87e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski sp<AaptFile> file; 88e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski}; 89e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass ResourceTable : public ResTable::Accessor 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic: 93833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski // The type of package to build. 94833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski enum PackageType { 95833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski App, 96833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski System, 97833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski SharedLibrary, 98833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski AppFeature 99833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski }; 100833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Package; 102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Type; 103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Entry; 104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 105833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ResourceTable(Bundle* bundle, const String16& assetsPackage, PackageType type); 106833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 107833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski const String16& getAssetsPackage() const { 108833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski return mAssetsPackage; 109833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski } 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 111e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski /** 112e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * Returns the queue of resources that need to be compiled. 113e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * This is only used for resources that have been generated 114e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * during the compilation phase. If they were just added 115e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * to the AaptAssets, then they may be skipped over 116e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * and would mess up iteration order for the existing 117e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * resources. 118e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski */ 119e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski queue<CompileResourceWorkItem>& getWorkQueue() { 120e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski return mWorkQueue; 121e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski } 122e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski 123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets); 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addPublic(const SourcePos& pos, 126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const uint32_t ident); 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addEntry(const SourcePos& pos, 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& value, 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* params = NULL, 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool doSetIndex = false, 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int32_t format = ResTable_map::TYPE_ANY, 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool overwrite = false); 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t startBag(const SourcePos& pos, 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& bagParent, 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* params = NULL, 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool overlay = false, 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool replace = false, 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool isId = false); 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addBag(const SourcePos& pos, 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& bagParent, 157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& bagKey, 158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& value, 159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* params = NULL, 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool replace = false, 162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool isId = false, 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int32_t format = ResTable_map::TYPE_ANY); 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasBagOrEntry(const String16& package, 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name) const; 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasBagOrEntry(const String16& package, 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config& config) const; 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasBagOrEntry(const String16& ref, 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defType = NULL, 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defPackage = NULL); 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool appendComment(const String16& package, 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& comment, 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool onlyIfEmpty = false); 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool appendTypeComment(const String16& package, 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& comment); 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void canAddEntry(const SourcePos& pos, 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, const String16& type, const String16& name); 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t size() const; 193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t numLocalResources() const; 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasResources() const; 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 19682a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski status_t modifyForCompat(const Bundle* bundle); 197e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski status_t modifyForCompat(const Bundle* bundle, 198e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 199e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptFile>& file, 200e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<XMLNode>& root); 20182a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 20227f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski sp<AaptFile> flatten(Bundle* bundle, const sp<const ResourceFilter>& filter, 20327f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski const bool isBase); 204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski static inline uint32_t makeResId(uint32_t packageId, 206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t typeId, 207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t nameId) 208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { 209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return nameId | (typeId<<16) | (packageId<<24); 210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski static inline uint32_t getResId(const sp<Package>& p, 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<Type>& t, 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t nameId); 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t getResId(const String16& package, 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool onlyPublic = true) const; 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t getResId(const String16& ref, 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defType = NULL, 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defPackage = NULL, 224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const char** outErrorMsg = NULL, 225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool onlyPublic = true) const; 226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski static bool isValidResourceName(const String16& s); 228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool stringToValue(Res_value* outValue, StringPool* pool, 230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& str, 231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool preserveSpaces, bool coerceType, 232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t attrID, 233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16* outStr = NULL, void* accessorCookie = NULL, 235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t attrType = ResTable_map::TYPE_ANY, 236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String8* configTypeName = NULL, 237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ConfigDescription* config = NULL); 238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t assignResourceIds(); 240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addSymbols(const sp<AaptSymbols>& outSymbols = NULL); 241a01a9374fd386f3a8773528d7a49bc5315492dffAdam Lesinski void addLocalization(const String16& name, const String8& locale, const SourcePos& src); 242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t validateLocalizations(void); 243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 24427f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski status_t flatten(Bundle* bundle, const sp<const ResourceFilter>& filter, 24527f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski const sp<AaptFile>& dest, const bool isBase); 246de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski status_t flattenLibraryTable(const sp<AaptFile>& dest, const Vector<sp<Package> >& libs); 247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void writePublicDefinitions(const String16& package, FILE* fp); 249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getCustomResource(const String16& package, 251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name) const; 253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getCustomResourceWithCreation(const String16& package, 254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool createIfNeeded); 257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getRemappedPackage(uint32_t origPackage) const; 258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); 259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); 260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); 261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeKeys(uint32_t attrID, Vector<String16>* outKeys); 262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeEnum(uint32_t attrID, 263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const char16_t* name, size_t nameLen, 264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value* outValue); 265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeFlags(uint32_t attrID, 266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const char16_t* name, size_t nameLen, 267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value* outValue); 268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getAttributeL10N(uint32_t attrID); 269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getLocalizationSetting(); 271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void reportError(void* accessorCookie, const char* fmt, ...); 272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } 274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Item { 276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) 278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { memset(&parsedValue, 0, sizeof(parsedValue)); } 279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item(const SourcePos& pos, 280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool _isId, 281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& _value, 282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* _style = NULL, 283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format = ResTable_map::TYPE_ANY); 284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item(const Item& o) : sourcePos(o.sourcePos), 285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isId(o.isId), value(o.value), style(o.style), 286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { 287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski memset(&parsedValue, 0, sizeof(parsedValue)); 288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ~Item() { } 290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item& operator=(const Item& o) { 292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourcePos = o.sourcePos; 293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isId = o.isId; 294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = o.value; 295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski style = o.style; 296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski format = o.format; 297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bagKeyId = o.bagKeyId; 298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski parsedValue = o.parsedValue; 299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return *this; 300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos sourcePos; 303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mutable bool isId; 304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 value; 305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<StringPool::entry_style_span> style; 306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format; 307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t bagKeyId; 308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mutable bool evaluating; 309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value parsedValue; 310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Entry : public RefBase { 313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Entry(const String16& name, const SourcePos& pos) 315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mName(name), mType(TYPE_UNKNOWN), 316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) 317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { } 31882a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 31982a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski Entry(const Entry& entry); 320978ab9d92934b79409638cf220de3002fea8d505Adam Lesinski Entry& operator=(const Entry& entry); 32182a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Entry() { } 323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski enum type { 325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TYPE_UNKNOWN = 0, 326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TYPE_ITEM, 327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TYPE_BAG 328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 329282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski type getType() const { return mType; } 332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setParent(const String16& parent) { mParent = parent; } 334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getParent() const { return mParent; } 335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t makeItABag(const SourcePos& sourcePos); 337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t emptyBag(const SourcePos& sourcePos); 339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setItem(const SourcePos& pos, 341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& value, 342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format = ResTable_map::TYPE_ANY, 344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool overwrite = false); 345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 346282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addToBag(const SourcePos& pos, 347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& key, const String16& value, 348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool replace=false, bool isId = false, 350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format = ResTable_map::TYPE_ANY); 351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 35282a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski status_t removeFromBag(const String16& key); 35382a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Index of the entry's name string in the key pool. 355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getNameIndex() const { return mNameIndex; } 356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setNameIndex(int32_t index) { mNameIndex = index; } 357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } 359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const KeyedVector<String16, Item>& getBag() const { return mBag; } 360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t generateAttributes(ResourceTable* table, 362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package); 363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t assignResourceIds(ResourceTable* table, 365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package); 366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t prepareFlatten(StringPool* strings, ResourceTable* table, 368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String8* configTypeName, const ConfigDescription* config); 369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 370282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t remapStringValue(StringPool* strings); 371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 372282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ssize_t flatten(Bundle*, const sp<AaptFile>& data, bool isPublic); 373282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 374282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPos() const { return mPos; } 375282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 376282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 377282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mName; 378282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mParent; 379282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski type mType; 380282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item mItem; 381282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mItemFormat; 382282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski KeyedVector<String16, Item> mBag; 383282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mNameIndex; 384282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t mParentId; 385282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mPos; 386282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 387282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 388282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class ConfigList : public RefBase { 389282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 390282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ConfigList(const String16& name, const SourcePos& pos) 391282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } 392282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~ConfigList() { } 393282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 394282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 395282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPos() const { return mPos; } 396282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 397282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void appendComment(const String16& comment, bool onlyIfEmpty = false); 398282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& getComment() const { return mComment; } 399282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 400282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void appendTypeComment(const String16& comment); 401282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& getTypeComment() const { return mTypeComment; } 402282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 403282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Index of this entry in its Type. 404282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getEntryIndex() const { return mEntryIndex; } 405282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setEntryIndex(int32_t index) { mEntryIndex = index; } 406282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 407282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setPublic(bool pub) { mPublic = pub; } 408282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool getPublic() const { return mPublic; } 409282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } 410282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } 411282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 412282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void addEntry(const ResTable_config& config, const sp<Entry>& entry) { 413282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mEntries.add(config, entry); 414282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 415282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 416282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } 417282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 418282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16 mName; 419282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos mPos; 420282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mComment; 421282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mTypeComment; 422282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool mPublic; 423282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mPublicSourcePos; 424282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mEntryIndex; 425282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<ConfigDescription, sp<Entry> > mEntries; 426282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 427282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 428282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Public { 429282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 430282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public() : sourcePos(), ident(0) { } 431282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public(const SourcePos& pos, 432282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& _comment, 433282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t _ident) 434282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : sourcePos(pos), 435282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski comment(_comment), ident(_ident) { } 436282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public(const Public& o) : sourcePos(o.sourcePos), 437282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski comment(o.comment), ident(o.ident) { } 438282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ~Public() { } 439282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 440282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public& operator=(const Public& o) { 441282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourcePos = o.sourcePos; 442282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski comment = o.comment; 443282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ident = o.ident; 444282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return *this; 445282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 446282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 447282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos sourcePos; 448282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 comment; 449282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t ident; 450282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 451282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 452282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Type : public RefBase { 453282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 454282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type(const String16& name, const SourcePos& pos) 455282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) 456282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { } 457282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Type() { delete mFirstPublicSourcePos; } 458282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 459282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addPublic(const SourcePos& pos, 460282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 461282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const uint32_t ident); 462282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 463282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void canAddEntry(const String16& name); 464282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 465282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 466282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Entry> getEntry(const String16& entry, 467282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 468282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* config = NULL, 469282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false, 470282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool overlay = false, 471282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool autoAddOverlay = false); 472282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 4739b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski bool isPublic(const String16& entry) const { 4749b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski return mPublic.indexOfKey(entry) >= 0; 4759b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski } 4769b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 4779b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski sp<ConfigList> removeEntry(const String16& entry); 4789b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 4799b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski SortedVector<ConfigDescription> getUniqueConfigs() const; 4809b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 481282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } 482282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 483282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getPublicIndex() const { return mPublicIndex; } 484282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 485282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getIndex() const { return mIndex; } 486282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setIndex(int32_t index) { mIndex = index; } 487282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 488282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t applyPublicEntryOrder(); 489282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 490282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const DefaultKeyedVector<String16, sp<ConfigList> >& getConfigs() const { return mConfigs; } 491282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<sp<ConfigList> >& getOrderedConfigs() const { return mOrderedConfigs; } 492282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SortedVector<String16>& getCanAddEntries() const { return mCanAddEntries; } 493282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 494282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPos() const { return mPos; } 4959b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 496282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 497282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mName; 498282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos* mFirstPublicSourcePos; 499282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, Public> mPublic; 500282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, sp<ConfigList> > mConfigs; 501282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<sp<ConfigList> > mOrderedConfigs; 502282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SortedVector<String16> mCanAddEntries; 503282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mPublicIndex; 504282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mIndex; 505282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mPos; 506282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 507282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 508282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Package : public RefBase { 509282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 510833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski Package(const String16& name, size_t packageId); 511282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Package() { } 512282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 513282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 514282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Type> getType(const String16& type, 515282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 516282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false); 517282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 518833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski size_t getAssignedId() const { return mPackageId; } 519282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 520282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResStringPool& getTypeStrings() const { return mTypeStrings; } 521282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } 522282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile> getTypeStringsData() const { return mTypeStringsData; } 523282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setTypeStrings(const sp<AaptFile>& data); 524282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 525282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResStringPool& getKeyStrings() const { return mKeyStrings; } 526282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } 527282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile> getKeyStringsData() const { return mKeyStringsData; } 528282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setKeyStrings(const sp<AaptFile>& data); 529282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 530282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t applyPublicTypeOrder(); 531282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 532282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const DefaultKeyedVector<String16, sp<Type> >& getTypes() const { return mTypes; } 533282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<sp<Type> >& getOrderedTypes() const { return mOrderedTypes; } 534282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 5359b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski void movePrivateAttrs(); 5369b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 537282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 538282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setStrings(const sp<AaptFile>& data, 539282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResStringPool* strings, 540282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, uint32_t>* mappings); 541282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 542282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16 mName; 543833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski const size_t mPackageId; 544282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, sp<Type> > mTypes; 545282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<sp<Type> > mOrderedTypes; 546282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AaptFile> mTypeStringsData; 547282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AaptFile> mKeyStringsData; 548282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResStringPool mTypeStrings; 549282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResStringPool mKeyStrings; 550282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, uint32_t> mTypeStringsMapping; 551282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, uint32_t> mKeyStringsMapping; 552282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 553282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 554de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski void getDensityVaryingResources(KeyedVector<Symbol, Vector<SymbolDefinition> >& resources); 555de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 556282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate: 557282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void writePublicDefinitions(const String16& package, FILE* fp, bool pub); 558282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Package> getPackage(const String16& package); 559282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Type> getType(const String16& package, 560282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 561282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 562282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false); 563282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Entry> getEntry(const String16& package, 564282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 565282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 566282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 567282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool overlay, 568282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* config = NULL, 569282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false); 570282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<const Entry> getEntry(uint32_t resID, 571282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* config = NULL) const; 572e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski sp<ConfigList> getConfigList(const String16& package, 573e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& type, 574e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& name) const; 575282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Item* getItem(uint32_t resID, uint32_t attrID) const; 576282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool getItemValue(uint32_t resID, uint32_t attrID, 577282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value* outValue); 57828994d8d181c286b39811441ce78399576c2d315Adam Lesinski int getPublicAttributeSdkLevel(uint32_t attrId) const; 579282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 580282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 581282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mAssetsPackage; 582833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski PackageType mPackageType; 583282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AaptAssets> mAssets; 584833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski uint32_t mTypeIdOffset; 585282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, sp<Package> > mPackages; 586282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<sp<Package> > mOrderedPackages; 587282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t mNumLocal; 588282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mCurrentXmlPos; 589282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle* mBundle; 590282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 591282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // key = string resource name, value = set of locales in which that name is defined 592a01a9374fd386f3a8773528d7a49bc5315492dffAdam Lesinski map<String16, map<String8, SourcePos> > mLocalizations; 593e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski queue<CompileResourceWorkItem> mWorkQueue; 594282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 595282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 596282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif 597