am 0f0e85a6: Merge "AAPT: attributes showing up after v21 attributes would be removed for pre-21 devices" into lmp-mr1-dev

* commit '0f0e85a68961e303ac85d31fb36ec8384277349d':
  AAPT: attributes showing up after v21 attributes would be removed for pre-21 devices
This commit is contained in:
Adam Lesinski
2014-12-16 00:54:59 +00:00
committed by Android Git Automerger

View File

@@ -4527,7 +4527,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);
@@ -4536,11 +4536,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--;
}
}
@@ -4552,7 +4564,7 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle,
}
}
if (attrsToRemove.isEmpty()) {
if (newRoot == NULL) {
return NO_ERROR;
}
@@ -4562,12 +4574,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",
@@ -4602,22 +4610,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;
}