Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorstefan-niedermann <info@niedermann.it>2019-02-06 23:47:14 +0300
committerstefan-niedermann <info@niedermann.it>2019-02-06 23:47:14 +0300
commitc8f1581a2b18a2f1ff294f2879a1935ad12eae21 (patch)
tree22d20a4c523ad8900eebac8223aa8e055b9f9533 /app/src
parenta734da49461f69b21d8898a2f3d3d1f0c0b154ed (diff)
#363 Context based formatting
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java38
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NotePreviewFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java68
-rw-r--r--app/src/main/res/drawable/ic_format_bold_black_24dp.xml5
-rw-r--r--app/src/main/res/drawable/ic_format_italic_black_24dp.xml5
-rw-r--r--app/src/main/res/menu/style.xml12
-rw-r--r--app/src/main/res/values/strings.xml2
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 &#8230;</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>