diff options
author | stefan-niedermann <info@niedermann.it> | 2019-02-06 23:47:14 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2019-02-06 23:47:14 +0300 |
commit | c8f1581a2b18a2f1ff294f2879a1935ad12eae21 (patch) | |
tree | 22d20a4c523ad8900eebac8223aa8e055b9f9533 /app/src | |
parent | a734da49461f69b21d8898a2f3d3d1f0c0b154ed (diff) |
#363 Context based formatting
Diffstat (limited to 'app/src')
7 files changed, 113 insertions, 23 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java index 8f64b108..e317235d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java @@ -3,7 +3,6 @@ package it.niedermann.owncloud.notes.android.fragment; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import androidx.annotation.Nullable; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -18,12 +17,14 @@ import com.yydcdut.markdown.syntax.edit.EditFactory; import com.yydcdut.rxmarkdown.RxMDEditText; import com.yydcdut.rxmarkdown.RxMarkdown; +import androidx.annotation.Nullable; import butterknife.BindView; import butterknife.ButterKnife; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.model.CloudNote; import it.niedermann.owncloud.notes.util.ICallback; import it.niedermann.owncloud.notes.util.MarkDownUtil; +import it.niedermann.owncloud.notes.util.StyleCallback; import rx.Subscriber; public class NoteEditFragment extends BaseNoteFragment { @@ -120,23 +121,24 @@ public class NoteEditFragment extends BaseNoteFragment { editContent.setEnabled(true); RxMarkdown.live(editContent) - .config(MarkDownUtil.getMarkDownConfiguration(getActivity().getApplicationContext()).build()) - .factory(EditFactory.create()) - .intoObservable() - .subscribe(new Subscriber<CharSequence>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onNext(CharSequence charSequence) { - editContent.setText(charSequence, TextView.BufferType.SPANNABLE); - } - }); + .config(MarkDownUtil.getMarkDownConfiguration(getActivity().getApplicationContext()).build()) + .factory(EditFactory.create()) + .intoObservable() + .subscribe(new Subscriber<CharSequence>() { + @Override + public void onCompleted() { + } + + @Override + public void onError(Throwable e) { + } + + @Override + public void onNext(CharSequence charSequence) { + editContent.setText(charSequence, TextView.BufferType.SPANNABLE); + } + }); + editContent.setCustomSelectionActionModeCallback(new StyleCallback(this.editContent)); } @Override 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 ac49c2ea..c661bf20 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 @@ -1,11 +1,6 @@ package it.niedermann.owncloud.notes.android.fragment; import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.core.content.res.ResourcesCompat; -import androidx.core.content.res.TypedArrayUtils; -import androidx.core.text.TextUtilsCompat; - import android.text.method.LinkMovementMethod; import android.util.Log; import android.view.LayoutInflater; @@ -18,6 +13,7 @@ import com.yydcdut.markdown.syntax.text.TextFactory; import com.yydcdut.rxmarkdown.RxMDTextView; import com.yydcdut.rxmarkdown.RxMarkdown; +import androidx.annotation.Nullable; import butterknife.BindView; import butterknife.ButterKnife; import it.niedermann.owncloud.notes.R; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java b/app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java new file mode 100644 index 00000000..e601c064 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java @@ -0,0 +1,68 @@ +package it.niedermann.owncloud.notes.util; + +import android.graphics.Typeface; +import android.text.SpannableStringBuilder; +import android.text.style.StyleSpan; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.TextView; + +import it.niedermann.owncloud.notes.R; + +public class StyleCallback implements ActionMode.Callback { + + private TextView textView; + + public StyleCallback(TextView textView) { + this.textView = textView; + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + MenuInflater inflater = mode.getMenuInflater(); + inflater.inflate(R.menu.style, menu); + menu.removeItem(android.R.id.selectAll); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + int start = textView.getSelectionStart(); + int end = textView.getSelectionEnd(); + SpannableStringBuilder ssb = new SpannableStringBuilder(textView.getText()); + final String markdown; + + switch(item.getItemId()) { + case R.id.bold: + markdown = "**"; + ssb.insert(end, markdown); + ssb.insert(start, markdown); + textView.getText().charAt(start); + textView.getText().charAt(start + 1); + end += markdown.length() * 2; + ssb.setSpan(new StyleSpan(Typeface.BOLD), start, end, 1); + textView.setText(ssb); + break; + case R.id.italic: + markdown = "*"; + ssb.insert(end, markdown); + ssb.insert(start, markdown); + end += markdown.length() * 2; + ssb.setSpan(new StyleSpan(Typeface.ITALIC), start, end, 1); + textView.setText(ssb); + } + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + + } +} diff --git a/app/src/main/res/drawable/ic_format_bold_black_24dp.xml b/app/src/main/res/drawable/ic_format_bold_black_24dp.xml new file mode 100644 index 00000000..625077f9 --- /dev/null +++ b/app/src/main/res/drawable/ic_format_bold_black_24dp.xml @@ -0,0 +1,5 @@ +<vector android:autoMirrored="true" android:height="24dp" + android:tint="#666666" android:viewportHeight="24.0" + android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M15.6,10.79c0.97,-0.67 1.65,-1.77 1.65,-2.79 0,-2.26 -1.75,-4 -4,-4L7,4v14h7.04c2.09,0 3.71,-1.7 3.71,-3.79 0,-1.52 -0.86,-2.82 -2.15,-3.42zM10,6.5h3c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5h-3v-3zM13.5,15.5L10,15.5v-3h3.5c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5z"/> +</vector> diff --git a/app/src/main/res/drawable/ic_format_italic_black_24dp.xml b/app/src/main/res/drawable/ic_format_italic_black_24dp.xml new file mode 100644 index 00000000..48f2605e --- /dev/null +++ b/app/src/main/res/drawable/ic_format_italic_black_24dp.xml @@ -0,0 +1,5 @@ +<vector android:autoMirrored="true" android:height="24dp" + android:tint="#666666" android:viewportHeight="24.0" + android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M10,4v3h2.21l-3.42,8H6v3h8v-3h-2.21l3.42,-8H18V4z"/> +</vector> diff --git a/app/src/main/res/menu/style.xml b/app/src/main/res/menu/style.xml new file mode 100644 index 00000000..5d187654 --- /dev/null +++ b/app/src/main/res/menu/style.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:id="@+id/italic" + android:icon="@drawable/ic_format_italic_black_24dp" + android:title="@string/simple_italic" + app:showAsAction="ifRoom" /> + <item android:id="@+id/bold" + android:icon="@drawable/ic_format_bold_black_24dp" + android:title="@string/simple_bold" + app:showAsAction="ifRoom" /> +</menu>
\ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4cb773ef..3a3f9966 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,6 +16,8 @@ <string name="action_edit_saving">Saving …</string> <string name="action_edit_saved">Saved</string> <string name="simple_about">About</string> + <string name="simple_bold">Bold</string> + <string name="simple_italic">Italic</string> <string name="action_select_note">Select note</string> <string name="action_note_deleted">Note deleted</string> <string name="action_note_restored">Note restored</string> |