From e9869df6aeb171a8978d6d4790416f1961e40487 Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Sun, 10 Jan 2021 15:51:19 +0100 Subject: Fix #1032 Save page title when sharing from browser --- .../owncloud/notes/shared/util/DisplayUtils.java | 132 --------------------- .../owncloud/notes/shared/util/ShareUtil.java | 28 +++++ 2 files changed, 28 insertions(+), 132 deletions(-) delete mode 100644 app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java (limited to 'app/src/main/java/it/niedermann/owncloud/notes/shared') diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java deleted file mode 100644 index f270fa9f..00000000 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Nextcloud Notes application - * - * @author Mario Danic - * Copyright (C) 2018 Mario Danic - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package it.niedermann.owncloud.notes.shared.util; - -import android.content.Context; -import android.graphics.Color; -import android.text.Spannable; -import android.text.TextPaint; -import android.text.TextUtils; -import android.text.style.MetricAffectingSpan; - -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import it.niedermann.android.util.ColorUtil; -import it.niedermann.owncloud.notes.NotesApplication; -import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.branding.BrandingUtil; - -public class DisplayUtils { - - private DisplayUtils() { - - } - - public static Spannable searchAndColor(Spannable spannable, CharSequence searchText, @NonNull Context context, @Nullable Integer current, @ColorInt int mainColor, @ColorInt int textColor) { - CharSequence text = spannable.toString(); - - Object[] spansToRemove = spannable.getSpans(0, text.length(), Object.class); - for (Object span : spansToRemove) { - if (span instanceof SearchSpan) - spannable.removeSpan(span); - } - - if (TextUtils.isEmpty(text) || TextUtils.isEmpty(searchText)) { - return spannable; - } - - Matcher m = Pattern.compile(searchText.toString(), Pattern.CASE_INSENSITIVE | Pattern.LITERAL) - .matcher(text); - - int i = 1; - while (m.find()) { - int start = m.start(); - int end = m.end(); - spannable.setSpan(new SearchSpan(context, mainColor, textColor, (current != null && i == current)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - i++; - } - - return spannable; - } - - - static class SearchSpan extends MetricAffectingSpan { - - private final boolean current; - @NonNull - Context context; - @ColorInt - private final int mainColor; - @ColorInt - private final int textColor; - @ColorInt - private final int highlightColor; - - SearchSpan(@NonNull Context context, @ColorInt int mainColor, @ColorInt int textColor, boolean current) { - this.context = context; - this.mainColor = mainColor; - this.textColor = textColor; - this.current = current; - this.highlightColor = ContextCompat.getColor(context, R.color.bg_highlighted); - } - - @Override - public void updateDrawState(TextPaint tp) { - if (current) { - if (NotesApplication.isDarkThemeActive(context)) { - if (ColorUtil.INSTANCE.isColorDark(mainColor)) { - tp.bgColor = Color.WHITE; - tp.setColor(mainColor); - } else { - tp.bgColor = mainColor; - tp.setColor(Color.BLACK); - } - } else { - if (ColorUtil.INSTANCE.isColorDark(mainColor)) { - tp.bgColor = mainColor; - tp.setColor(Color.WHITE); - } else { - if (NotesColorUtil.contrastRatioIsSufficient(mainColor, highlightColor)) { - tp.bgColor = highlightColor; - } else { - tp.bgColor = Color.BLACK; - } - tp.setColor(mainColor); - } - } - } else { - tp.bgColor = highlightColor; - tp.setColor(BrandingUtil.getSecondaryForegroundColorDependingOnTheme(context, mainColor)); - } - tp.setFakeBoldText(true); - } - - @Override - public void updateMeasureState(@NonNull TextPaint tp) { - tp.setFakeBoldText(true); - } - } -} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java index 09ad7124..115d18dd 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java @@ -6,6 +6,11 @@ import android.content.Intent; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import java.net.MalformedURLException; +import java.net.URL; + +import it.niedermann.android.markdown.MarkdownUtil; + import static android.content.ClipDescription.MIMETYPE_TEXT_PLAIN; public class ShareUtil { @@ -17,4 +22,27 @@ public class ShareUtil { .putExtra(Intent.EXTRA_TITLE, subject) .putExtra(Intent.EXTRA_TEXT, text), subject)); } + + public static String extractSharedText(@NonNull Intent intent) { + final String text = intent.getStringExtra(Intent.EXTRA_TEXT); + if (intent.hasExtra(Intent.EXTRA_SUBJECT)) { + final String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT); + try { + new URL(text); + if (text != null && subject != null && !subject.trim().isEmpty()) { + return MarkdownUtil.getMarkdownLink(subject, text); + } else { + return text; + } + } catch (MalformedURLException e) { + if (subject != null && !subject.trim().isEmpty()) { + return subject + ": " + text; + } else { + return text; + } + } + } else { + return text; + } + } } -- cgit v1.2.3 From b80aeff1ca2e01c898cb83d0db753ad9a43621a4 Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Sun, 10 Jan 2021 16:13:57 +0100 Subject: Move removeMarkdown() util method to MarkdownUtil --- .../owncloud/notes/shared/model/CloudNote.java | 3 +- .../owncloud/notes/shared/util/NoteUtil.java | 43 ++++------------------ 2 files changed, 10 insertions(+), 36 deletions(-) (limited to 'app/src/main/java/it/niedermann/owncloud/notes/shared') diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CloudNote.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CloudNote.java index cf6c51e8..e194b11e 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CloudNote.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CloudNote.java @@ -7,6 +7,7 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; +import it.niedermann.android.markdown.MarkdownUtil; import it.niedermann.owncloud.notes.shared.util.NoteUtil; /** @@ -46,7 +47,7 @@ public class CloudNote implements Serializable { } public void setTitle(String title) { - this.title = NoteUtil.removeMarkDown(title); + this.title = MarkdownUtil.removeMarkdown(title); } public Calendar getModified() { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java index 014d3377..5033417c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java @@ -7,10 +7,10 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.util.regex.Pattern; - import it.niedermann.owncloud.notes.R; +import static it.niedermann.android.markdown.MarkdownUtil.removeMarkdown; + /** * Provides basic functionality for Note operations. * Created by stefan on 06.10.15. @@ -18,39 +18,12 @@ import it.niedermann.owncloud.notes.R; @SuppressWarnings("WeakerAccess") public class NoteUtil { - private static final Pattern pLists = Pattern.compile("^\\s*[*+-]\\s+", Pattern.MULTILINE); - private static final Pattern pHeadings = Pattern.compile("^#+\\s+(.*?)\\s*#*$", Pattern.MULTILINE); - private static final Pattern pHeadingLine = Pattern.compile("^(?:=*|-*)$", Pattern.MULTILINE); - private static final Pattern pEmphasis = Pattern.compile("(\\*+|_+)(.*?)\\1", Pattern.MULTILINE); - private static final Pattern pSpace1 = Pattern.compile("^\\s+", Pattern.MULTILINE); - private static final Pattern pSpace2 = Pattern.compile("\\s+$", Pattern.MULTILINE); - public static final String EXCERPT_LINE_SEPARATOR = " "; private NoteUtil() { } - /** - * Strips all MarkDown from the given String - * - * @param s String - MarkDown - * @return Plain Text-String - */ - @NonNull - public static String removeMarkDown(@Nullable String s) { - if (s == null) - return ""; - String result = s; - result = pLists.matcher(result).replaceAll(""); - result = pHeadings.matcher(result).replaceAll("$1"); - result = pHeadingLine.matcher(result).replaceAll(""); - result = pEmphasis.matcher(result).replaceAll("$2"); - result = pSpace1.matcher(result).replaceAll(""); - result = pSpace2.matcher(result).replaceAll(""); - return result; - } - /** * Checks if a line is empty. *
@@ -65,7 +38,7 @@ public class NoteUtil {
      * @return boolean isEmpty
      */
     public static boolean isEmptyLine(@Nullable String line) {
-        return removeMarkDown(line).trim().length() == 0;
+        return removeMarkdown(line).trim().length() == 0;
     }
 
     /**
@@ -90,12 +63,12 @@ public class NoteUtil {
      */
     @NonNull
     public static String generateNoteExcerpt(@NonNull String content, @Nullable String title) {
-        content = removeMarkDown(content.trim());
+        content = removeMarkdown(content.trim());
         if(TextUtils.isEmpty(content)) {
             return "";
         }
         if (!TextUtils.isEmpty(title)) {
-            final String trimmedTitle = removeMarkDown(title.trim());
+            final String trimmedTitle = removeMarkdown(title.trim());
             if (content.startsWith(trimmedTitle)) {
                 content = content.substring(trimmedTitle.length());
             }
@@ -120,7 +93,7 @@ public class NoteUtil {
      */
     @NonNull
     public static String generateNoteTitle(@NonNull String content) {
-        return getLineWithoutMarkDown(content, 0);
+        return getLineWithoutMarkdown(content, 0);
     }
 
     /**
@@ -131,7 +104,7 @@ public class NoteUtil {
      * @return lineContent String
      */
     @NonNull
-    public static String getLineWithoutMarkDown(@NonNull String content, int lineNumber) {
+    public static String getLineWithoutMarkdown(@NonNull String content, int lineNumber) {
         String line = "";
         if (content.contains("\n")) {
             String[] lines = content.split("\n");
@@ -140,7 +113,7 @@ public class NoteUtil {
                 currentLine++;
             }
             if (currentLine < lines.length) {
-                line = NoteUtil.removeMarkDown(lines[currentLine]);
+                line = removeMarkdown(lines[currentLine]);
             }
         } else {
             line = content;
-- 
cgit v1.2.3


From 7793c35d252f3f87e36d34e7656b7fd243ff0ba7 Mon Sep 17 00:00:00 2001
From: Stefan Niedermann 
Date: Sun, 10 Jan 2021 16:16:19 +0100
Subject: Use term "Markdown" instead of "MarkDown"

---
 .../main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'app/src/main/java/it/niedermann/owncloud/notes/shared')

diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java
index 5033417c..123e0e73 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java
@@ -97,7 +97,7 @@ public class NoteUtil {
     }
 
     /**
-     * Reads the requested line and strips all MarkDown. If line is empty, it will go ahead to find the next not-empty line.
+     * Reads the requested line and strips all Markdown. If line is empty, it will go ahead to find the next not-empty line.
      *
      * @param content    String
      * @param lineNumber int
-- 
cgit v1.2.3