From 6f9b83d196f36663587c72c3d79a3b3104856f66 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Wed, 25 Jul 2012 09:57:05 -0500 Subject: [PATCH] working on adding new plurals fix thanks to @miuirussia --- apktool-cli/pom.xml | 12 ++++++++++++ apktool-lib/pom.xml | 5 +++++ .../res/data/value/ResPluralsValue.java | 19 ++++++++++++++++--- .../res/data/value/ResScalarValue.java | 9 +++++---- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/apktool-cli/pom.xml b/apktool-cli/pom.xml index 572fa44f..b033f52b 100644 --- a/apktool-cli/pom.xml +++ b/apktool-cli/pom.xml @@ -49,6 +49,12 @@ ${project.groupId} apktool-lib ${project.version} + + + commons-lang3 + org.apache.commons + + common @@ -62,5 +68,11 @@ 1.3.4-ibot7 jar + + commons-lang + commons-lang + 2.4 + jar + \ No newline at end of file diff --git a/apktool-lib/pom.xml b/apktool-lib/pom.xml index 3b4d2787..a9522740 100644 --- a/apktool-lib/pom.xml +++ b/apktool-lib/pom.xml @@ -65,6 +65,11 @@ + + commons-lang + commons-lang + 2.4 + brut.j dir diff --git a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java index accb4bb0..2ca45fbb 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java +++ b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResPluralsValue.java @@ -16,12 +16,13 @@ package brut.androlib.res.data.value; -import brut.androlib.res.xml.ResValuesXmlSerializable; -import brut.androlib.res.xml.ResXmlEncoders; import brut.androlib.AndrolibException; import brut.androlib.res.data.ResResource; +import brut.androlib.res.xml.ResValuesXmlSerializable; +import brut.androlib.res.xml.ResXmlEncoders; import brut.util.Duo; import java.io.IOException; +import org.apache.commons.lang.StringUtils; import org.xmlpull.v1.XmlSerializer; /** @@ -49,9 +50,21 @@ public class ResPluralsValue extends ResBagValue implements ResValuesXmlSerializ if (item == null) { continue; } + + ResScalarValue rawValue = item; + serializer.startTag(null, "item"); serializer.attribute(null, "quantity", QUANTITY_MAP[i]); - serializer.text(item.encodeAsResXmlValue()); + if (ResXmlEncoders.hasMultipleNonPositionalSubstitutions(rawValue.encodeAsResXmlValue())) { + serializer.text(item.encodeAsResXmlValueExt()); + } else { + String recode = item.encodeAsResXmlValue(); + //Dirty, but working fix @miuirussia + for (int j = 0; j < 10; j++) { + recode = StringUtils.replace(recode, "%" + Integer.toString(j) + "$" + Integer.toString(j) + "$", "%" + Integer.toString(j) + "$"); + } + serializer.text(recode); + } serializer.endTag(null, "item"); } serializer.endTag(null, "plurals"); diff --git a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java index 6d80e1b8..8fcc2e12 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java +++ b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResScalarValue.java @@ -52,7 +52,7 @@ public abstract class ResScalarValue extends ResValue if (mRawValue != null) { return mRawValue; } - return encodeAsResXml(); + return encodeAsResXmlValueExt(); } public String encodeAsResXmlValueExt() throws AndrolibException { @@ -90,15 +90,16 @@ public abstract class ResScalarValue extends ResValue public void serializeToResValuesXml(XmlSerializer serializer, ResResource res) throws IOException, AndrolibException { String type = res.getResSpec().getType().getName(); - boolean item = ! "reference".equals(mType) && ! type.equals(mType); + boolean item = !"reference".equals(mType) && !type.equals(mType); String body = encodeAsResXmlValue(); /* check for resource reference */ if (body.contains("@")){ - // item = true; - // messes up strings with @, need to check if strings.xml ignore + if(!res.getFilePath().contains("string")) { + item = true; + } } /* check for using attrib as node or item */