summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2009-06-05 21:17:43 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-06-05 21:17:43 -0700
commit5f0a472cd446b418b11e5b26f227bdce95f7115f (patch)
tree484996ee0959fb407d7f9216071744e6c8363aa6
parent77a8658a9140a8ea6d54908f0914033fe3100872 (diff)
parent1aa8170e6a448afad86e5d62927d3b8ca4cd9707 (diff)
downloadframeworks_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.cpp21
-rw-r--r--tools/aapt/ResourceTable.h1
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);