Allow toggling checkboxes from within the preview #157 #287

This commit is contained in:
stefan-niedermann 2019-12-30 21:51:51 +01:00
parent eccc4e2aa0
commit eff22edc8f

View file

@ -4,6 +4,7 @@ import android.content.SharedPreferences;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -35,6 +36,8 @@ public class NotePreviewFragment extends BaseNoteFragment {
private NoteSQLiteOpenHelper db = null; private NoteSQLiteOpenHelper db = null;
private String changedText;
MarkdownProcessor markdownProcessor; MarkdownProcessor markdownProcessor;
@BindView(R.id.swiperefreshlayout) @BindView(R.id.swiperefreshlayout)
@ -71,9 +74,34 @@ public class NotePreviewFragment extends BaseNoteFragment {
ButterKnife.bind(this, Objects.requireNonNull(getView())); ButterKnife.bind(this, Objects.requireNonNull(getView()));
markdownProcessor = new MarkdownProcessor(getActivity()); markdownProcessor = new MarkdownProcessor(getActivity());
markdownProcessor.factory(TextFactory.create()); markdownProcessor.factory(TextFactory.create());
markdownProcessor.config(MarkDownUtil.getMarkDownConfiguration(noteContent.getContext()).build()); markdownProcessor.config(
MarkDownUtil.getMarkDownConfiguration(noteContent.getContext())
.setOnTodoClickCallback((view, line, lineNumber) -> {
String[] lines = TextUtils.split(note.getContent(), "\\r?\\n");
/*
* Workaround for a bug when checkbox is the last line:
* When (un)checking a checkbox which is in the last line, every time it gets toggled, the last character of the line gets lost.
*/
if ((lines.length - 1) == lineNumber) {
if(lines[lineNumber].contains("- [ ]")) {
lines[lineNumber] = lines[lineNumber].replace("- [ ]", "- [x]");
} else {
lines[lineNumber] = lines[lineNumber].replace("- [x]", "- [ ]");
}
} else if (lines.length >= lineNumber) {
lines[lineNumber] = line;
}
changedText = TextUtils.join("\n", lines);
noteContent.setText(markdownProcessor.parse(changedText));
saveNote(null);
return line;
}
)
.build());
setActiveTextView(noteContent); setActiveTextView(noteContent);
noteContent.setText(markdownProcessor.parse(note.getContent())); noteContent.setText(markdownProcessor.parse(note.getContent()));
changedText = note.getContent();
noteContent.setMovementMethod(LinkMovementMethod.getInstance()); noteContent.setMovementMethod(LinkMovementMethod.getInstance());
db = NoteSQLiteOpenHelper.getInstance(getActivity().getApplicationContext()); db = NoteSQLiteOpenHelper.getInstance(getActivity().getApplicationContext());
@ -81,7 +109,7 @@ public class NotePreviewFragment extends BaseNoteFragment {
swipeRefreshLayout.setOnRefreshListener(() -> { swipeRefreshLayout.setOnRefreshListener(() -> {
if (db.getNoteServerSyncHelper().isSyncPossible()) { if (db.getNoteServerSyncHelper().isSyncPossible()) {
swipeRefreshLayout.setRefreshing(true); swipeRefreshLayout.setRefreshing(true);
db.getNoteServerSyncHelper().addCallbackPull( new ICallback() { db.getNoteServerSyncHelper().addCallbackPull(new ICallback() {
@Override @Override
public void onFinish() { public void onFinish() {
noteContent.setText(markdownProcessor.parse(db.getNote(note.getAccountId(), note.getId()).getContent())); noteContent.setText(markdownProcessor.parse(db.getNote(note.getAccountId(), note.getId()).getContent()));
@ -108,6 +136,6 @@ public class NotePreviewFragment extends BaseNoteFragment {
@Override @Override
protected String getContent() { protected String getContent() {
return note.getContent(); return changedText;
} }
} }