ResourceTable.h revision beb9e33bfb79847c25aac98e39f3ea620a953ef7
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 Lesinskiclass XMLNode; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass ResourceTable; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskienum { 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_COMMENTS = 1<<0, 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_ASSIGN_ATTRIBUTE_IDS = 1<<1, 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_COMPACT_WHITESPACE = 1<<2, 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_WHITESPACE = 1<<3, 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_RAW_VALUES = 1<<4, 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_UTF8 = 1<<5, 30030f536009b56dbcc23d284541e51562bd9a6ed3Dan Albert 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STANDARD_RESOURCE = 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 36e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistatus_t compileXmlFile(const Bundle* bundle, 37e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptAssets>& assets, 38e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& target, 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* table, 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int options = XML_COMPILE_STANDARD_RESOURCE); 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 43e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistatus_t compileXmlFile(const Bundle* bundle, 44e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptAssets>& assets, 45e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& target, 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& outTarget, 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* table, 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int options = XML_COMPILE_STANDARD_RESOURCE); 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 51e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistatus_t compileXmlFile(const Bundle* bundle, 52e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptAssets>& assets, 53e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<XMLNode>& xmlTree, 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& target, 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* table, 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int options = XML_COMPILE_STANDARD_RESOURCE); 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistatus_t compileResourceFile(Bundle* bundle, 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptAssets>& assets, 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile>& in, 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config& defParams, 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool overwrite, 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceTable* outTable); 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct AccessorCookie 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos sourcePos; 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 attr; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 value; 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski AccessorCookie(const SourcePos&p, const String8& a, const String8& v) 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski :sourcePos(p), 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski attr(a), 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value(v) 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 80e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski// Holds the necessary information to compile the 81e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski// resource. 82e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinskistruct CompileResourceWorkItem { 83e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski String16 resourceName; 84e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski String8 resPath; 85e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski sp<AaptFile> file; 86e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski}; 87e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass ResourceTable : public ResTable::Accessor 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic: 91833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski // The type of package to build. 92833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski enum PackageType { 93833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski App, 94833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski System, 95833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski SharedLibrary, 96833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski AppFeature 97833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski }; 98833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Package; 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Type; 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Entry; 102beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski class ConfigList; 103beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski 104beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski /** 105beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski * Exposed for testing. Determines whether a versioned resource should be generated 106beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski * based on the other available configurations for that resource. 107beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski */ 108beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski static bool shouldGenerateVersionedResource(const sp<ConfigList>& configList, 109beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski const ConfigDescription& sourceConfig, 110beb9e33bfb79847c25aac98e39f3ea620a953ef7Adam Lesinski const int sdkVersionToGenerate); 111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 112833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ResourceTable(Bundle* bundle, const String16& assetsPackage, PackageType type); 113833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 114833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski const String16& getAssetsPackage() const { 115833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski return mAssetsPackage; 116833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski } 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 118e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski /** 119e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * Returns the queue of resources that need to be compiled. 120e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * This is only used for resources that have been generated 121e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * during the compilation phase. If they were just added 122e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * to the AaptAssets, then they may be skipped over 123e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * and would mess up iteration order for the existing 124e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski * resources. 125e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski */ 126030f536009b56dbcc23d284541e51562bd9a6ed3Dan Albert std::queue<CompileResourceWorkItem>& getWorkQueue() { 127e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski return mWorkQueue; 128e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski } 129e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets); 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addPublic(const SourcePos& pos, 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const uint32_t ident); 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addEntry(const SourcePos& pos, 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& value, 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* params = NULL, 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool doSetIndex = false, 146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int32_t format = ResTable_map::TYPE_ANY, 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool overwrite = false); 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t startBag(const SourcePos& pos, 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& bagParent, 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* params = NULL, 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool overlay = false, 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool replace = false, 157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool isId = false); 158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addBag(const SourcePos& pos, 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& bagParent, 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& bagKey, 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& value, 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* params = NULL, 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool replace = false, 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool isId = false, 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const int32_t format = ResTable_map::TYPE_ANY); 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasBagOrEntry(const String16& package, 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name) const; 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasBagOrEntry(const String16& package, 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config& config) const; 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasBagOrEntry(const String16& ref, 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defType = NULL, 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defPackage = NULL); 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool appendComment(const String16& package, 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& comment, 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool onlyIfEmpty = false); 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool appendTypeComment(const String16& package, 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& comment); 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void canAddEntry(const SourcePos& pos, 197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package, const String16& type, const String16& name); 198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t size() const; 200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t numLocalResources() const; 201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool hasResources() const; 202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 20382a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski status_t modifyForCompat(const Bundle* bundle); 204e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski status_t modifyForCompat(const Bundle* bundle, 205e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& resourceName, 206e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<AaptFile>& file, 207e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const sp<XMLNode>& root); 20882a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 20927f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski sp<AaptFile> flatten(Bundle* bundle, const sp<const ResourceFilter>& filter, 21027f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski const bool isBase); 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski static inline uint32_t makeResId(uint32_t packageId, 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t typeId, 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t nameId) 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return nameId | (typeId<<16) | (packageId<<24); 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski static inline uint32_t getResId(const sp<Package>& p, 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<Type>& t, 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t nameId); 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t getResId(const String16& package, 224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool onlyPublic = true) const; 227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t getResId(const String16& ref, 229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defType = NULL, 230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16* defPackage = NULL, 231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const char** outErrorMsg = NULL, 232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool onlyPublic = true) const; 233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski static bool isValidResourceName(const String16& s); 235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool stringToValue(Res_value* outValue, StringPool* pool, 237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& str, 238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool preserveSpaces, bool coerceType, 239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t attrID, 240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16* outStr = NULL, void* accessorCookie = NULL, 242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t attrType = ResTable_map::TYPE_ANY, 243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String8* configTypeName = NULL, 244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ConfigDescription* config = NULL); 245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t assignResourceIds(); 2475892248580859620db90d5ef2e3c2f48531933faAdrian Roos status_t addSymbols(const sp<AaptSymbols>& outSymbols = NULL, 2485892248580859620db90d5ef2e3c2f48531933faAdrian Roos bool skipSymbolsWithoutDefaultLocalization = false); 249a01a9374fd386f3a8773528d7a49bc5315492dffAdam Lesinski void addLocalization(const String16& name, const String8& locale, const SourcePos& src); 2505892248580859620db90d5ef2e3c2f48531933faAdrian Roos void addDefaultLocalization(const String16& name); 251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t validateLocalizations(void); 252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 25327f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski status_t flatten(Bundle* bundle, const sp<const ResourceFilter>& filter, 25427f69f4e06961fdecd1078b2292d764a157e5e1cAdam Lesinski const sp<AaptFile>& dest, const bool isBase); 255de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski status_t flattenLibraryTable(const sp<AaptFile>& dest, const Vector<sp<Package> >& libs); 256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void writePublicDefinitions(const String16& package, FILE* fp); 258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getCustomResource(const String16& package, 260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name) const; 262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getCustomResourceWithCreation(const String16& package, 263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool createIfNeeded); 266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getRemappedPackage(uint32_t origPackage) const; 267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); 268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); 269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); 270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeKeys(uint32_t attrID, Vector<String16>* outKeys); 271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeEnum(uint32_t attrID, 272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const char16_t* name, size_t nameLen, 273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value* outValue); 274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getAttributeFlags(uint32_t attrID, 275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const char16_t* name, size_t nameLen, 276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value* outValue); 277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual uint32_t getAttributeL10N(uint32_t attrID); 278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool getLocalizationSetting(); 280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void reportError(void* accessorCookie, const char* fmt, ...); 281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } 283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Item { 285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) 287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { memset(&parsedValue, 0, sizeof(parsedValue)); } 288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item(const SourcePos& pos, 289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool _isId, 290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& _value, 291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* _style = NULL, 292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format = ResTable_map::TYPE_ANY); 293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item(const Item& o) : sourcePos(o.sourcePos), 294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isId(o.isId), value(o.value), style(o.style), 295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { 296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski memset(&parsedValue, 0, sizeof(parsedValue)); 297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ~Item() { } 299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item& operator=(const Item& o) { 301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourcePos = o.sourcePos; 302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isId = o.isId; 303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = o.value; 304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski style = o.style; 305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski format = o.format; 306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bagKeyId = o.bagKeyId; 307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski parsedValue = o.parsedValue; 308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return *this; 309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos sourcePos; 312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mutable bool isId; 313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 value; 314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<StringPool::entry_style_span> style; 315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format; 316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t bagKeyId; 317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mutable bool evaluating; 318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value parsedValue; 319282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Entry : public RefBase { 322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Entry(const String16& name, const SourcePos& pos) 324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mName(name), mType(TYPE_UNKNOWN), 325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) 326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { } 32782a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 32882a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski Entry(const Entry& entry); 329978ab9d92934b79409638cf220de3002fea8d505Adam Lesinski Entry& operator=(const Entry& entry); 33082a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Entry() { } 332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski enum type { 334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TYPE_UNKNOWN = 0, 335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TYPE_ITEM, 336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TYPE_BAG 337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski type getType() const { return mType; } 341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setParent(const String16& parent) { mParent = parent; } 343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getParent() const { return mParent; } 344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t makeItABag(const SourcePos& sourcePos); 346282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t emptyBag(const SourcePos& sourcePos); 348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setItem(const SourcePos& pos, 350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& value, 351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format = ResTable_map::TYPE_ANY, 353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const bool overwrite = false); 354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addToBag(const SourcePos& pos, 356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& key, const String16& value, 357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<StringPool::entry_style_span>* style = NULL, 358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool replace=false, bool isId = false, 359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t format = ResTable_map::TYPE_ANY); 360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 36182a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski status_t removeFromBag(const String16& key); 36282a2dd8efe48d3a4e04655f01329da857ace4b7dAdam Lesinski 363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Index of the entry's name string in the key pool. 364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getNameIndex() const { return mNameIndex; } 365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setNameIndex(int32_t index) { mNameIndex = index; } 366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } 368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const KeyedVector<String16, Item>& getBag() const { return mBag; } 369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 370282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t generateAttributes(ResourceTable* table, 371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package); 372282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 373282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t assignResourceIds(ResourceTable* table, 374282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& package); 375282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 376282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t prepareFlatten(StringPool* strings, ResourceTable* table, 377282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String8* configTypeName, const ConfigDescription* config); 378282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 379282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t remapStringValue(StringPool* strings); 380282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 381282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ssize_t flatten(Bundle*, const sp<AaptFile>& data, bool isPublic); 382282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 383282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPos() const { return mPos; } 384282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 385282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 386282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mName; 387282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mParent; 388282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski type mType; 389282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Item mItem; 390282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mItemFormat; 391282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski KeyedVector<String16, Item> mBag; 392282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mNameIndex; 393282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t mParentId; 394282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mPos; 395282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 396282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 397282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class ConfigList : public RefBase { 398282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 399282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ConfigList(const String16& name, const SourcePos& pos) 400282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } 401282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~ConfigList() { } 402282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 403282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 404282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPos() const { return mPos; } 405282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 406282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void appendComment(const String16& comment, bool onlyIfEmpty = false); 407282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& getComment() const { return mComment; } 408282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 409282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void appendTypeComment(const String16& comment); 410282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& getTypeComment() const { return mTypeComment; } 411282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 412282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Index of this entry in its Type. 413282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getEntryIndex() const { return mEntryIndex; } 414282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setEntryIndex(int32_t index) { mEntryIndex = index; } 415282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 416282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setPublic(bool pub) { mPublic = pub; } 417282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool getPublic() const { return mPublic; } 418282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } 419282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } 420282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 421282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void addEntry(const ResTable_config& config, const sp<Entry>& entry) { 422282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mEntries.add(config, entry); 423282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 424282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 425282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } 426282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 427282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16 mName; 428282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos mPos; 429282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mComment; 430282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mTypeComment; 431282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool mPublic; 432282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mPublicSourcePos; 433282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mEntryIndex; 434282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<ConfigDescription, sp<Entry> > mEntries; 435282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 436282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 437282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Public { 438282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 439282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public() : sourcePos(), ident(0) { } 440282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public(const SourcePos& pos, 441282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& _comment, 442282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t _ident) 443282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : sourcePos(pos), 444282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski comment(_comment), ident(_ident) { } 445282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public(const Public& o) : sourcePos(o.sourcePos), 446282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski comment(o.comment), ident(o.ident) { } 447282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ~Public() { } 448282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 449282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Public& operator=(const Public& o) { 450282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sourcePos = o.sourcePos; 451282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski comment = o.comment; 452282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ident = o.ident; 453282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return *this; 454282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 455282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 456282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos sourcePos; 457282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 comment; 458282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t ident; 459282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 460282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 461282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Type : public RefBase { 462282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 463282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Type(const String16& name, const SourcePos& pos) 464282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) 465282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski { } 466282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Type() { delete mFirstPublicSourcePos; } 467282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 468282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t addPublic(const SourcePos& pos, 469282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 470282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const uint32_t ident); 471282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 472282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void canAddEntry(const String16& name); 473282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 474282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 475282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Entry> getEntry(const String16& entry, 476282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 477282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* config = NULL, 478282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false, 479282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool overlay = false, 480282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool autoAddOverlay = false); 481282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 4829b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski bool isPublic(const String16& entry) const { 4839b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski return mPublic.indexOfKey(entry) >= 0; 4849b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski } 4859b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 4869b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski sp<ConfigList> removeEntry(const String16& entry); 4879b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 4889b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski SortedVector<ConfigDescription> getUniqueConfigs() const; 4899b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 490282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } 491282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 492282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getPublicIndex() const { return mPublicIndex; } 493282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 494282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t getIndex() const { return mIndex; } 495282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void setIndex(int32_t index) { mIndex = index; } 496282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 497282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t applyPublicEntryOrder(); 498282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 499282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const DefaultKeyedVector<String16, sp<ConfigList> >& getConfigs() const { return mConfigs; } 500282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<sp<ConfigList> >& getOrderedConfigs() const { return mOrderedConfigs; } 501282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SortedVector<String16>& getCanAddEntries() const { return mCanAddEntries; } 502282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 503282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& getPos() const { return mPos; } 5049b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 505282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 506282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mName; 507282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos* mFirstPublicSourcePos; 508282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, Public> mPublic; 509282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, sp<ConfigList> > mConfigs; 510282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<sp<ConfigList> > mOrderedConfigs; 511282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SortedVector<String16> mCanAddEntries; 512282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mPublicIndex; 513282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int32_t mIndex; 514282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mPos; 515282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 516282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 517282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class Package : public RefBase { 518282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 519833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski Package(const String16& name, size_t packageId); 520282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Package() { } 521282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 522282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 getName() const { return mName; } 523282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Type> getType(const String16& type, 524282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 525282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false); 526282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 527833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski size_t getAssignedId() const { return mPackageId; } 528282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 529282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResStringPool& getTypeStrings() const { return mTypeStrings; } 530282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } 531282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile> getTypeStringsData() const { return mTypeStringsData; } 532282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setTypeStrings(const sp<AaptFile>& data); 533282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 534282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResStringPool& getKeyStrings() const { return mKeyStrings; } 535282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } 536282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const sp<AaptFile> getKeyStringsData() const { return mKeyStringsData; } 537282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setKeyStrings(const sp<AaptFile>& data); 538282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 539282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t applyPublicTypeOrder(); 540282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 541282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const DefaultKeyedVector<String16, sp<Type> >& getTypes() const { return mTypes; } 542282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Vector<sp<Type> >& getOrderedTypes() const { return mOrderedTypes; } 543282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 5449b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski void movePrivateAttrs(); 5459b624c186cb6059dfb3ec24bfb6386a0fc17b88cAdam Lesinski 546282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 547282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski status_t setStrings(const sp<AaptFile>& data, 548282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResStringPool* strings, 549282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, uint32_t>* mappings); 550282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 551282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16 mName; 552833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski const size_t mPackageId; 553282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, sp<Type> > mTypes; 554282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<sp<Type> > mOrderedTypes; 555282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AaptFile> mTypeStringsData; 556282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AaptFile> mKeyStringsData; 557282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResStringPool mTypeStrings; 558282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResStringPool mKeyStrings; 559282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, uint32_t> mTypeStringsMapping; 560282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, uint32_t> mKeyStringsMapping; 561282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 562282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 563de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski void getDensityVaryingResources(KeyedVector<Symbol, Vector<SymbolDefinition> >& resources); 564de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 565282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate: 566282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void writePublicDefinitions(const String16& package, FILE* fp, bool pub); 567282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Package> getPackage(const String16& package); 568282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Type> getType(const String16& package, 569282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 570282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 571282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false); 572282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<Entry> getEntry(const String16& package, 573282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& type, 574282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const String16& name, 575282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const SourcePos& pos, 576282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool overlay, 577282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* config = NULL, 578282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool doSetIndex = false); 579282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<const Entry> getEntry(uint32_t resID, 580282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const ResTable_config* config = NULL) const; 581e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski sp<ConfigList> getConfigList(const String16& package, 582e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& type, 583e572c011feabf6319ba836cf5bc4c3baa0ba6a85Adam Lesinski const String16& name) const; 584282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const Item* getItem(uint32_t resID, uint32_t attrID) const; 585282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool getItemValue(uint32_t resID, uint32_t attrID, 586282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Res_value* outValue); 58728994d8d181c286b39811441ce78399576c2d315Adam Lesinski int getPublicAttributeSdkLevel(uint32_t attrId) const; 588282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 589282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 590282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String16 mAssetsPackage; 591833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski PackageType mPackageType; 592282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AaptAssets> mAssets; 593833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski uint32_t mTypeIdOffset; 594282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DefaultKeyedVector<String16, sp<Package> > mPackages; 595282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<sp<Package> > mOrderedPackages; 596282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski size_t mNumLocal; 597282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SourcePos mCurrentXmlPos; 598282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle* mBundle; 599030f536009b56dbcc23d284541e51562bd9a6ed3Dan Albert 600282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // key = string resource name, value = set of locales in which that name is defined 601030f536009b56dbcc23d284541e51562bd9a6ed3Dan Albert std::map<String16, std::map<String8, SourcePos>> mLocalizations; 6025892248580859620db90d5ef2e3c2f48531933faAdrian Roos // set of string resources names that have a default localization 6035892248580859620db90d5ef2e3c2f48531933faAdrian Roos std::set<String16> mHasDefaultLocalization; 604030f536009b56dbcc23d284541e51562bd9a6ed3Dan Albert std::queue<CompileResourceWorkItem> mWorkQueue; 605282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 606282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 607282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif 608