CorePlugin hasExplicitMovementMethodPlugin configuration
This commit is contained in:
parent
03770cfe2d
commit
8e332712fe
@ -1,8 +1,17 @@
|
||||
# Changelog
|
||||
|
||||
# $nap;
|
||||
|
||||
#### Added
|
||||
* `core` - `MovementMethodPlugin.none()`, `MovementMethodPlugin.link()` factory methods
|
||||
* `core` - `CorePlugin` `hasExplicitMovementMethodPlugin` configuration method to **not** add implicit `LinkMovementMethod` on `afterSetText`
|
||||
|
||||
#### Changed
|
||||
* `html` - `SimpleTagHandler` visits children tags if supplied tag is block one ([#235])
|
||||
|
||||
#### Deprecated
|
||||
* `core` - `MovementMethodPlugin.create()` use explicit `MovementMethodPlugin.link()` instead
|
||||
|
||||
[#235]: https://github.com/noties/Markwon/issues/235
|
||||
|
||||
# 4.4.0
|
||||
|
@ -115,9 +115,22 @@ public class CorePlugin extends AbstractMarkwonPlugin {
|
||||
// @since 4.0.0
|
||||
private final List<OnTextAddedListener> onTextAddedListeners = new ArrayList<>(0);
|
||||
|
||||
// @since $nap;
|
||||
private boolean hasExplicitMovementMethodPlugin;
|
||||
|
||||
protected CorePlugin() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @since $nap;
|
||||
*/
|
||||
@SuppressWarnings("UnusedReturnValue")
|
||||
@NonNull
|
||||
public CorePlugin hasExplicitMovementMethodPlugin(boolean hasExplicitMovementMethodPlugin) {
|
||||
this.hasExplicitMovementMethodPlugin = hasExplicitMovementMethodPlugin;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be useful to post-process text added. For example for auto-linking capabilities.
|
||||
*
|
||||
@ -188,7 +201,8 @@ public class CorePlugin extends AbstractMarkwonPlugin {
|
||||
// let's ensure that there is a movement method applied
|
||||
// we do it `afterSetText` so any user-defined movement method won't be
|
||||
// replaced (it should be done in `beforeSetText` or manually on a TextView)
|
||||
if (textView.getMovementMethod() == null) {
|
||||
// @since $nap; we additionally check if we should apply _implicit_ movement method
|
||||
if (!hasExplicitMovementMethodPlugin && textView.getMovementMethod() == null) {
|
||||
textView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
}
|
||||
}
|
||||
|
@ -6,8 +6,10 @@ import android.text.method.MovementMethod;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.core.CorePlugin;
|
||||
|
||||
/**
|
||||
* @since 3.0.0
|
||||
@ -19,26 +21,62 @@ public class MovementMethodPlugin extends AbstractMarkwonPlugin {
|
||||
* Uses Android system LinkMovementMethod as default
|
||||
*
|
||||
* @see #create(MovementMethod)
|
||||
* @see #link()
|
||||
* @deprecated $nap; use {@link #link()}
|
||||
*/
|
||||
@NonNull
|
||||
@Deprecated
|
||||
public static MovementMethodPlugin create() {
|
||||
return create(LinkMovementMethod.getInstance());
|
||||
}
|
||||
|
||||
/**
|
||||
* @since $nap;
|
||||
*/
|
||||
@NonNull
|
||||
public static MovementMethodPlugin link() {
|
||||
return create(LinkMovementMethod.getInstance());
|
||||
}
|
||||
|
||||
/**
|
||||
* Special {@link MovementMethodPlugin} that is <strong>not</strong> applying a MovementMethod on a TextView
|
||||
* implicitly
|
||||
*
|
||||
* @since $nap;
|
||||
*/
|
||||
@NonNull
|
||||
public static MovementMethodPlugin none() {
|
||||
return new MovementMethodPlugin(null);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static MovementMethodPlugin create(@NonNull MovementMethod movementMethod) {
|
||||
return new MovementMethodPlugin(movementMethod);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private final MovementMethod movementMethod;
|
||||
|
||||
/**
|
||||
* Since $nap; change to be <em>nullable</em>
|
||||
*/
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
MovementMethodPlugin(@NonNull MovementMethod movementMethod) {
|
||||
MovementMethodPlugin(@Nullable MovementMethod movementMethod) {
|
||||
this.movementMethod = movementMethod;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(@NonNull Registry registry) {
|
||||
registry.require(CorePlugin.class)
|
||||
.hasExplicitMovementMethodPlugin(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
||||
textView.setMovementMethod(movementMethod);
|
||||
// @since $nap; check for equality
|
||||
final MovementMethod current = textView.getMovementMethod();
|
||||
if (current != movementMethod) {
|
||||
textView.setMovementMethod(movementMethod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAb
|
||||
import io.noties.markwon.image.file.FileSchemeHandler;
|
||||
import io.noties.markwon.image.network.OkHttpNetworkSchemeHandler;
|
||||
import io.noties.markwon.image.svg.SvgMediaDecoder;
|
||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import io.noties.markwon.recycler.SimpleEntry;
|
||||
import io.noties.markwon.recycler.table.TableEntry;
|
||||
@ -82,7 +83,6 @@ public class RecyclerActivity extends Activity {
|
||||
@NonNull
|
||||
private static Markwon markwon(@NonNull Context context) {
|
||||
return Markwon.builder(context)
|
||||
.usePlugin(CorePlugin.create())
|
||||
.usePlugin(ImagesPlugin.create(plugin -> {
|
||||
plugin
|
||||
.addSchemeHandler(FileSchemeHandler.createWithAssets(context))
|
||||
|
Loading…
x
Reference in New Issue
Block a user