aapt: Allow raw "%" in unformatted string-arrays
Commit 15fe2cb added format checking for translatable strings, enforcing
the use of positional args. This check can be disabled on <string>
values with translatable="false" or formatted="false". But they didn't
check for those attributes on <string-array>, so some of CM's strings
fail when they're not really format strings, just because they contain
percent signs. (e.g. brightness widget's "Auto/Dim/40%/100%")
So now the formatted/translatable attributes are checked in string-array
too, and we can restore our proper percent signs.
Change-Id: I3478ab7e0b939e61fe0cec20201ac55096264080
This commit is contained in:
@@ -1322,6 +1322,22 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
}
|
||||
}
|
||||
} else if (strcmp16(block.getElementName(&len), string_array16.string()) == 0) {
|
||||
// Check whether these strings need valid formats.
|
||||
// (simplified form of what string16 does above)
|
||||
size_t n = block.getAttributeCount();
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
size_t length;
|
||||
const uint16_t* attr = block.getAttributeName(i, &length);
|
||||
if (strcmp16(attr, translatable16.string()) == 0
|
||||
|| strcmp16(attr, formatted16.string()) == 0) {
|
||||
const uint16_t* value = block.getAttributeStringValue(i, &length);
|
||||
if (strcmp16(value, false16.string()) == 0) {
|
||||
curIsFormatted = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
curTag = &string_array16;
|
||||
curType = array16;
|
||||
curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING;
|
||||
|
||||
Reference in New Issue
Block a user