AaptAssets.h revision 93e462b79d6896da10e15e74c5aec6beb098dddf
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Copyright 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Information about assets being operated on. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __AAPT_ASSETS_H 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __AAPT_ASSETS_H 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/AssetManager.h> 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/KeyedVector.h> 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/String8.h> 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/ResourceTypes.h> 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/SortedVector.h> 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/String8.h> 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Vector.h> 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/RefBase.h> 1855e3d60da5626752ffe1d15150d35ccb8fa644e7Mathias Agopian#include "ZipFile.h" 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Bundle.h" 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SourcePos.h" 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool valid_symbol_name(const String8& str); 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_NONE = 0, 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_MCC = 1, 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_MNC, 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_LANGUAGE, 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_REGION, 33c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn AXIS_SCREENLAYOUTSIZE, 34c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn AXIS_SCREENLAYOUTLONG, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_ORIENTATION, 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_DENSITY, 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_TOUCHSCREEN, 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_KEYSHIDDEN, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_KEYBOARD, 4093e462b79d6896da10e15e74c5aec6beb098dddfDianne Hackborn AXIS_NAVHIDDEN, 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_NAVIGATION, 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_SCREENSIZE, 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_VERSION 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This structure contains a specific variation of a single file out 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of all the variations it can have that we can have. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct AaptGroupEntry 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptGroupEntry() { } 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptGroupEntry(const String8& _locale, const String8& _vendor) 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : locale(_locale), vendor(_vendor) { } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mcc; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mnc; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 locale; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 vendor; 61c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn String8 screenLayoutSize; 62c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn String8 screenLayoutLong; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 orientation; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 density; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 touchscreen; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 keysHidden; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 keyboard; 6893e462b79d6896da10e15e74c5aec6beb098dddfDianne Hackborn String8 navHidden; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 navigation; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 screenSize; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 version; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool initFromDirName(const char* dir, String8* resType); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static status_t parseNamePart(const String8& part, int* axis, uint32_t* value); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getMccName(const char* name, ResTable_config* out = NULL); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getMncName(const char* name, ResTable_config* out = NULL); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getLocaleName(const char* name, ResTable_config* out = NULL); 80c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn static bool getScreenLayoutSizeName(const char* name, ResTable_config* out = NULL); 81c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn static bool getScreenLayoutLongName(const char* name, ResTable_config* out = NULL); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getOrientationName(const char* name, ResTable_config* out = NULL); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getDensityName(const char* name, ResTable_config* out = NULL); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getTouchscreenName(const char* name, ResTable_config* out = NULL); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getKeysHiddenName(const char* name, ResTable_config* out = NULL); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getKeyboardName(const char* name, ResTable_config* out = NULL); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getNavigationName(const char* name, ResTable_config* out = NULL); 8893e462b79d6896da10e15e74c5aec6beb098dddfDianne Hackborn static bool getNavHiddenName(const char* name, ResTable_config* out = NULL); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getScreenSizeName(const char* name, ResTable_config* out = NULL); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getVersionName(const char* name, ResTable_config* out = NULL); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int compare(const AaptGroupEntry& o) const; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResTable_config toParams() const; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator<(const AaptGroupEntry& o) const { return compare(o) < 0; } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator<=(const AaptGroupEntry& o) const { return compare(o) <= 0; } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator==(const AaptGroupEntry& o) const { return compare(o) == 0; } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator!=(const AaptGroupEntry& o) const { return compare(o) != 0; } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator>=(const AaptGroupEntry& o) const { return compare(o) >= 0; } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool operator>(const AaptGroupEntry& o) const { return compare(o) > 0; } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 toString() const; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 toDirName(const String8& resType) const; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline int compare_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return lhs.compare(rhs); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline int strictly_order_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return compare_type(lhs, rhs) < 0; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptGroup; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A single asset file we know about. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptFile : public RefBase 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptFile(const String8& sourceFile, const AaptGroupEntry& groupEntry, 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType) 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mGroupEntry(groupEntry) 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mResourceType(resType) 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mSourceFile(sourceFile) 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mData(NULL) 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mDataSize(0) 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mBufferSize(0) 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mCompression(ZipEntry::kCompressStored) 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //printf("new AaptFile created %s\n", (const char*)sourceFile); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1376a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen virtual ~AaptFile() { 1386a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen free(mData); 1396a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPath() const { return mPath; } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptGroupEntry& getGroupEntry() const { return mGroupEntry; } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Data API. If there is data attached to the file, 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // getSourceFile() is not used. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasData() const { return mData != NULL; } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const void* getData() const { return mData; } 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t getSize() const { return mDataSize; } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* editData(size_t size); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* editData(size_t* outSize = NULL); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* padData(size_t wordSize); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t writeData(const void* data, size_t size); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void clearData(); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getResourceType() const { return mResourceType; } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // File API. If the file does not hold raw data, this is 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // a full path to a file on the filesystem that holds its data. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getSourceFile() const { return mSourceFile; } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getPrintableSource() const; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Desired compression method, as per utils/ZipEntry.h. For example, 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // no compression is ZipEntry::kCompressStored. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getCompressionMethod() const { return mCompression; } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setCompressionMethod(int c) { mCompression = c; } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class AaptGroup; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPath; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptGroupEntry mGroupEntry; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mResourceType; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mSourceFile; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* mData; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mDataSize; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mBufferSize; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mCompression; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A group of related files (the same file, with different 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * vendor/locale variations). 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptGroup : public RefBase 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptGroup(const String8& leaf, const String8& path) 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mLeaf(leaf), mPath(path) { } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AaptGroup() { } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getLeaf() const { return mLeaf; } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Returns the relative path after the AaptGroupEntry dirs. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPath() const { return mPath; } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> >& getFiles() const 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return mFiles; } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addFile(const sp<AaptFile>& file); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeFile(size_t index); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void print() const; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getPrintableSource() const; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mLeaf; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPath; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> > mFiles; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A single directory of assets, which can contain for files and other 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sub-directories. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptDir : public RefBase 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptDir(const String8& leaf, const String8& path) 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mLeaf(leaf), mPath(path) { } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AaptDir() { } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getLeaf() const { return mLeaf; } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPath() const { return mPath; } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptGroup> >& getFiles() const { return mFiles; } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptDir> >& getDirs() const { return mDirs; } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addFile(const String8& name, const sp<AaptGroup>& file); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addDir(const String8& name, const sp<AaptDir>& dir); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptDir> makeDir(const String8& name); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeFile(const String8& name); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeDir(const String8& name); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t renameFile(const sp<AaptFile>& file, const String8& newName); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addLeafFile(const String8& leafName, 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& file); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t slurpFullTree(Bundle* bundle, 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& srcDir, 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptGroupEntry& kind, 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform some sanity checks on the names of files and directories here. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In particular: 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check for illegal chars in filenames. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check filename length. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check for presence of ".gz" and non-".gz" copies of same file. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check for multiple files whose names match in a case-insensitive 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fashion (problematic for some systems). 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Comparing names against all other names is O(n^2). We could speed 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it up some by sorting the entries and being smarter about what we 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * compare against, but I'm not expecting to have enough files in a 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * single directory to make a noticeable difference in speed. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that sorting here is not enough to guarantee that the package 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contents are sorted -- subsequent updates can rearrange things. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t validate() const; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void print() const; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getPrintableSource() const; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mLeaf; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPath; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptGroup> > mFiles; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptDir> > mDirs; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All information we know about a particular symbol. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptSymbolEntry 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry() 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : isPublic(false), typeCode(TYPE_UNKNOWN) 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry(const String8& _name) 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : name(_name), isPublic(false), typeCode(TYPE_UNKNOWN) 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry(const AaptSymbolEntry& o) 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : name(o.name), sourcePos(o.sourcePos), isPublic(o.isPublic) 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , comment(o.comment), typeComment(o.typeComment) 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , typeCode(o.typeCode), int32Val(o.int32Val), stringVal(o.stringVal) 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry operator=(const AaptSymbolEntry& o) 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sourcePos = o.sourcePos; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isPublic = o.isPublic; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment = o.comment; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typeComment = o.typeComment; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typeCode = o.typeCode; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32Val = o.int32Val; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stringVal = o.stringVal; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8 name; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isPublic; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 comment; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 typeComment; 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_UNKNOWN = 0, 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_INT32, 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_STRING 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int typeCode; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Value. May be one of these. 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t int32Val; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 stringVal; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A group of related symbols (such as indices into a string block) 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that have been generated from the assets. 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptSymbols : public RefBase 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbols() { } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AaptSymbols() { } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addSymbol(const String8& name, int32_t value, const SourcePos& pos) { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "symbol")) { 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BAD_VALUE; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeCode = AaptSymbolEntry::TYPE_INT32; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.int32Val = value; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addStringSymbol(const String8& name, const String8& value, 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos) { 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "symbol")) { 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BAD_VALUE; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeCode = AaptSymbolEntry::TYPE_STRING; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.stringVal = value; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t makeSymbolPublic(const String8& name, const SourcePos& pos) { 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "symbol")) { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BAD_VALUE; 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.isPublic = true; 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendComment(const String8& name, const String16& comment, const SourcePos& pos) { 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (comment.size() <= 0) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sym.comment.size() == 0) { 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.comment = comment; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.comment.append(String16("\n")); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.comment.append(comment); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendTypeComment(const String8& name, const String16& comment) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (comment.size() <= 0) { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, NULL); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sym.typeComment.size() == 0) { 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeComment = comment; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeComment.append(String16("\n")); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeComment.append(comment); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptSymbols> addNestedSymbol(const String8& name, const SourcePos& pos) { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "nested symbol")) { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptSymbols> sym = mNestedSymbols.valueFor(name); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sym == NULL) { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym = new AaptSymbols(); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNestedSymbols.add(name, sym); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sym; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const KeyedVector<String8, AaptSymbolEntry>& getSymbols() const 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return mSymbols; } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptSymbols> >& getNestedSymbols() const 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return mNestedSymbols; } 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getComment(const String8& name) const 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return get_symbol(name).comment; } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getTypeComment(const String8& name) const 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return get_symbol(name).typeComment; } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool check_valid_symbol_name(const String8& symbol, const SourcePos& pos, const char* label) { 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (valid_symbol_name(symbol)) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pos.error("invalid %s: '%s'\n", label, symbol.string()); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& edit_symbol(const String8& symbol, const SourcePos* pos) { 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t i = mSymbols.indexOfKey(symbol); 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (i < 0) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i = mSymbols.add(symbol, AaptSymbolEntry(symbol)); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = mSymbols.editValueAt(i); 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pos != NULL && sym.sourcePos.line < 0) { 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.sourcePos = *pos; 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sym; 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptSymbolEntry& get_symbol(const String8& symbol) const { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t i = mSymbols.indexOfKey(symbol); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (i >= 0) { 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSymbols.valueAt(i); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDefSymbol; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<String8, AaptSymbolEntry> mSymbols; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptSymbols> > mNestedSymbols; 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry mDefSymbol; 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4556a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissenclass ResourceTypeSet : public RefBase, 4566a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen public KeyedVector<String8,sp<AaptGroup> > 4576a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen{ 4586a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissenpublic: 4596a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen ResourceTypeSet(); 4606a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen}; 4616a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asset hierarchy being operated on. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptAssets : public AaptDir 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 4696a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen AaptAssets() : AaptDir(String8(), String8()), mHaveIncludedAssets(false), mRes(NULL) { } 4706a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen virtual ~AaptAssets() { delete mRes; } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPackage() const { return mPackage; } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPackage(const String8& package) { mPackage = package; mSymbolsPrivatePackage = package; } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SortedVector<AaptGroupEntry>& getGroupEntries() const { return mGroupEntries; } 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> addFile(const String8& filePath, 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptGroupEntry& entry, 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& srcDir, 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptGroup>* outGroup, 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addResource(const String8& leafName, 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& path, 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& file, 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 48864551b2e0e52fe89c360b1951acc528d94ebaf7aDianne Hackborn void addGroupEntry(const AaptGroupEntry& entry) { mGroupEntries.add(entry); } 48964551b2e0e52fe89c360b1951acc528d94ebaf7aDianne Hackborn 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t slurpFromArgs(Bundle* bundle); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t slurpFullTree(Bundle* bundle, 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& srcDir, 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptGroupEntry& kind, 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t slurpResourceTree(Bundle* bundle, const String8& srcDir); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t slurpResourceZip(Bundle* bundle, const char* filename); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptSymbols> getSymbolsFor(const String8& name); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptSymbols> >& getSymbols() const { return mSymbols; } 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getSymbolsPrivatePackage() const { return mSymbolsPrivatePackage; } 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSymbolsPrivatePackage(const String8& pkg) { mSymbolsPrivatePackage = pkg; } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t buildIncludedResources(Bundle* bundle); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addIncludedResources(const sp<AaptFile>& file); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable& getIncludedResources() const; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void print() const; 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline const Vector<sp<AaptDir> >& resDirs() { return mDirs; } 5141553c82e084ac5763fb393857224145506771b99Joe Onorato sp<AaptDir> resDir(const String8& name); 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline sp<AaptAssets> getOverlay() { return mOverlay; } 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void setOverlay(sp<AaptAssets>& overlay) { mOverlay = overlay; } 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline KeyedVector<String8, sp<ResourceTypeSet> >* getResources() { return mRes; } 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void 5216a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen setResources(KeyedVector<String8, sp<ResourceTypeSet> >* res) { delete mRes; mRes = res; } 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPackage; 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SortedVector<AaptGroupEntry> mGroupEntries; 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptSymbols> > mSymbols; 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mSymbolsPrivatePackage; 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<AaptDir> > mDirs; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mHaveIncludedAssets; 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AssetManager mIncludedAssets; 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptAssets> mOverlay; 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<String8, sp<ResourceTypeSet> >* mRes; 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // __AAPT_ASSETS_H 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 540