From 95aed14c5978ea8d42efb01ac38150d819d60d6a Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 13 Feb 2024 14:29:08 +0100 Subject: [PATCH] Improved printable string --- .../java/eu/faircode/email/AdapterMedia.java | 2 +- .../main/java/eu/faircode/email/Helper.java | 23 ++++++++++--------- app/src/main/java/eu/faircode/email/Log.java | 6 ++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMedia.java b/app/src/main/java/eu/faircode/email/AdapterMedia.java index 6dd189f2a1..2f2b1f0f8d 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMedia.java +++ b/app/src/main/java/eu/faircode/email/AdapterMedia.java @@ -232,7 +232,7 @@ public class AdapterMedia extends RecyclerView.Adapter BinaryBitmap bBitmap = new BinaryBitmap(new HybridBinarizer(source)); MultiFormatReader reader = new MultiFormatReader(); Result result = reader.decode(bBitmap); - args.putString("barcode_text", Helper.getPrintableString(result.getText())); + args.putString("barcode_text", Helper.getPrintableString(result.getText(), false)); args.putString("barcode_format", result.getBarcodeFormat().name()); } catch (NotFoundException ex) { Log.w(ex); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index a7f5f3c1bc..69d334a35c 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -2177,28 +2177,29 @@ public class Helper { return df.format(sign * bytes / Math.pow(unit, exp)) + " " + pre + "B"; } - static boolean isPrintableChar(char c) { - Character.UnicodeBlock block = Character.UnicodeBlock.of(c); + static boolean isPrintableChar(int codepoint) { + Character.UnicodeBlock block = Character.UnicodeBlock.of(codepoint); if (block == null || block == Character.UnicodeBlock.SPECIALS) return false; - return !Character.isISOControl(c); + return !Character.isISOControl(codepoint); } // https://issuetracker.google.com/issues/37054851 - static String getPrintableString(String value) { + static String getPrintableString(String value, boolean debug) { if (TextUtils.isEmpty(value)) return value; StringBuilder result = new StringBuilder(); - for (int i = 0; i < value.length(); i++) { - char kar = value.charAt(i); - if (kar == '\n') + for (int i = 0; i < value.length(); ) { + int codepoint = value.codePointAt(i); + if (debug && codepoint == 10) result.append('|'); - else if (kar == ' ') + else if (debug && codepoint == 32) result.append('_'); - else if (!Helper.isPrintableChar(kar) || kar == '\u00a0') - result.append('{').append(Integer.toHexString(kar)).append('}'); + else if (!Helper.isPrintableChar(codepoint) || codepoint == 160) + result.append('{').append(Integer.toHexString(codepoint)).append('}'); else - result.append(kar); + result.append(Character.toChars(codepoint)); + i += Character.charCount(codepoint); } return result.toString(); } diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index 527adf8bf7..21c7de5d77 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -625,9 +625,9 @@ public class Log { if (element instanceof Long) elements[i] = element + " (0x" + Long.toHexString((Long) element) + ")"; else if (element instanceof Spanned) - elements[i] = "(span:" + Helper.getPrintableString(element.toString()) + ")"; + elements[i] = "(span:" + Helper.getPrintableString(element.toString(), true) + ")"; else - elements[i] = (element == null ? "" : Helper.getPrintableString(element.toString())); + elements[i] = (element == null ? "" : Helper.getPrintableString(element.toString(), true)); } value = TextUtils.join(",", elements); if (length > 10) @@ -636,7 +636,7 @@ public class Log { } else if (v instanceof Long) value = v + " (0x" + Long.toHexString((Long) v) + ")"; else if (v instanceof Spanned) - value = "(span:" + Helper.getPrintableString(v.toString()) + ")"; + value = "(span:" + Helper.getPrintableString(v.toString(), true) + ")"; else if (v instanceof Bundle) value = "{" + TextUtils.join(" ", getExtras((Bundle) v)) + "}";