diff options
author | stefan-niedermann <info@niedermann.it> | 2020-01-02 14:35:33 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2020-01-02 14:35:33 +0300 |
commit | 11be26bf80694b63ee28bdb7d3e550dd1261755e (patch) | |
tree | 6cf386f6a398f9a570a339450f5d9ac1f41a7f47 | |
parent | 90cd9a1bdae2ac869dbb6bae863afdaf60a38dc2 (diff) | |
parent | 1ffb6280d326b71b5a5b4c925595fe251e2b1245 (diff) |
Merge remote-tracking branch 'origin/master'v2.4.0
-rw-r--r-- | app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NotePreviewFragment.java | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NotePreviewFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NotePreviewFragment.java index 032ea2b7..892ca681 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NotePreviewFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NotePreviewFragment.java @@ -4,6 +4,7 @@ import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; import android.preference.PreferenceManager; +import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.util.TypedValue; import android.view.LayoutInflater; @@ -75,28 +76,46 @@ public class NotePreviewFragment extends BaseNoteFragment { markdownProcessor.factory(TextFactory.create()); 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; -// } -// ) + .setOnTodoClickCallback((view, line, lineNumber) -> { + try { + String[] lines = TextUtils.split(note.getContent(), "\\r?\\n"); + /* + * Workaround for RxMarkdown-bug: + * When (un)checking a checkbox in a note which contains code-blocks, the "`"-characters get stripped out in the TextView and therefore the given lineNumber is wrong + * Find number of lines starting with ``` before lineNumber + */ + for(int i = 0; i < lines.length; i++) { + if(lines[i].startsWith("```")) { + lineNumber++; + } + if(i == lineNumber) { + break; + } + } + + /* + * Workaround for multiple RxMarkdown-bugs: + * When (un)checking a checkbox which is in the last line, every time it gets toggled, the last character of the line gets lost. + * When (un)checking a checkbox, every markdown gets stripped in the given line argument + */ + if (lines[lineNumber].startsWith("- [ ]") || lines[lineNumber].startsWith("* [ ]")) { + lines[lineNumber] = lines[lineNumber].replace("- [ ]", "- [x]"); + lines[lineNumber] = lines[lineNumber].replace("* [ ]", "* [x]"); + } else { + lines[lineNumber] = lines[lineNumber].replace("- [x]", "- [ ]"); + lines[lineNumber] = lines[lineNumber].replace("* [x]", "* [ ]"); + } + + changedText = TextUtils.join("\n", lines); + noteContent.setText(markdownProcessor.parse(changedText)); + saveNote(null); + } catch (IndexOutOfBoundsException e) { + Toast.makeText(getActivity(), "Checkbox could not be toggled.", Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + } + return line; + } + ) .build()); setActiveTextView(noteContent); noteContent.setText(markdownProcessor.parse(note.getContent())); @@ -111,7 +130,8 @@ public class NotePreviewFragment extends BaseNoteFragment { db.getNoteServerSyncHelper().addCallbackPull(new ICallback() { @Override public void onFinish() { - noteContent.setText(markdownProcessor.parse(db.getNote(note.getAccountId(), note.getId()).getContent())); + note = db.getNote(note.getAccountId(), note.getId()); + noteContent.setText(markdownProcessor.parse(note.getContent())); swipeRefreshLayout.setRefreshing(false); } |