From c68aeabcf917bc4d7c90104756afd869d946385e Mon Sep 17 00:00:00 2001
From: Dimitry Ivanov <di@noties.io>
Date: Wed, 3 Jul 2019 12:00:02 +0300
Subject: [PATCH] Fix JLatexMathPlugin (backgroundProvider null)

---
 .../markwon/ext/latex/JLatexMathPlugin.java   | 19 +++++++++-
 .../markwon/sample/latex/LatexActivity.java   | 36 +++++++++----------
 2 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java
index 6e3ea341..75fe50b4 100644
--- a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java
+++ b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java
@@ -6,6 +6,7 @@ import android.os.Handler;
 import android.os.Looper;
 import android.os.SystemClock;
 import android.text.Spanned;
+import android.util.Log;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
@@ -262,12 +263,28 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin {
                 cache.put(drawable, config.executorService.submit(new Runnable() {
                     @Override
                     public void run() {
+                        // @since 4.0.1 wrap in try-catch block and add error logging
+                        try {
+                            execute();
+                        } catch (Throwable t) {
+                            Log.e(
+                                    "JLatexMathPlugin",
+                                    "Error displaying latex: `" + drawable.getDestination() + "`",
+                                    t);
+                        }
+                    }
+
+                    private void execute() {
+
+                        // @since 4.0.1 (background provider can be null)
+                        final BackgroundProvider backgroundProvider = config.backgroundProvider;
 
                         // create JLatexMathDrawable
+                        //noinspection ConstantConditions
                         final JLatexMathDrawable jLatexMathDrawable =
                                 JLatexMathDrawable.builder(drawable.getDestination())
                                         .textSize(config.textSize)
-                                        .background(config.backgroundProvider.provide())
+                                        .background(backgroundProvider != null ? backgroundProvider.provide() : null)
                                         .align(config.align)
                                         .fitCanvas(config.fitCanvas)
                                         .padding(
diff --git a/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java b/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java
index 93c21e19..e2c45dc5 100644
--- a/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java
@@ -47,24 +47,24 @@ public class LatexActivity extends Activity {
                 + latex + "$$\n\n something like **this**";
 
         final Markwon markwon = Markwon.builder(this)
-//                .usePlugin(ImagesPlugin.create(this))
-                .usePlugin(JLatexMathPlugin.create(textView.getTextSize(), new JLatexMathPlugin.BuilderConfigure() {
-                    @Override
-                    public void configureBuilder(@NonNull JLatexMathPlugin.Builder builder) {
-                        builder
-                                .backgroundProvider(new JLatexMathPlugin.BackgroundProvider() {
-                                    @NonNull
-                                    @Override
-                                    public Drawable provide() {
-                                        return new ColorDrawable(0x40ff0000);
-                                    }
-                                })
-                                .fitCanvas(true)
-                                .align(JLatexMathDrawable.ALIGN_LEFT)
-                                .padding(48)
-                        ;
-                    }
-                }))
+//                .usePlugin(JLatexMathPlugin.create(textView.getTextSize(), new JLatexMathPlugin.BuilderConfigure() {
+//                    @Override
+//                    public void configureBuilder(@NonNull JLatexMathPlugin.Builder builder) {
+//                        builder
+//                                .backgroundProvider(new JLatexMathPlugin.BackgroundProvider() {
+//                                    @NonNull
+//                                    @Override
+//                                    public Drawable provide() {
+//                                        return new ColorDrawable(0x40ff0000);
+//                                    }
+//                                })
+//                                .fitCanvas(true)
+//                                .align(JLatexMathDrawable.ALIGN_LEFT)
+//                                .padding(48)
+//                        ;
+//                    }
+//                }))
+                .usePlugin(JLatexMathPlugin.create(textView.getTextSize()))
                 .build();
 
         if (true) {