diff --git a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java index 777e74695..4012378d7 100644 --- a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java @@ -53,10 +53,9 @@ import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; - +import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import java.util.ArrayList; public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcEventDelegate { private static final String TAG = WebxdcActivity.class.getSimpleName(); @@ -544,17 +543,13 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE /** @noinspection unused*/ @JavascriptInterface - public void sendRealtimeData(String base64Data) { + public void sendRealtimeData(String jsonData) { int accountId = WebxdcActivity.this.dcContext.getAccountId(); int msgId = WebxdcActivity.this.dcAppMsg.getId(); - byte[] bytes = Base64.decode(base64Data, Base64.NO_WRAP | Base64.NO_PADDING); - ArrayList data = new ArrayList<>(); - for (byte b : bytes) { - data.add(Integer.valueOf(b)); - } try { - WebxdcActivity.this.rpc.sendWebxdcRealtimeData(accountId, msgId, data); - } catch (RpcException e) { + Integer[] data = JsonUtils.fromJson(jsonData, Integer[].class); + WebxdcActivity.this.rpc.sendWebxdcRealtimeData(accountId, msgId, Arrays.asList(data)); + } catch (IOException | RpcException e) { e.printStackTrace(); } } diff --git a/src/main/res/raw/webxdc.js b/src/main/res/raw/webxdc.js index baefc094c..bc34960e9 100644 --- a/src/main/res/raw/webxdc.js +++ b/src/main/res/raw/webxdc.js @@ -25,7 +25,6 @@ window.webxdc = (() => { const createRealtimeChannel = () => { let listener = null; - const decoder = new TextDecoder('utf8'); return { setListener: (li) => listener = li, leave: () => InternalJSApi.leaveRealtimeChannel(), @@ -33,7 +32,7 @@ window.webxdc = (() => { if ((!data) instanceof Uint8Array) { throw new Error('realtime listener data must be a Uint8Array') } - InternalJSApi.sendRealtimeData(btoa(decoder.decode(data))); + InternalJSApi.sendRealtimeData(JSON.stringify(Array.from(data))); }, __receive: (data) => { if (listener) {