diff --git a/CHANGELOG.md b/CHANGELOG.md
index 31fc43d1..8dfd5358 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,12 @@
* module `images`: `GifSupport` and `SvgSupport` use `Class.forName` instead access to full qualified class name
* `ext-table`: fix links in tables ([#224])
* `ext-table`: proper borders (equal for all sides)
+* module `core`: Add `PrecomputedFutureTextSetterCompat`
Thanks [@KirkBushman]
[#216]: https://github.com/noties/Markwon/pull/216
[#224]: https://github.com/noties/Markwon/issues/224
[@francescocervone]: https://github.com/francescocervone
+[@KirkBushman]: https://github.com/KirkBushman
# 4.3.0
diff --git a/markwon-core/src/main/java/io/noties/markwon/PrecomputedFutureTextSetterCompat.java b/markwon-core/src/main/java/io/noties/markwon/PrecomputedFutureTextSetterCompat.java
index 7e164a20..e107341c 100644
--- a/markwon-core/src/main/java/io/noties/markwon/PrecomputedFutureTextSetterCompat.java
+++ b/markwon-core/src/main/java/io/noties/markwon/PrecomputedFutureTextSetterCompat.java
@@ -1,7 +1,6 @@
package io.noties.markwon;
import android.text.Spanned;
-import android.util.Log;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -10,12 +9,14 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.text.PrecomputedTextCompat;
import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
/**
* Please note this class requires `androidx.core:core` artifact being explicitly added to your dependencies.
* This is intended to be used in a RecyclerView.
*
* @see io.noties.markwon.Markwon.TextSetter
+ * @since $nap;
*/
public class PrecomputedFutureTextSetterCompat implements Markwon.TextSetter {
@@ -47,16 +48,18 @@ public class PrecomputedFutureTextSetterCompat implements Markwon.TextSetter {
@NonNull Spanned markdown,
@NonNull TextView.BufferType bufferType,
@NonNull Runnable onComplete) {
-
if (textView instanceof AppCompatTextView) {
- ((AppCompatTextView) textView).setTextFuture(PrecomputedTextCompat.getTextFuture(
- markdown, ((AppCompatTextView) textView).getTextMetricsParamsCompat(), executor
- ));
-
+ final AppCompatTextView appCompatTextView = (AppCompatTextView) textView;
+ final Future future = PrecomputedTextCompat.getTextFuture(
+ markdown,
+ appCompatTextView.getTextMetricsParamsCompat(),
+ executor);
+ appCompatTextView.setTextFuture(future);
+ // `setTextFuture` is actually a synchronous call, so we should call onComplete now
onComplete.run();
} else {
-
- throw new IllegalStateException("TextView provided is not a child of AppCompatTextView, cannot call setTextFuture().");
+ throw new IllegalStateException("TextView provided is not an instance of AppCompatTextView, " +
+ "cannot call setTextFuture(), textView: " + textView);
}
}
}