summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/aapt/ResourceTable.cpp27
-rw-r--r--tools/aapt/ResourceTable.h4
2 files changed, 27 insertions, 4 deletions
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 6f71a1e..a09b1a6 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,15 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos,
}
e->setParent(bagParent);
}
-
- return e->makeItABag(sourcePos);
+
+ if ((result = e->makeItABag(sourcePos)) != NO_ERROR) {
+ return result;
+ }
+
+ if (replace) {
+ return e->emptyBag(sourcePos);
+ }
+ return result;
}
status_t ResourceTable::addBag(const SourcePos& sourcePos,
@@ -2798,6 +2808,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)
{
diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h
index e8fbd9b..74ba326 100644
--- a/tools/aapt/ResourceTable.h
+++ b/tools/aapt/ResourceTable.h
@@ -254,7 +254,9 @@ public:
String16 getParent() const { return mParent; }
status_t makeItABag(const SourcePos& sourcePos);
-
+
+ status_t emptyBag(const SourcePos& sourcePos);
+
status_t setItem(const SourcePos& pos,
const String16& value,
const Vector<StringPool::entry_style_span>* style = NULL,