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-07 00:45:03 +0300
committerstefan-niedermann <info@niedermann.it>2019-02-07 00:45:03 +0300
commitb1b2d64cb754e7409a5829d7ef6476412f0afce4 (patch)
treec70814bf034bff11eab49e0ea5f13e7e9193305c /app/src
parentc8f1581a2b18a2f1ff294f2879a1935ad12eae21 (diff)
Enable link creation and bold/italic toggle
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java70
-rw-r--r--app/src/main/res/drawable/ic_insert_link_black_24dp.xml5
-rw-r--r--app/src/main/res/menu/style.xml4
-rw-r--r--app/src/main/res/values/strings.xml1
4 files changed, 60 insertions, 20 deletions
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
index e601c064..50fea152 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/util/StyleCallback.java
@@ -7,16 +7,16 @@ import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import android.widget.TextView;
+import android.widget.EditText;
import it.niedermann.owncloud.notes.R;
public class StyleCallback implements ActionMode.Callback {
- private TextView textView;
+ private EditText editText;
- public StyleCallback(TextView textView) {
- this.textView = textView;
+ public StyleCallback(EditText editText) {
+ this.editText = editText;
}
@Override
@@ -34,29 +34,39 @@ public class StyleCallback implements ActionMode.Callback {
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- int start = textView.getSelectionStart();
- int end = textView.getSelectionEnd();
- SpannableStringBuilder ssb = new SpannableStringBuilder(textView.getText());
+ int start = editText.getSelectionStart();
+ int end = editText.getSelectionEnd();
+ SpannableStringBuilder ssb = new SpannableStringBuilder(editText.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;
+ if (hasAlreadyMarkdown(start, end, markdown)) {
+ this.removeMarkdown(ssb, start, end, markdown);
+ } else {
+ this.addMarkdown(ssb, start, end, markdown, Typeface.BOLD);
+ }
+ editText.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);
+ if (hasAlreadyMarkdown(start, end, markdown)) {
+ this.removeMarkdown(ssb, start, end, markdown);
+ } else {
+ this.addMarkdown(ssb, start, end, markdown, Typeface.ITALIC);
+ }
+ editText.setText(ssb);
+ break;
+ case R.id.link:
+ ssb.insert(end, "]()");
+ ssb.insert(start, "[");
+ end++;
+ ssb.setSpan(new StyleSpan(Typeface.NORMAL), start, end, 1);
+ editText.setText(ssb);
+ editText.setSelection(end + 2); // after <end>](
+ return true;
}
return false;
}
@@ -65,4 +75,24 @@ public class StyleCallback implements ActionMode.Callback {
public void onDestroyActionMode(ActionMode mode) {
}
+
+ private boolean hasAlreadyMarkdown(int start, int end, String markdown) {
+ return start > markdown.length() && markdown.contentEquals(editText.getText().subSequence(start - markdown.length(), start)) &&
+ editText.getText().length() > end + markdown.length() && markdown.contentEquals(editText.getText().subSequence(end, end + markdown.length()));
+ }
+
+ private void removeMarkdown(SpannableStringBuilder ssb, int start, int end, String markdown) {
+ ssb.delete(start - markdown.length(), start);
+ ssb.delete(end - markdown.length(), end);
+ ssb.setSpan(new StyleSpan(Typeface.NORMAL), start, end, 1);
+ }
+
+ private void addMarkdown(SpannableStringBuilder ssb, int start, int end, String markdown, int typeface) {
+ ssb.insert(end, markdown);
+ ssb.insert(start, markdown);
+ editText.getText().charAt(start);
+ editText.getText().charAt(start + 1);
+ end += markdown.length() * 2;
+ ssb.setSpan(new StyleSpan(typeface), start, end, 1);
+ }
}
diff --git a/app/src/main/res/drawable/ic_insert_link_black_24dp.xml b/app/src/main/res/drawable/ic_insert_link_black_24dp.xml
new file mode 100644
index 00000000..3672c276
--- /dev/null
+++ b/app/src/main/res/drawable/ic_insert_link_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="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
+</vector>
diff --git a/app/src/main/res/menu/style.xml b/app/src/main/res/menu/style.xml
index 5d187654..7d671bb1 100644
--- a/app/src/main/res/menu/style.xml
+++ b/app/src/main/res/menu/style.xml
@@ -9,4 +9,8 @@
android:icon="@drawable/ic_format_bold_black_24dp"
android:title="@string/simple_bold"
app:showAsAction="ifRoom" />
+ <item android:id="@+id/link"
+ android:icon="@drawable/ic_insert_link_black_24dp"
+ android:title="@string/simple_link"
+ 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 3a3f9966..f6528e8a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,6 +17,7 @@
<string name="action_edit_saved">Saved</string>
<string name="simple_about">About</string>
<string name="simple_bold">Bold</string>
+ <string name="simple_link">Link</string>
<string name="simple_italic">Italic</string>
<string name="action_select_note">Select note</string>
<string name="action_note_deleted">Note deleted</string>