From b3866d034dfae0e79efe7f148123082a9fd15fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ryszard=20Wi=C5=9Bniewski?= Date: Mon, 9 May 2011 11:07:00 +0200 Subject: [PATCH] ResAttr::convertToResXmlFormat() : now it returns null if it can't convert a value. Since now this method was calling toResXmlFormat() on an unconvertable value and was always returning a string. But because of that calling object couldn't know, whether returned value is converted one or not. --- .../java/brut/androlib/res/data/value/ResAttr.java | 2 +- .../brut/androlib/res/data/value/ResStyleValue.java | 4 ++++ .../brut/androlib/res/decoder/ResAttrDecoder.java | 13 ++++++++----- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java index fb8dcc2f..23fc293b 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java +++ b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResAttr.java @@ -38,7 +38,7 @@ public class ResAttr extends ResBagValue implements ResValuesXmlSerializable { public String convertToResXmlFormat(ResScalarValue value) throws AndrolibException { - return value.toResXmlFormat(); + return null; } @Override diff --git a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java index c7e6b279..8dbc4978 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java +++ b/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java @@ -51,6 +51,10 @@ public class ResStyleValue extends ResBagValue implements ResValuesXmlSerializab ResAttr attr = (ResAttr) spec.getDefaultResource().getValue(); String value = attr.convertToResXmlFormat(mItems[i].m2); + if (value == null) { + value = mItems[i].m2.toResXmlFormat(); + } + if (value == null) { continue; } diff --git a/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java b/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java index df0b5ea3..0a58f7f0 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java +++ b/apktool-lib/src/main/java/brut/androlib/res/decoder/ResAttrDecoder.java @@ -29,12 +29,15 @@ public class ResAttrDecoder { throws AndrolibException { ResScalarValue resValue = mCurrentPackage.getValueFactory() .factory(type, value, rawValue); - if (attrResId == 0) { - return resValue.toResXmlFormat(); + + String decoded = null; + if (attrResId != 0) { + ResAttr attr = (ResAttr) getCurrentPackage().getResTable() + .getResSpec(attrResId).getDefaultResource().getValue(); + decoded = attr.convertToResXmlFormat(resValue); } - ResAttr attr = (ResAttr) getCurrentPackage().getResTable() - .getResSpec(attrResId).getDefaultResource().getValue(); - return attr.convertToResXmlFormat(resValue); + + return decoded != null ? decoded : resValue.toResXmlFormat(); } public ResPackage getCurrentPackage() throws AndrolibException {