From 0e48d439f1f2020ab1ed48fc6ae121b9d30e9e32 Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Mon, 18 Mar 2019 20:45:26 +0200 Subject: [PATCH] [android] Fix SVG.toDataURL exception #948 --- .../java/com/horcrux/svg/SvgViewModule.java | 76 ++++++++++--------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/SvgViewModule.java b/android/src/main/java/com/horcrux/svg/SvgViewModule.java index 5790da74..42e749e7 100644 --- a/android/src/main/java/com/horcrux/svg/SvgViewModule.java +++ b/android/src/main/java/com/horcrux/svg/SvgViewModule.java @@ -14,6 +14,7 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.UiThreadUtil; class SvgViewModule extends ReactContextBaseJavaModule { SvgViewModule(ReactApplicationContext reactContext) { @@ -26,43 +27,50 @@ class SvgViewModule extends ReactContextBaseJavaModule { } static public void toDataURL(final int tag, final ReadableMap options, final Callback successCallback, final int attempt) { - SvgView svg = SvgViewManager.getSvgViewByTag(tag); + UiThreadUtil.runOnUiThread( + new Runnable() { + @Override + public void run() { + SvgView svg = SvgViewManager.getSvgViewByTag(tag); - if (svg == null) { - SvgViewManager.runWhenViewIsAvailable(tag, new Runnable() { - @Override - public void run() { - SvgView svg = SvgViewManager.getSvgViewByTag(tag); - if (svg == null) { // Should never happen - return; - } - svg.setToDataUrlTask(new Runnable() { - @Override - public void run() { - toDataURL(tag, options, successCallback, attempt + 1); + if (svg == null) { + SvgViewManager.runWhenViewIsAvailable(tag, new Runnable() { + @Override + public void run() { + SvgView svg = SvgViewManager.getSvgViewByTag(tag); + if (svg == null) { // Should never happen + return; + } + svg.setToDataUrlTask(new Runnable() { + @Override + public void run() { + toDataURL(tag, options, successCallback, attempt + 1); + } + }); + } + }); + } else if (!svg.isRendered()) { + svg.setToDataUrlTask(new Runnable() { + @Override + public void run() { + toDataURL(tag, options, successCallback, attempt + 1); + } + }); + } else { + if (options != null) { + successCallback.invoke( + svg.toDataURL( + options.getInt("width"), + options.getInt("height") + ) + ); + } else { + successCallback.invoke(svg.toDataURL()); + } } - }); + } } - }); - } else if (!svg.isRendered()) { - svg.setToDataUrlTask(new Runnable() { - @Override - public void run() { - toDataURL(tag, options, successCallback, attempt + 1); - } - }); - } else { - if (options != null) { - successCallback.invoke( - svg.toDataURL( - options.getInt("width"), - options.getInt("height") - ) - ); - } else { - successCallback.invoke(svg.toDataURL()); - } - } + ); } @ReactMethod