From bd7f1573aa57c6dcba9efa589054dfccb19a3539 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 17 Jan 2011 18:34:11 -0800 Subject: [PATCH] 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 values with translatable="false" or formatted="false". But they didn't check for those attributes on , 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 --- ResourceTable.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ResourceTable.cpp b/ResourceTable.cpp index fc576a6..818c3c6 100644 --- a/ResourceTable.cpp +++ b/ResourceTable.cpp @@ -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; -- 2.45.2