diff options
author | Robert Greenwalt <robdroid@android.com> | 2009-06-05 21:17:43 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-06-05 21:17:43 -0700 |
commit | 5f0a472cd446b418b11e5b26f227bdce95f7115f (patch) | |
tree | 484996ee0959fb407d7f9216071744e6c8363aa6 | |
parent | 77a8658a9140a8ea6d54908f0914033fe3100872 (diff) | |
parent | 1aa8170e6a448afad86e5d62927d3b8ca4cd9707 (diff) | |
download | frameworks_base-5f0a472cd446b418b11e5b26f227bdce95f7115f.zip frameworks_base-5f0a472cd446b418b11e5b26f227bdce95f7115f.tar.gz frameworks_base-5f0a472cd446b418b11e5b26f227bdce95f7115f.tar.bz2 |
am 1aa8170e: Add per-named-item overlay ability in res xml.
Merge commit '1aa8170e6a448afad86e5d62927d3b8ca4cd9707'
* commit '1aa8170e6a448afad86e5d62927d3b8ca4cd9707':
Add per-named-item overlay ability in res xml.
-rw-r--r-- | tools/aapt/ResourceTable.cpp | 21 | ||||
-rw-r--r-- | tools/aapt/ResourceTable.h | 1 |
2 files changed, 17 insertions, 5 deletions
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index 66607a3..770c7d8 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -729,6 +729,7 @@ status_t compileResourceFile(Bundle* bundle, String16 curType; int32_t curFormat = ResTable_map::TYPE_ANY; bool curIsBag = false; + bool curIsBagReplaceOnOverwrite = false; bool curIsStyled = false; bool curIsPseudolocalizable = false; bool localHasErrors = false; @@ -1171,6 +1172,7 @@ status_t compileResourceFile(Bundle* bundle, curTag = &array16; curType = array16; curIsBag = true; + curIsBagReplaceOnOverwrite = true; ssize_t formatIdx = block.indexOfAttribute(NULL, "format"); if (formatIdx >= 0) { String16 formatStr = String16(block.getAttributeStringValue( @@ -1189,12 +1191,14 @@ status_t compileResourceFile(Bundle* bundle, curType = array16; curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING; curIsBag = true; + curIsBagReplaceOnOverwrite = true; curIsPseudolocalizable = true; } else if (strcmp16(block.getElementName(&len), integer_array16.string()) == 0) { curTag = &integer_array16; curType = array16; curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_INTEGER; curIsBag = true; + curIsBagReplaceOnOverwrite = true; } else { SourcePos(in->getPrintableSource(), block.getLineNumber()).error( "Found tag %s where item is expected\n", @@ -1229,9 +1233,10 @@ status_t compileResourceFile(Bundle* bundle, } if (!localHasErrors) { - err = outTable->startBag(SourcePos(in->getPrintableSource(), block.getLineNumber()), - myPackage, curType, ident, parentIdent, &curParams, - overwrite); + err = outTable->startBag(SourcePos(in->getPrintableSource(), + block.getLineNumber()), myPackage, curType, ident, + parentIdent, &curParams, + overwrite, curIsBagReplaceOnOverwrite); if (err != NO_ERROR) { hasErrors = localHasErrors = true; } @@ -1529,6 +1534,7 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos, const String16& name, const String16& bagParent, const ResTable_config* params, + bool overlay, bool replace, bool isId) { status_t result = NO_ERROR; @@ -1549,7 +1555,12 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos, sourcePos.file.striing(), sourcePos.line, String8(type).string()); } #endif - + if (overlay && !hasBagOrEntry(package, type, name)) { + sourcePos.error("Can't add new bags in an overlay. See '%s'\n", + String8(name).string()); + return UNKNOWN_ERROR; + } + sp<Entry> e = getEntry(package, type, name, sourcePos, params); if (e == NULL) { return UNKNOWN_ERROR; @@ -1571,7 +1582,7 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos, return result; } - if (replace) { + if (overlay && replace) { return e->emptyBag(sourcePos); } return result; diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h index 665232b..20865ea 100644 --- a/tools/aapt/ResourceTable.h +++ b/tools/aapt/ResourceTable.h @@ -96,6 +96,7 @@ public: const String16& name, const String16& bagParent, const ResTable_config* params = NULL, + bool overlay = false, bool replace = false, bool isId = false); |