From 4b4f4a908895bc0ba63f929bfdc02eec22c0f6e5 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt <> Date: Thu, 2 Apr 2009 16:55:50 -0700 Subject: AI 144342: Fix bag (string-array,etc) behavior with overlays. We used to replace elements in the default with elements from the overlay. This change causes us to empty the array first so if the overlay array is smaller we don't end up with elements from the default array showing through at the end of the array. Ex: [A,B,C] and overlay [D] should give [D] but used to give [D,B,C]. BUG=1754390 Automated import of CL 144342 --- tools/aapt/ResourceTable.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'tools/aapt/ResourceTable.cpp') diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index 6f71a1ed0d46..6e522a2c74c8 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -1109,7 +1109,8 @@ status_t compileResourceFile(Bundle* bundle, if (!localHasErrors) { err = outTable->startBag(SourcePos(in->getPrintableSource(), block.getLineNumber()), - myPackage, curType, ident, parentIdent, &curParams); + myPackage, curType, ident, parentIdent, &curParams, + overwrite); if (err != NO_ERROR) { hasErrors = localHasErrors = true; } @@ -1409,6 +1410,8 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos, const ResTable_config* params, bool replace, bool isId) { + status_t result = NO_ERROR; + // Check for adding entries in other packages... for now we do // nothing. We need to do the right thing here to support skinning. uint32_t rid = mAssets->getIncludedResources() @@ -1442,8 +1445,12 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos, } e->setParent(bagParent); } - - return e->makeItABag(sourcePos); + + if ((result = e->makeItABag(sourcePos)) != NO_ERROR) { + return result; + } + + return e->emptyBag(sourcePos); } status_t ResourceTable::addBag(const SourcePos& sourcePos, @@ -2798,6 +2805,17 @@ status_t ResourceTable::Entry::addToBag(const SourcePos& sourcePos, return NO_ERROR; } +status_t ResourceTable::Entry::emptyBag(const SourcePos& sourcePos) +{ + status_t err = makeItABag(sourcePos); + if (err != NO_ERROR) { + return err; + } + + mBag.clear(); + return NO_ERROR; +} + status_t ResourceTable::Entry::generateAttributes(ResourceTable* table, const String16& package) { -- cgit v1.2.3-59-g8ed1b