ResourceTable.h revision 62da8461ed5317fe78ae5e3793662694e7fc99a3
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2006 The Android Open Source Project 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Build resource files from raw assets. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef RESOURCE_TABLE_H 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define RESOURCE_TABLE_H 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "StringPool.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "SourcePos.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using namespace std; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class XMLNode; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceTable; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum { 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) XML_COMPILE_STRIP_COMMENTS = 1<<0, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_COMPILE_ASSIGN_ATTRIBUTE_IDS = 1<<1, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_COMPILE_COMPACT_WHITESPACE = 1<<2, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_COMPILE_STRIP_WHITESPACE = 1<<3, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_COMPILE_STRIP_RAW_VALUES = 1<<4, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_COMPILE_STANDARD_RESOURCE = 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)status_t compileXmlFile(const sp<AaptAssets>& assets, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sp<AaptFile>& target, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceTable* table, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int options = XML_COMPILE_STANDARD_RESOURCE); 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)status_t compileXmlFile(const sp<AaptAssets>& assets, 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const sp<XMLNode>& xmlTree, 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const sp<AaptFile>& target, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceTable* table, 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int options = XML_COMPILE_STANDARD_RESOURCE); 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)status_t compileResourceFile(Bundle* bundle, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const sp<AaptAssets>& assets, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sp<AaptFile>& in, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ResTable_config& defParams, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool overwrite, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceTable* outTable); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct AccessorCookie 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SourcePos sourcePos; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String8 attr; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String8 value; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccessorCookie(const SourcePos&p, const String8& a, const String8& v) 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch :sourcePos(p), 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attr(a), 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value(v) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ResourceTable : public ResTable::Accessor 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch{ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) class Package; 698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) class Type; 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) class Entry; 718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ResourceTable(Bundle* bundle, const String16& assetsPackage); 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets); 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) status_t addPublic(const SourcePos& pos, 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const String16& package, 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const String16& type, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const String16& name, 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const uint32_t ident); 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) status_t addEntry(const SourcePos& pos, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& package, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& value, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Vector<StringPool::entry_style_span>* style = NULL, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ResTable_config* params = NULL, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool doSetIndex = false, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int32_t format = ResTable_map::TYPE_ANY, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool overwrite = false); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t startBag(const SourcePos& pos, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& package, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const String16& name, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& bagParent, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ResTable_config* params = NULL, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool replace = false, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isId = false); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t addBag(const SourcePos& pos, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& package, 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const String16& type, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& bagParent, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& bagKey, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& value, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Vector<StringPool::entry_style_span>* style = NULL, 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ResTable_config* params = NULL, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool replace = false, 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool isId = false, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int32_t format = ResTable_map::TYPE_ANY); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hasBagOrEntry(const String16& package, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name) const; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hasBagOrEntry(const String16& ref, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const String16* defType = NULL, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16* defPackage = NULL); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool appendComment(const String16& package, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& comment, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool onlyIfEmpty = false); 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool appendTypeComment(const String16& package, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& comment); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size() const; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t numLocalResources() const; 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool hasResources() const; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<AaptFile> flatten(Bundle*); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static inline uint32_t makeResId(uint32_t packageId, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t typeId, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t nameId) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return nameId | (typeId<<16) | (packageId<<24); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static inline uint32_t getResId(const sp<Package>& p, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sp<Type>& t, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t nameId); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t getResId(const String16& package, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool onlyPublic = false) const; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t getResId(const String16& ref, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16* defType = NULL, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16* defPackage = NULL, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char** outErrorMsg = NULL, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool onlyPublic = false) const; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool isValidResourceName(const String16& s); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool stringToValue(Res_value* outValue, StringPool* pool, 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const String16& str, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool preserveSpaces, bool coerceType, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t attrID, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Vector<StringPool::entry_style_span>* style = NULL, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16* outStr = NULL, void* accessorCookie = NULL, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t attrType = ResTable_map::TYPE_ANY); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t assignResourceIds(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t addSymbols(const sp<AaptSymbols>& outSymbols = NULL); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void addLocalization(const String16& name, const String8& locale); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t validateLocalizations(void); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t flatten(Bundle*, const sp<AaptFile>& dest); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void writePublicDefinitions(const String16& package, FILE* fp); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t getCustomResource(const String16& package, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name) const; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t getCustomResourceWithCreation(const String16& package, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& type, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool createIfNeeded); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t getRemappedPackage(uint32_t origPackage) const; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool getAttributeKeys(uint32_t attrID, Vector<String16>* outKeys); 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool getAttributeEnum(uint32_t attrID, 194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const char16_t* name, size_t nameLen, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Res_value* outValue); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool getAttributeFlags(uint32_t attrID, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char16_t* name, size_t nameLen, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Res_value* outValue); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t getAttributeL10N(uint32_t attrID); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool getLocalizationSetting(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void reportError(void* accessorCookie, const char* fmt, ...); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Item { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { memset(&parsedValue, 0, sizeof(parsedValue)); } 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Item(const SourcePos& pos, 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool _isId, 212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const String16& _value, 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const Vector<StringPool::entry_style_span>* _style = NULL, 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int32_t format = ResTable_map::TYPE_ANY); 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Item(const Item& o) : sourcePos(o.sourcePos), 216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) isId(o.isId), value(o.value), style(o.style), 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) memset(&parsedValue, 0, sizeof(parsedValue)); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ~Item() { } 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Item& operator=(const Item& o) { 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sourcePos = o.sourcePos; 224c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch isId = o.isId; 225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch value = o.value; 226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch style = o.style; 227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch format = o.format; 228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bagKeyId = o.bagKeyId; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsedValue = o.parsedValue; 230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return *this; 231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 232effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SourcePos sourcePos; 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mutable bool isId; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 value; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Vector<StringPool::entry_style_span> style; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t format; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t bagKeyId; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mutable bool evaluating; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Res_value parsedValue; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Entry : public RefBase { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Entry(const String16& name, const SourcePos& pos) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : mName(name), mType(TYPE_UNKNOWN), 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Entry() { } 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum type { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_UNKNOWN = 0, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_ITEM, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_BAG 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 getName() const { return mName; } 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type getType() const { return mType; } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setParent(const String16& parent) { mParent = parent; } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 getParent() const { return mParent; } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t makeItABag(const SourcePos& sourcePos); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t emptyBag(const SourcePos& sourcePos); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t setItem(const SourcePos& pos, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& value, 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Vector<StringPool::entry_style_span>* style = NULL, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t format = ResTable_map::TYPE_ANY, 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool overwrite = false); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t addToBag(const SourcePos& pos, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& key, const String16& value, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Vector<StringPool::entry_style_span>* style = NULL, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool replace=false, bool isId = false, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t format = ResTable_map::TYPE_ANY); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Index of the entry's name string in the key pool. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t getNameIndex() const { return mNameIndex; } 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setNameIndex(int32_t index) { mNameIndex = index; } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } 284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const KeyedVector<String16, Item>& getBag() const { return mBag; } 285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch status_t generateAttributes(ResourceTable* table, 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const String16& package); 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch status_t assignResourceIds(ResourceTable* table, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& package); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t prepareFlatten(StringPool* strings, ResourceTable* table); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ssize_t flatten(Bundle*, const sp<AaptFile>& data, bool isPublic); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SourcePos& getPos() const { return mPos; } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 mName; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 mParent; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type mType; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Item mItem; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t mItemFormat; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyedVector<String16, Item> mBag; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t mNameIndex; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t mParentId; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SourcePos mPos; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct ConfigDescription : public ResTable_config { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigDescription() { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(this, 0, sizeof(*this)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = sizeof(ResTable_config); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigDescription(const ResTable_config&o) { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *static_cast<ResTable_config*>(this) = o; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = sizeof(ResTable_config); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigDescription(const ConfigDescription&o) { 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *static_cast<ResTable_config*>(this) = o; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigDescription& operator=(const ResTable_config& o) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *static_cast<ResTable_config*>(this) = o; 325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size = sizeof(ResTable_config); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigDescription& operator=(const ConfigDescription& o) { 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *static_cast<ResTable_config*>(this) = o; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool operator<(const ConfigDescription& o) const { return compare(o) < 0; } 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool operator<=(const ConfigDescription& o) const { return compare(o) <= 0; } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool operator==(const ConfigDescription& o) const { return compare(o) == 0; } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool operator!=(const ConfigDescription& o) const { return compare(o) != 0; } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool operator>=(const ConfigDescription& o) const { return compare(o) >= 0; } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool operator>(const ConfigDescription& o) const { return compare(o) > 0; } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ConfigList : public RefBase { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigList(const String16& name, const SourcePos& pos) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ConfigList() { } 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 getName() const { return mName; } 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SourcePos& getPos() const { return mPos; } 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void appendComment(const String16& comment, bool onlyIfEmpty = false); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& getComment() const { return mComment; } 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void appendTypeComment(const String16& comment); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& getTypeComment() const { return mTypeComment; } 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Index of this entry in its Type. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t getEntryIndex() const { return mEntryIndex; } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setEntryIndex(int32_t index) { mEntryIndex = index; } 3598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void setPublic(bool pub) { mPublic = pub; } 3618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool getPublic() const { return mPublic; } 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void addEntry(const ResTable_config& config, const sp<Entry>& entry) { 3668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) mEntries.add(config, entry); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const DefaultKeyedVector<ConfigDescription, sp<Entry> >& getEntries() const { return mEntries; } 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 3718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const String16 mName; 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const SourcePos mPos; 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) String16 mComment; 3748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) String16 mTypeComment; 3758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool mPublic; 3768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SourcePos mPublicSourcePos; 3778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int32_t mEntryIndex; 3788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DefaultKeyedVector<ConfigDescription, sp<Entry> > mEntries; 3798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) }; 3808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) class Public { 3828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 3838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Public() : sourcePos(), ident(0) { } 3848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Public(const SourcePos& pos, 3858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const String16& _comment, 3868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t _ident) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : sourcePos(pos), 3888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) comment(_comment), ident(_ident) { } 3898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Public(const Public& o) : sourcePos(o.sourcePos), 3908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) comment(o.comment), ident(o.ident) { } 3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ~Public() { } 3928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Public& operator=(const Public& o) { 3948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) sourcePos = o.sourcePos; 3958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) comment = o.comment; 3968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ident = o.ident; 3978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return *this; 3988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SourcePos sourcePos; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 comment; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t ident; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Type : public RefBase { 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type(const String16& name, const SourcePos& pos) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Type() { delete mFirstPublicSourcePos; } 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t addPublic(const SourcePos& pos, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const String16& name, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32_t ident); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String16 getName() const { return mName; } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<Entry> getEntry(const String16& entry, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SourcePos& pos, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ResTable_config* config = NULL, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool doSetIndex = false); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t getPublicIndex() const { return mPublicIndex; } 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int32_t getIndex() const { return mIndex; } 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setIndex(int32_t index) { mIndex = index; } 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch status_t applyPublicEntryOrder(); 43058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 43168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const SortedVector<ConfigDescription>& getUniqueConfigs() const { return mUniqueConfigs; } 432f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 43368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const DefaultKeyedVector<String16, sp<ConfigList> >& getConfigs() const { return mConfigs; } 43468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Vector<sp<ConfigList> >& getOrderedConfigs() const { return mOrderedConfigs; } 43568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 43668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const SourcePos& getPos() const { return mPos; } 43768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 43868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) String16 mName; 43968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SourcePos* mFirstPublicSourcePos; 44068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DefaultKeyedVector<String16, Public> mPublic; 44168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SortedVector<ConfigDescription> mUniqueConfigs; 44268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DefaultKeyedVector<String16, sp<ConfigList> > mConfigs; 44368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Vector<sp<ConfigList> > mOrderedConfigs; 44468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int32_t mPublicIndex; 44568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int32_t mIndex; 44668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SourcePos mPos; 44768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) }; 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) class Package : public RefBase { 450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 451424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Package(const String16& name, ssize_t includedId=-1); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Package() { } 45323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 45423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) String16 getName() const { return mName; } 45523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sp<Type> getType(const String16& type, 45623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const SourcePos& pos, 45723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool doSetIndex = false); 45823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 45923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ssize_t getAssignedId() const { return mIncludedId; } 46023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ResStringPool& getTypeStrings() const { return mTypeStrings; } 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } 46323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const sp<AaptFile> getTypeStringsData() const { return mTypeStringsData; } 46423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) status_t setTypeStrings(const sp<AaptFile>& data); 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ResStringPool& getKeyStrings() const { return mKeyStrings; } 46723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } 46823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const sp<AaptFile> getKeyStringsData() const { return mKeyStringsData; } 46923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) status_t setKeyStrings(const sp<AaptFile>& data); 47023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 47123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) status_t applyPublicTypeOrder(); 47223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 47323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const DefaultKeyedVector<String16, sp<Type> >& getTypes() const { return mTypes; } 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Vector<sp<Type> >& getOrderedTypes() const { return mOrderedTypes; } 475424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 477424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) status_t setStrings(const sp<AaptFile>& data, 478424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ResStringPool* strings, 479424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DefaultKeyedVector<String16, uint32_t>* mappings); 480424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 481424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const String16 mName; 482424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const ssize_t mIncludedId; 483424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DefaultKeyedVector<String16, sp<Type> > mTypes; 484424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Vector<sp<Type> > mOrderedTypes; 485424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sp<AaptFile> mTypeStringsData; 486424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sp<AaptFile> mKeyStringsData; 487424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ResStringPool mTypeStrings; 488424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ResStringPool mKeyStrings; 489424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DefaultKeyedVector<String16, uint32_t> mTypeStringsMapping; 490424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DefaultKeyedVector<String16, uint32_t> mKeyStringsMapping; 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 493424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)private: 494424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void writePublicDefinitions(const String16& package, FILE* fp, bool pub); 495424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sp<Package> getPackage(const String16& package); 496424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sp<Type> getType(const String16& package, 497424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const String16& type, 498424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const SourcePos& pos, 499424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool doSetIndex = false); 500424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sp<Entry> getEntry(const String16& package, 501424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const String16& type, 502424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const String16& name, 5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const SourcePos& pos, 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ResTable_config* config = NULL, 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool doSetIndex = false); 506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sp<const Entry> getEntry(uint32_t resID, 507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ResTable_config* config = NULL) const; 508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const Item* getItem(uint32_t resID, uint32_t attrID) const; 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool getItemValue(uint32_t resID, uint32_t attrID, 510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Res_value* outValue); 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) String16 mAssetsPackage; 514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sp<AaptAssets> mAssets; 515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DefaultKeyedVector<String16, sp<Package> > mPackages; 516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Vector<sp<Package> > mOrderedPackages; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t mNextPackageId; 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mHaveAppPackage; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool mIsAppPackage; 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t mNumLocal; 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SourcePos mCurrentXmlPos; 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Bundle* mBundle; 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // key = string resource name, value = set of locales in which that name is defined 525868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) map<String16, set<String8> > mLocalizations; 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceFilter 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceFilter() : mData(), mContainsPseudo(false) {} 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t parse(const char* arg); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool match(int axis, uint32_t value); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool match(const ResTable_config& config); 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) inline bool containsPseudo() { return mContainsPseudo; } 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private: 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyedVector<int,SortedVector<uint32_t> > mData; 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mContainsPseudo; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)