AaptAssets.h revision 91447d88f2bdf9c2bf8d1a53570efef6172fba74
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> 10b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h> 11b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h> 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/KeyedVector.h> 13b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <utils/RefBase.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> 1755e3d60da5626752ffe1d15150d35ccb8fa644e7Mathias Agopian#include "ZipFile.h" 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Bundle.h" 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SourcePos.h" 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2490897ed87bce639bf6bb2ccf15fbabb59b131babRaphael Moll 2590897ed87bce639bf6bb2ccf15fbabb59b131babRaphael Mollextern const char * const gDefaultIgnoreAssets; 2690897ed87bce639bf6bb2ccf15fbabb59b131babRaphael Mollextern const char * gUserIgnoreAssets; 2790897ed87bce639bf6bb2ccf15fbabb59b131babRaphael Moll 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool valid_symbol_name(const String8& str); 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackbornclass AaptAssets; 31e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_NONE = 0, 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_MCC = 1, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_MNC, 3691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath AXIS_LOCALE, 37c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn AXIS_SCREENLAYOUTSIZE, 38c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn AXIS_SCREENLAYOUTLONG, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_ORIENTATION, 4027b28b3f62bd3b54fa13acd5d035940b9be464f3Tobias Haamel AXIS_UIMODETYPE, 4127b28b3f62bd3b54fa13acd5d035940b9be464f3Tobias Haamel AXIS_UIMODENIGHT, 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_DENSITY, 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_TOUCHSCREEN, 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_KEYSHIDDEN, 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_KEYBOARD, 4693e462b79d6896da10e15e74c5aec6beb098dddfDianne Hackborn AXIS_NAVHIDDEN, 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_NAVIGATION, 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AXIS_SCREENSIZE, 4969cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn AXIS_SMALLESTSCREENWIDTHDP, 50ebff8f92f13513ce37bd74759eb1db63f2220590Dianne Hackborn AXIS_SCREENWIDTHDP, 51ebff8f92f13513ce37bd74759eb1db63f2220590Dianne Hackborn AXIS_SCREENHEIGHTDP, 525f7979993979466c79ab4f38d83c6f2aca361662Fabrice Di Meglio AXIS_LAYOUTDIR, 53e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn AXIS_VERSION, 54e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 55e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn AXIS_START = AXIS_MCC, 56e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn AXIS_END = AXIS_VERSION, 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamathstruct AaptLocaleValue { 6091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath char language[4]; 6191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath char region[4]; 6291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath char script[4]; 6391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath char variant[8]; 6491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 6591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath AaptLocaleValue() { 6691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath memset(this, 0, sizeof(AaptLocaleValue)); 6791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath } 6891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 6991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath // Initialize this AaptLocaleValue from a config string. 7091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath bool initFromFilterString(const String8& config); 7191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 7291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath int initFromDirName(const Vector<String8>& parts, const int startIndex); 7391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 7491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath // Initialize this AaptLocaleValue from a ResTable_config. 7591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath void initFromResTable(const ResTable_config& config); 7691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 7791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath void writeTo(ResTable_config* out) const; 7891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 7991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath String8 toDirName() const; 8091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 8191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath int compare(const AaptLocaleValue& other) const { 8291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath return memcmp(this, &other, sizeof(AaptLocaleValue)); 8391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath } 8491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 8591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath static void splitAndLowerCase(const char* const chars, Vector<String8>* parts, 8691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath const char separator); 8791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 8891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator<(const AaptLocaleValue& o) const { return compare(o) < 0; } 8991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator<=(const AaptLocaleValue& o) const { return compare(o) <= 0; } 9091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator==(const AaptLocaleValue& o) const { return compare(o) == 0; } 9191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator!=(const AaptLocaleValue& o) const { return compare(o) != 0; } 9291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator>=(const AaptLocaleValue& o) const { return compare(o) >= 0; } 9391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator>(const AaptLocaleValue& o) const { return compare(o) > 0; } 9491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamathprivate: 9591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath void setLanguage(const char* language); 9691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath void setRegion(const char* language); 9791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath void setScript(const char* script); 9891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath void setVariant(const char* variant); 9991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath}; 10091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 10191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamathstruct AxisValue { 10291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath // Used for all axes except AXIS_LOCALE, which is represented 10391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath // as a AaptLocaleValue value. 10491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath int intValue; 10591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath AaptLocaleValue localeValue; 10691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 10791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath AxisValue() : intValue(0) { 10891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath } 10991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 11091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline int compare(const AxisValue &other) const { 11191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath if (intValue != other.intValue) { 11291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath return intValue - other.intValue; 11391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath } 11491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 11591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath return localeValue.compare(other.localeValue); 11691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath } 11791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 11891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator<(const AxisValue& o) const { return compare(o) < 0; } 11991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator<=(const AxisValue& o) const { return compare(o) <= 0; } 12091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator==(const AxisValue& o) const { return compare(o) == 0; } 12191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator!=(const AxisValue& o) const { return compare(o) != 0; } 12291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator>=(const AxisValue& o) const { return compare(o) >= 0; } 12391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator>(const AxisValue& o) const { return compare(o) > 0; } 12491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath}; 12591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This structure contains a specific variation of a single file out 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of all the variations it can have that we can have. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct AaptGroupEntry 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 13391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath AaptGroupEntry() : mParamsChanged(true) { 13491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath memset(&mParams, 0, sizeof(ResTable_config)); 13591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath } 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool initFromDirName(const char* dir, String8* resType); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath static bool parseFilterNamePart(const String8& part, int* axis, AxisValue* value); 140e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 14191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath static AxisValue getConfigValueForAxis(const ResTable_config& config, int axis); 142e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 143e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn static bool configSameExcept(const ResTable_config& config, 144e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const ResTable_config& otherConfig, int axis); 145e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 14691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath int compare(const AaptGroupEntry& o) const; 14791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 14891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath const ResTable_config toParams() const; 14991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 15091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator<(const AaptGroupEntry& o) const { return compare(o) < 0; } 15191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator<=(const AaptGroupEntry& o) const { return compare(o) <= 0; } 15291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator==(const AaptGroupEntry& o) const { return compare(o) == 0; } 15391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator!=(const AaptGroupEntry& o) const { return compare(o) != 0; } 15491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator>=(const AaptGroupEntry& o) const { return compare(o) >= 0; } 15591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath inline bool operator>(const AaptGroupEntry& o) const { return compare(o) > 0; } 15691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 15791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath String8 toString() const; 15891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath String8 toDirName(const String8& resType) const; 15991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 16091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath const String8& getVersionString() const { return version; } 16191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 16291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamathprivate: 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getMccName(const char* name, ResTable_config* out = NULL); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getMncName(const char* name, ResTable_config* out = NULL); 165c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn static bool getScreenLayoutSizeName(const char* name, ResTable_config* out = NULL); 166c4db95c077f826585d20be2f3db4043c53d30cf5Dianne Hackborn static bool getScreenLayoutLongName(const char* name, ResTable_config* out = NULL); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getOrientationName(const char* name, ResTable_config* out = NULL); 16827b28b3f62bd3b54fa13acd5d035940b9be464f3Tobias Haamel static bool getUiModeTypeName(const char* name, ResTable_config* out = NULL); 16927b28b3f62bd3b54fa13acd5d035940b9be464f3Tobias Haamel static bool getUiModeNightName(const char* name, ResTable_config* out = NULL); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getDensityName(const char* name, ResTable_config* out = NULL); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getTouchscreenName(const char* name, ResTable_config* out = NULL); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getKeysHiddenName(const char* name, ResTable_config* out = NULL); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getKeyboardName(const char* name, ResTable_config* out = NULL); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getNavigationName(const char* name, ResTable_config* out = NULL); 17593e462b79d6896da10e15e74c5aec6beb098dddfDianne Hackborn static bool getNavHiddenName(const char* name, ResTable_config* out = NULL); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getScreenSizeName(const char* name, ResTable_config* out = NULL); 17769cb87576ba163b61bb0e6477a3b7c57a9b11d40Dianne Hackborn static bool getSmallestScreenWidthDpName(const char* name, ResTable_config* out = NULL); 178ebff8f92f13513ce37bd74759eb1db63f2220590Dianne Hackborn static bool getScreenWidthDpName(const char* name, ResTable_config* out = NULL); 179ebff8f92f13513ce37bd74759eb1db63f2220590Dianne Hackborn static bool getScreenHeightDpName(const char* name, ResTable_config* out = NULL); 1805f7979993979466c79ab4f38d83c6f2aca361662Fabrice Di Meglio static bool getLayoutDirectionName(const char* name, ResTable_config* out = NULL); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool getVersionName(const char* name, ResTable_config* out = NULL); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 183e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 mcc; 184e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 mnc; 18591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath AaptLocaleValue locale; 186e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 vendor; 187e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 smallestScreenWidthDp; 188e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 screenWidthDp; 189e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 screenHeightDp; 190e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 screenLayoutSize; 191e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 screenLayoutLong; 192e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 orientation; 193e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 uiModeType; 194e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 uiModeNight; 195e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 density; 196e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 touchscreen; 197e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 keysHidden; 198e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 keyboard; 199e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 navHidden; 200e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 navigation; 201e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 screenSize; 2025f7979993979466c79ab4f38d83c6f2aca361662Fabrice Di Meglio String8 layoutDirection; 203e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn String8 version; 204e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 205e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn mutable bool mParamsChanged; 206e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn mutable ResTable_config mParams; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline int compare_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return lhs.compare(rhs); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline int strictly_order_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return compare_type(lhs, rhs) < 0; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptGroup; 2209bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskinclass FilePathStore; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A single asset file we know about. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptFile : public RefBase 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptFile(const String8& sourceFile, const AaptGroupEntry& groupEntry, 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType) 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mGroupEntry(groupEntry) 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mResourceType(resType) 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mSourceFile(sourceFile) 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mData(NULL) 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mDataSize(0) 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mBufferSize(0) 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , mCompression(ZipEntry::kCompressStored) 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //printf("new AaptFile created %s\n", (const char*)sourceFile); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2406a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen virtual ~AaptFile() { 2416a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen free(mData); 2426a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPath() const { return mPath; } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptGroupEntry& getGroupEntry() const { return mGroupEntry; } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Data API. If there is data attached to the file, 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // getSourceFile() is not used. 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool hasData() const { return mData != NULL; } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const void* getData() const { return mData; } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t getSize() const { return mDataSize; } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* editData(size_t size); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* editData(size_t* outSize = NULL); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* padData(size_t wordSize); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t writeData(const void* data, size_t size); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void clearData(); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getResourceType() const { return mResourceType; } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // File API. If the file does not hold raw data, this is 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // a full path to a file on the filesystem that holds its data. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getSourceFile() const { return mSourceFile; } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getPrintableSource() const; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Desired compression method, as per utils/ZipEntry.h. For example, 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // no compression is ZipEntry::kCompressStored. 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getCompressionMethod() const { return mCompression; } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setCompressionMethod(int c) { mCompression = c; } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class AaptGroup; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPath; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptGroupEntry mGroupEntry; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mResourceType; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mSourceFile; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* mData; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mDataSize; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mBufferSize; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mCompression; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A group of related files (the same file, with different 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * vendor/locale variations). 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptGroup : public RefBase 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptGroup(const String8& leaf, const String8& path) 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mLeaf(leaf), mPath(path) { } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AaptGroup() { } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getLeaf() const { return mLeaf; } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Returns the relative path after the AaptGroupEntry dirs. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPath() const { return mPath; } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> >& getFiles() const 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return mFiles; } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30209384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski status_t addFile(const sp<AaptFile>& file, const bool overwriteDuplicate=false); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeFile(size_t index); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 305e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn void print(const String8& prefix) const; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getPrintableSource() const; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mLeaf; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPath; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> > mFiles; 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 317e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn * A single directory of assets, which can contain files and other 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sub-directories. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptDir : public RefBase 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptDir(const String8& leaf, const String8& path) 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mLeaf(leaf), mPath(path) { } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AaptDir() { } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getLeaf() const { return mLeaf; } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPath() const { return mPath; } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptGroup> >& getFiles() const { return mFiles; } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptDir> >& getDirs() const { return mDirs; } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 334e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn virtual status_t addFile(const String8& name, const sp<AaptGroup>& file); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeFile(const String8& name); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeDir(const String8& name); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform some sanity checks on the names of files and directories here. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In particular: 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check for illegal chars in filenames. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check filename length. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check for presence of ".gz" and non-".gz" copies of same file. 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - Check for multiple files whose names match in a case-insensitive 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fashion (problematic for some systems). 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Comparing names against all other names is O(n^2). We could speed 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it up some by sorting the entries and being smarter about what we 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * compare against, but I'm not expecting to have enough files in a 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * single directory to make a noticeable difference in speed. 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that sorting here is not enough to guarantee that the package 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contents are sorted -- subsequent updates can rearrange things. 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t validate() const; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 358e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn void print(const String8& prefix) const; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getPrintableSource() const; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 363e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn friend class AaptAssets; 364e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 365e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn status_t addDir(const String8& name, const sp<AaptDir>& dir); 366e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn sp<AaptDir> makeDir(const String8& name); 367e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn status_t addLeafFile(const String8& leafName, 36809384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski const sp<AaptFile>& file, 36909384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski const bool overwrite=false); 370e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn virtual ssize_t slurpFullTree(Bundle* bundle, 371e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const String8& srcDir, 372e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const AaptGroupEntry& kind, 373e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const String8& resType, 37409384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski sp<FilePathStore>& fullResPaths, 37509384303dea4f3f01d5682918d7bab9bf83a02b1Adam Lesinski const bool overwrite=false); 376e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mLeaf; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPath; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptGroup> > mFiles; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptDir> > mDirs; 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All information we know about a particular symbol. 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptSymbolEntry 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry() 3911644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn : isPublic(false), isJavaSymbol(false), typeCode(TYPE_UNKNOWN) 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry(const String8& _name) 3951644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn : name(_name), isPublic(false), isJavaSymbol(false), typeCode(TYPE_UNKNOWN) 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry(const AaptSymbolEntry& o) 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : name(o.name), sourcePos(o.sourcePos), isPublic(o.isPublic) 4001644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn , isJavaSymbol(o.isJavaSymbol), comment(o.comment), typeComment(o.typeComment) 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , typeCode(o.typeCode), int32Val(o.int32Val), stringVal(o.stringVal) 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry operator=(const AaptSymbolEntry& o) 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sourcePos = o.sourcePos; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isPublic = o.isPublic; 4081644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn isJavaSymbol = o.isJavaSymbol; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project comment = o.comment; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typeComment = o.typeComment; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typeCode = o.typeCode; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32Val = o.int32Val; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stringVal = o.stringVal; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return *this; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8 name; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SourcePos sourcePos; 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool isPublic; 4211644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn bool isJavaSymbol; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 comment; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String16 typeComment; 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_UNKNOWN = 0, 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_INT32, 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TYPE_STRING 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int typeCode; 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Value. May be one of these. 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t int32Val; 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 stringVal; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A group of related symbols (such as indices into a string block) 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that have been generated from the assets. 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptSymbols : public RefBase 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbols() { } 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AaptSymbols() { } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addSymbol(const String8& name, int32_t value, const SourcePos& pos) { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "symbol")) { 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BAD_VALUE; 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeCode = AaptSymbolEntry::TYPE_INT32; 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.int32Val = value; 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addStringSymbol(const String8& name, const String8& value, 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SourcePos& pos) { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "symbol")) { 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BAD_VALUE; 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeCode = AaptSymbolEntry::TYPE_STRING; 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.stringVal = value; 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t makeSymbolPublic(const String8& name, const SourcePos& pos) { 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "symbol")) { 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BAD_VALUE; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.isPublic = true; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4791644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn status_t makeSymbolJavaSymbol(const String8& name, const SourcePos& pos) { 4801644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn if (!check_valid_symbol_name(name, pos, "symbol")) { 4811644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn return BAD_VALUE; 4821644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn } 4831644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn AaptSymbolEntry& sym = edit_symbol(name, &pos); 4841644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn sym.isJavaSymbol = true; 4851644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn return NO_ERROR; 4861644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn } 4871644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendComment(const String8& name, const String16& comment, const SourcePos& pos) { 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (comment.size() <= 0) { 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, &pos); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sym.comment.size() == 0) { 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.comment = comment; 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.comment.append(String16("\n")); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.comment.append(comment); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void appendTypeComment(const String8& name, const String16& comment) { 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (comment.size() <= 0) { 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = edit_symbol(name, NULL); 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sym.typeComment.size() == 0) { 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeComment = comment; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeComment.append(String16("\n")); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.typeComment.append(comment); 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptSymbols> addNestedSymbol(const String8& name, const SourcePos& pos) { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!check_valid_symbol_name(name, pos, "nested symbol")) { 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptSymbols> sym = mNestedSymbols.valueFor(name); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sym == NULL) { 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym = new AaptSymbols(); 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNestedSymbols.add(name, sym); 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sym; 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5281644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn status_t applyJavaSymbols(const sp<AaptSymbols>& javaSymbols); 5291644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const KeyedVector<String8, AaptSymbolEntry>& getSymbols() const 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return mSymbols; } 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptSymbols> >& getNestedSymbols() const 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return mNestedSymbols; } 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getComment(const String8& name) const 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return get_symbol(name).comment; } 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String16& getTypeComment(const String8& name) const 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { return get_symbol(name).typeComment; } 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool check_valid_symbol_name(const String8& symbol, const SourcePos& pos, const char* label) { 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (valid_symbol_name(symbol)) { 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pos.error("invalid %s: '%s'\n", label, symbol.string()); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& edit_symbol(const String8& symbol, const SourcePos* pos) { 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t i = mSymbols.indexOfKey(symbol); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (i < 0) { 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i = mSymbols.add(symbol, AaptSymbolEntry(symbol)); 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry& sym = mSymbols.editValueAt(i); 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pos != NULL && sym.sourcePos.line < 0) { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sym.sourcePos = *pos; 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sym; 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptSymbolEntry& get_symbol(const String8& symbol) const { 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t i = mSymbols.indexOfKey(symbol); 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (i >= 0) { 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSymbols.valueAt(i); 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDefSymbol; 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<String8, AaptSymbolEntry> mSymbols; 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptSymbols> > mNestedSymbols; 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AaptSymbolEntry mDefSymbol; 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5726a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissenclass ResourceTypeSet : public RefBase, 5736a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen public KeyedVector<String8,sp<AaptGroup> > 5746a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen{ 5756a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissenpublic: 5766a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen ResourceTypeSet(); 5776a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen}; 5786a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen 5799bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin// Storage for lists of fully qualified paths for 5809bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin// resources encountered during slurping. 5819bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskinclass FilePathStore : public RefBase, 5829bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin public Vector<String8> 5839bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin{ 5849bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskinpublic: 5859bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin FilePathStore(); 5869bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin}; 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Asset hierarchy being operated on. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass AaptAssets : public AaptDir 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 594e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn AaptAssets(); 5956a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen virtual ~AaptAssets() { delete mRes; } 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& getPackage() const { return mPackage; } 5981644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn void setPackage(const String8& package) { 5991644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn mPackage = package; 6001644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn mSymbolsPrivatePackage = package; 6011644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn mHavePrivateSymbols = false; 6021644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn } 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 604e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const SortedVector<AaptGroupEntry>& getGroupEntries() const; 605e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 606e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn virtual status_t addFile(const String8& name, const sp<AaptGroup>& file); 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptFile> addFile(const String8& filePath, 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const AaptGroupEntry& entry, 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& srcDir, 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptGroup>* outGroup, 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addResource(const String8& leafName, 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& path, 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<AaptFile>& file, 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const String8& resType); 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 61964551b2e0e52fe89c360b1951acc528d94ebaf7aDianne Hackborn void addGroupEntry(const AaptGroupEntry& entry) { mGroupEntries.add(entry); } 62064551b2e0e52fe89c360b1951acc528d94ebaf7aDianne Hackborn 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t slurpFromArgs(Bundle* bundle); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptSymbols> getSymbolsFor(const String8& name); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6251644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn sp<AaptSymbols> getJavaSymbolsFor(const String8& name); 6261644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 6271644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn status_t applyJavaSymbols(); 6281644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DefaultKeyedVector<String8, sp<AaptSymbols> >& getSymbols() const { return mSymbols; } 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 getSymbolsPrivatePackage() const { return mSymbolsPrivatePackage; } 6321644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn void setSymbolsPrivatePackage(const String8& pkg) { 6331644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn mSymbolsPrivatePackage = pkg; 6341644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn mHavePrivateSymbols = mSymbolsPrivatePackage != mPackage; 6351644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn } 6361644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 6371644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn bool havePrivateSymbols() const { return mHavePrivateSymbols; } 6381644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 6391644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn bool isJavaSymbol(const AaptSymbolEntry& sym, bool includePrivate) const; 6401644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t buildIncludedResources(Bundle* bundle); 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t addIncludedResources(const sp<AaptFile>& file); 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const ResTable& getIncludedResources() const; 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 645e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn void print(const String8& prefix) const; 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 647e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn inline const Vector<sp<AaptDir> >& resDirs() const { return mResDirs; } 648e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn sp<AaptDir> resDir(const String8& name) const; 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline sp<AaptAssets> getOverlay() { return mOverlay; } 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void setOverlay(sp<AaptAssets>& overlay) { mOverlay = overlay; } 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline KeyedVector<String8, sp<ResourceTypeSet> >* getResources() { return mRes; } 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void 6556a1fadea851db236331b3dfe1f3c1e482556057fMarco Nelissen setResources(KeyedVector<String8, sp<ResourceTypeSet> >* res) { delete mRes; mRes = res; } 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6579bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin inline sp<FilePathStore>& getFullResPaths() { return mFullResPaths; } 6589bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin inline void 6599bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin setFullResPaths(sp<FilePathStore>& res) { mFullResPaths = res; } 6609bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin 66103589cc65355220e0a4a0c816189a9fa25cc81fcJosiah Gaskin inline sp<FilePathStore>& getFullAssetPaths() { return mFullAssetPaths; } 66203589cc65355220e0a4a0c816189a9fa25cc81fcJosiah Gaskin inline void 66303589cc65355220e0a4a0c816189a9fa25cc81fcJosiah Gaskin setFullAssetPaths(sp<FilePathStore>& res) { mFullAssetPaths = res; } 66403589cc65355220e0a4a0c816189a9fa25cc81fcJosiah Gaskin 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 666e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn virtual ssize_t slurpFullTree(Bundle* bundle, 667e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const String8& srcDir, 668e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const AaptGroupEntry& kind, 669e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn const String8& resType, 670e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn sp<FilePathStore>& fullResPaths); 671e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 672e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn ssize_t slurpResourceTree(Bundle* bundle, const String8& srcDir); 673e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn ssize_t slurpResourceZip(Bundle* bundle, const char* filename); 674e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 675e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn status_t filter(Bundle* bundle); 676e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mPackage; 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SortedVector<AaptGroupEntry> mGroupEntries; 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DefaultKeyedVector<String8, sp<AaptSymbols> > mSymbols; 6801644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn DefaultKeyedVector<String8, sp<AaptSymbols> > mJavaSymbols; 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 mSymbolsPrivatePackage; 6821644c6d7f4931d0b4fe7ea77c63b016af01a46d3Dianne Hackborn bool mHavePrivateSymbols; 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 684e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn Vector<sp<AaptDir> > mResDirs; 685e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn 686e6b680364dd992907a8d2037685a2e500d188dfbDianne Hackborn bool mChanged; 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mHaveIncludedAssets; 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AssetManager mIncludedAssets; 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AaptAssets> mOverlay; 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<String8, sp<ResourceTypeSet> >* mRes; 6939bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin 6949bf34ca6f85309c65b0ebdf614cb8266401b49baJosiah Gaskin sp<FilePathStore> mFullResPaths; 69503589cc65355220e0a4a0c816189a9fa25cc81fcJosiah Gaskin sp<FilePathStore> mFullAssetPaths; 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // __AAPT_ASSETS_H 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 700