summaryrefslogtreecommitdiffstats
path: root/tools/aapt
diff options
context:
space:
mode:
authorAdam Lesinski <adamlesinski@google.com>2014-12-16 01:43:16 +0000
committerandroid-build-merger <android-build-merger@google.com>2014-12-16 01:43:16 +0000
commit22bfb75ebb949ff05d34ad22fbcc888582aaaaa4 (patch)
treedcf12a59cc9555618478515a7fb3f2571a8ff4b7 /tools/aapt
parent4800de0f7ce810f57db4259a6f6a7d02484800ea (diff)
parent465d123464eadf180b618164b2ed23702bca3d86 (diff)
downloadframeworks_base-22bfb75ebb949ff05d34ad22fbcc888582aaaaa4.zip
frameworks_base-22bfb75ebb949ff05d34ad22fbcc888582aaaaa4.tar.gz
frameworks_base-22bfb75ebb949ff05d34ad22fbcc888582aaaaa4.tar.bz2
am 0f0e85a6: Merge "AAPT: attributes showing up after v21 attributes would be removed for pre-21 devices" into lmp-mr1-dev
automerge: 465d123 * commit '465d123464eadf180b618164b2ed23702bca3d86': AAPT: attributes showing up after v21 attributes would be removed for pre-21 devices
Diffstat (limited to 'tools/aapt')
-rw-r--r--tools/aapt/ResourceTable.cpp42
1 files changed, 17 insertions, 25 deletions
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index e91a376..5d15ffc 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -4561,7 +4561,7 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
return NO_ERROR;
}
- Vector<key_value_pair_t<sp<XMLNode>, size_t> > attrsToRemove;
+ sp<XMLNode> newRoot = NULL;
Vector<sp<XMLNode> > nodesToVisit;
nodesToVisit.push(root);
@@ -4570,11 +4570,23 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
nodesToVisit.pop();
const Vector<XMLNode::attribute_entry>& attrs = node->getAttributes();
- const size_t attrCount = attrs.size();
- for (size_t i = 0; i < attrCount; i++) {
+ for (size_t i = 0; i < attrs.size(); i++) {
const XMLNode::attribute_entry& attr = attrs[i];
if (isAttributeFromL(attr.nameResId)) {
- attrsToRemove.add(key_value_pair_t<sp<XMLNode>, size_t>(node, i));
+ if (newRoot == NULL) {
+ newRoot = root->clone();
+ }
+
+ if (bundle->getVerbose()) {
+ SourcePos(node->getFilename(), node->getStartLineNumber()).printf(
+ "removing attribute %s%s%s from <%s>",
+ String8(attr.ns).string(),
+ (attr.ns.size() == 0 ? "" : ":"),
+ String8(attr.name).string(),
+ String8(node->getElementName()).string());
+ }
+ node->removeAttribute(i);
+ i--;
}
}
@@ -4586,7 +4598,7 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
}
}
- if (attrsToRemove.isEmpty()) {
+ if (newRoot == NULL) {
return NO_ERROR;
}
@@ -4596,12 +4608,8 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
// Look to see if we already have an overriding v21 configuration.
sp<ConfigList> cl = getConfigList(String16(mAssets->getPackage()),
String16(target->getResourceType()), resourceName);
- //if (cl == NULL) {
- // fprintf(stderr, "fuuuuck\n");
- //}
if (cl->getEntries().indexOfKey(newConfig) < 0) {
// We don't have an overriding entry for v21, so we must duplicate this one.
- sp<XMLNode> newRoot = root->clone();
sp<AaptFile> newFile = new AaptFile(target->getSourceFile(),
AaptGroupEntry(newConfig), target->getResourceType());
String8 resPath = String8::format("res/%s/%s",
@@ -4636,22 +4644,6 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
mWorkQueue.push(item);
}
- const size_t removeCount = attrsToRemove.size();
- for (size_t i = 0; i < removeCount; i++) {
- sp<XMLNode> node = attrsToRemove[i].key;
- size_t attrIndex = attrsToRemove[i].value;
- const XMLNode::attribute_entry& ae = node->getAttributes()[attrIndex];
- if (bundle->getVerbose()) {
- SourcePos(node->getFilename(), node->getStartLineNumber()).printf(
- "removing attribute %s%s%s from <%s>",
- String8(ae.ns).string(),
- (ae.ns.size() == 0 ? "" : ":"),
- String8(ae.name).string(),
- String8(node->getElementName()).string());
- }
- node->removeAttribute(attrIndex);
- }
-
return NO_ERROR;
}