diff --git a/app/src/main/java/eu/faircode/email/ActivityDmarc.java b/app/src/main/java/eu/faircode/email/ActivityDmarc.java index ad480addcc..4441e8d354 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDmarc.java +++ b/app/src/main/java/eu/faircode/email/ActivityDmarc.java @@ -389,7 +389,7 @@ public class ActivityDmarc extends ActivityBase { ssb.append("\n"); int start = ssb.length(); - ssb.append(data); + ssb.append(TextHelper.formatXml(data, 2)); ssb.setSpan(new TypefaceSpan("monospace"), start, ssb.length(), 0); ssb.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_SMALL), start, ssb.length(), 0); diff --git a/app/src/main/java/eu/faircode/email/TextHelper.java b/app/src/main/java/eu/faircode/email/TextHelper.java index a72fa7ffa1..7370e7851c 100644 --- a/app/src/main/java/eu/faircode/email/TextHelper.java +++ b/app/src/main/java/eu/faircode/email/TextHelper.java @@ -34,6 +34,8 @@ import android.view.textclassifier.TextClassifier; import androidx.annotation.RequiresApi; import androidx.preference.PreferenceManager; +import java.io.StringReader; +import java.io.StringWriter; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -50,6 +52,13 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + public class TextHelper { private static final int MAX_DETECT_SAMPLE_SIZE = 8192; private static final float MIN_DETECT_PROBABILITY = 0.80f; @@ -207,6 +216,24 @@ public class TextHelper { } } + public static String formatXml(String xml, int indent) { + try { + Source source = new StreamSource(new StringReader(xml)); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer = factory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", Integer.toString(indent)); + transformer.transform(source, result); + return result.getWriter().toString(); + } catch (Throwable ex) { + Log.e(ex); + return xml; + } + } + private static class DetectResult { String language; float probability;