diff options
5 files changed, 45 insertions, 141 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java index 23e68804..980e5e0e 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java @@ -1,7 +1,7 @@ package it.niedermann.owncloud.notes; -import android.content.Intent; import android.os.Bundle; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Toast; @@ -9,8 +9,9 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; -import it.niedermann.owncloud.notes.shared.model.DBNote; import it.niedermann.owncloud.notes.main.MainActivity; +import it.niedermann.owncloud.notes.shared.model.DBNote; +import it.niedermann.owncloud.notes.shared.util.ShareUtil; public class AppendToNoteActivity extends MainActivity { @@ -22,8 +23,7 @@ public class AppendToNoteActivity extends MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final Intent receivedIntent = getIntent(); - receivedText = receivedIntent.getStringExtra(Intent.EXTRA_TEXT); + receivedText = ShareUtil.extractSharedText(getIntent()); @Nullable final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { getSupportActionBar().setTitle(R.string.append_to_note); @@ -35,7 +35,7 @@ public class AppendToNoteActivity extends MainActivity { @Override public void onNoteClick(int position, View v) { - if (receivedText != null && receivedText.length() > 0) { + if (!TextUtils.isEmpty(receivedText)) { final DBNote note = db.getNote(localAccount.getId(), ((DBNote) adapter.getItem(position)).getId()); final String oldContent = note.getContent(); String newContent; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java index 53f97d85..6ffa750b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java @@ -15,19 +15,23 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Calendar; import java.util.Objects; +import it.niedermann.android.markdown.MarkdownUtil; import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.databinding.ActivityEditBinding; import it.niedermann.owncloud.notes.accountpicker.AccountPickerListener; +import it.niedermann.owncloud.notes.databinding.ActivityEditBinding; import it.niedermann.owncloud.notes.main.MainActivity; import it.niedermann.owncloud.notes.shared.model.Category; import it.niedermann.owncloud.notes.shared.model.CloudNote; import it.niedermann.owncloud.notes.shared.model.DBNote; import it.niedermann.owncloud.notes.shared.model.LocalAccount; import it.niedermann.owncloud.notes.shared.util.NoteUtil; +import it.niedermann.owncloud.notes.shared.util.ShareUtil; public class EditNoteActivity extends LockedActivity implements BaseNoteFragment.NoteFragmentListener, AccountPickerListener { @@ -170,7 +174,7 @@ public class EditNoteActivity extends LockedActivity implements BaseNoteFragment (Intent.ACTION_SEND.equals(intent.getAction()) || INTENT_GOOGLE_ASSISTANT.equals(intent.getAction())) ) { - content = intent.getStringExtra(Intent.EXTRA_TEXT); + content = ShareUtil.extractSharedText(intent); } else if (intent.hasExtra(PARAM_CONTENT)) { content = intent.getStringExtra(PARAM_CONTENT); } 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 <mario@lovelyhq.com> - * - * 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 <http://www.gnu.org/licenses/>. - */ -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; + } + } } diff --git a/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java b/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java index e6d2c90e..8a3ced15 100644 --- a/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java +++ b/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java @@ -23,8 +23,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import io.noties.markwon.Markwon; -import it.niedermann.android.markdown.model.SearchSpan; import it.niedermann.android.markdown.model.EListType; +import it.niedermann.android.markdown.model.SearchSpan; public class MarkdownUtil { @@ -297,7 +297,7 @@ public class MarkdownUtil { return false; } - public static void searchAndColor(@NonNull Spannable editable, @Nullable CharSequence searchText,@Nullable Integer current, @ColorInt int mainColor, @ColorInt int highlightColor, boolean darkTheme) { + public static void searchAndColor(@NonNull Spannable editable, @Nullable CharSequence searchText, @Nullable Integer current, @ColorInt int mainColor, @ColorInt int highlightColor, boolean darkTheme) { if (searchText != null) { final Matcher m = Pattern .compile(searchText.toString(), Pattern.CASE_INSENSITIVE | Pattern.LITERAL) @@ -337,4 +337,8 @@ public class MarkdownUtil { return spannableContent; } } + + public static String getMarkdownLink(@NonNull String text, @NonNull String url) { + return "[" + text + "](" + url + ")"; + } } |