Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee06cb6e authored by Stefan Niedermann's avatar Stefan Niedermann Committed by Niedermann IT-Dienstleistungen
Browse files

Allow listeners instead of LiveData

parent 9cc9f7a4
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.LiveData;

import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;

/**
@@ -34,10 +35,16 @@ public interface MarkdownEditor {
    }

    /**
     * @return the source {@link String} of the currently rendered markdown
     * @return the source {@link CharSequence} of the currently rendered markdown
     */
    LiveData<CharSequence> getMarkdownString();

    /**
     * Similar to {@link #getMarkdownString()} but without {@link LiveData}.
     * @param onChange a {@link Consumer} which will receive the changed markdown string.
     */
    void registerMarkdownStringChangedListener(@NonNull Consumer<CharSequence> onChange);

    void setEnabled(boolean enabled);

    /**
+13 −0
Original line number Diff line number Diff line
@@ -14,6 +14,10 @@ import androidx.appcompat.widget.AppCompatEditText;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import java.util.Collection;
import java.util.LinkedList;
import java.util.function.Consumer;

import io.noties.markwon.Markwon;
import io.noties.markwon.editor.MarkwonEditor;
import io.noties.markwon.editor.handler.EmphasisEditHandler;
@@ -39,6 +43,7 @@ public class MarkwonMarkdownEditor extends AppCompatEditText implements Markdown

    private static final String TAG = MarkwonMarkdownEditor.class.getSimpleName();

    private final Collection<Consumer<CharSequence>> markdownStringListeners = new LinkedList<>();
    private final MutableLiveData<CharSequence> unrenderedText$ = new MutableLiveData<>();
    private final CombinedTextWatcher combinedWatcher;

@@ -117,10 +122,18 @@ public class MarkwonMarkdownEditor extends AppCompatEditText implements Markdown
     */
    public void setMarkdownStringModel(CharSequence text) {
        unrenderedText$.setValue(text == null ? "" : text.toString());
        for (Consumer<CharSequence> listener : markdownStringListeners) {
            listener.accept(text);
        }
    }

    @Override
    public LiveData<CharSequence> getMarkdownString() {
        return unrenderedText$;
    }

    @Override
    public void registerMarkdownStringChangedListener(@NonNull Consumer<CharSequence> onChange) {
        this.markdownStringListeners.add(onChange);
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -12,9 +12,12 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Consumer;
import java.util.function.Function;

import io.noties.markwon.Markwon;
@@ -52,6 +55,7 @@ public class MarkwonMarkdownViewer extends AppCompatTextView implements Markdown
    private static final Prism4j prism4j = new Prism4j(new MarkwonGrammarLocator());

    private Markwon markwon;
    private final Collection<Consumer<CharSequence>> markdownStringListeners = new LinkedList<>();
    private final MutableLiveData<CharSequence> unrenderedText$ = new MutableLiveData<>();

    private final ExecutorService renderService;
@@ -126,6 +130,9 @@ public class MarkwonMarkdownViewer extends AppCompatTextView implements Markdown
    public void setMarkdownString(CharSequence text) {
        final CharSequence previousText = this.unrenderedText$.getValue();
        this.unrenderedText$.setValue(text);
        for (Consumer<CharSequence> listener : markdownStringListeners) {
            listener.accept(text);
        }
        if (TextUtils.isEmpty(text)) {
            setText(text);
        } else {
@@ -165,4 +172,9 @@ public class MarkwonMarkdownViewer extends AppCompatTextView implements Markdown
    public LiveData<CharSequence> getMarkdownString() {
        return distinctUntilChanged(this.unrenderedText$);
    }

    @Override
    public void registerMarkdownStringChangedListener(@NonNull Consumer<CharSequence> onChange) {
        this.markdownStringListeners.add(onChange);
    }
}