diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java index ca2238e6e..d85aa46f6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java @@ -283,19 +283,34 @@ public class BangleJSDeviceSupport extends AbstractBTLEDeviceSupport { /* Convert a string, escaping chars we can't send over out UART connection */ String s = (String)v; String json = "\""; + //String rawString = ""; for (int i=0;i='0' && nextCh<='7') json += "\\x0" + ch; + else json += "\\" + ch; + } else if (ch==8) json += "\\b"; else if (ch==9) json += "\\t"; else if (ch==10) json += "\\n"; else if (ch==11) json += "\\v"; else if (ch==12) json += "\\f"; else if (ch==34) json += "\\\""; // quote else if (ch==92) json += "\\\\"; // slash - else if (ch<32 || ch==26 || ch==27 || ch==127 || ch==173) json += "\\x"+Integer.toHexString((ch&255)|256).substring(1); + else if (ch<32 || ch==127 || ch==173) + json += "\\x"+Integer.toHexString((ch&255)|256).substring(1); else json += s.charAt(i); } + // if it was less characters to send base64, do that! + if (json.length() > 5+(s.length()*4/3)) { + byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1); + return "atob(\""+Base64.encodeToString(bytes, Base64.DEFAULT).replaceAll("\n","")+"\")"; + } + // for debugging... + //addReceiveHistory("\n---------------------\n"+rawString+"\n---------------------\n"); return json + "\""; } else if (v instanceof JSONArray) { JSONArray a = (JSONArray)v;