diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-02-11 14:00:26 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-02-11 14:08:53 +0300 |
commit | 0c01f258c25d6fa2b162730324ea0e3a821c8fd6 (patch) | |
tree | 987ef5826ee393ead604d6e88d2896b6c1fb8c5f /app/src/main/java | |
parent | a0112185804066d054f555ecc8fcf9ab61f39ca5 (diff) | |
parent | 4a0c16fdada3b3f84937be57f1ce355f1cfb9a0e (diff) |
Merge branch 'master' into 831-room
# Conflicts:
# app/build.gradle
# app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java
# app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java
# app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
# app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java
# app/src/main/java/it/niedermann/owncloud/notes/shared/model/CloudNote.java
# app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java
# app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java
Diffstat (limited to 'app/src/main/java')
12 files changed, 70 insertions, 170 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 191f0d47..a827ab50 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; @@ -12,6 +12,7 @@ import androidx.lifecycle.LiveData; import it.niedermann.owncloud.notes.main.MainActivity; import it.niedermann.owncloud.notes.persistence.entity.Note; +import it.niedermann.owncloud.notes.shared.util.ShareUtil; public class AppendToNoteActivity extends MainActivity { @@ -23,8 +24,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); @@ -36,7 +36,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 LiveData<Note> fullNote$ = mainViewModel.getFullNote(((Note) adapter.getItem(position)).getId()); fullNote$.observe(this, (fullNote) -> { fullNote$.removeObservers(this); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/LockedActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/LockedActivity.java index 8b024050..7ce7206b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/LockedActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/LockedActivity.java @@ -93,7 +93,7 @@ public abstract class LockedActivity extends BrandedActivity { } private void askToUnlock() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && NotesApplication.isLocked()) { + if (NotesApplication.isLocked()) { KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); if (keyguardManager != null) { Intent i = keyguardManager.createConfirmDeviceCredentialIntent(getString(R.string.unlock_notes), null); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java b/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java index 852180b6..ef31acfc 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java @@ -16,7 +16,7 @@ import static androidx.preference.PreferenceManager.getDefaultSharedPreferences; public class NotesApplication extends MultiDexApplication { private static final String TAG = NotesApplication.class.getSimpleName(); - private static final long LOCK_TIME = 30 * 1000; + private static final long LOCK_TIME = 30_000; private static boolean lockedPreference = false; private static boolean isLocked = true; private static long lastInteraction = 0; 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 9b8fca09..c00db4aa 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 @@ -7,12 +7,17 @@ import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.preference.PreferenceManager; +import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; +import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; +import com.nextcloud.android.sso.helper.SingleAccountHelper; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -24,12 +29,14 @@ import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.accountpicker.AccountPickerListener; import it.niedermann.owncloud.notes.databinding.ActivityEditBinding; +import it.niedermann.owncloud.notes.databinding.ActivityEditBinding; import it.niedermann.owncloud.notes.edit.category.CategoryViewModel; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.persistence.entity.Note; import it.niedermann.owncloud.notes.shared.model.DBStatus; import it.niedermann.owncloud.notes.shared.model.NavigationCategory; import it.niedermann.owncloud.notes.shared.util.NoteUtil; +import it.niedermann.owncloud.notes.shared.util.ShareUtil; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES; @@ -55,6 +62,16 @@ public class EditNoteActivity extends LockedActivity implements BaseNoteFragment protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + try { + if (SingleAccountHelper.getCurrentSingleSignOnAccount(this) == null) { + throw new NoCurrentAccountSelectedException(); + } + } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { + Toast.makeText(this, R.string.no_account_configured_yet, Toast.LENGTH_LONG).show(); + finish(); + return; + } + categoryViewModel = new ViewModelProvider(this).get(CategoryViewModel.class); binding = ActivityEditBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -179,7 +196,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/importaccount/ImportAccountViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountViewModel.java index 10f44676..04b30d8d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountViewModel.java @@ -10,8 +10,6 @@ import it.niedermann.owncloud.notes.persistence.NotesDatabase; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.shared.model.Capabilities; -import static it.niedermann.owncloud.notes.shared.util.DisplayUtils.convertToCategoryNavigationItem; - public class ImportAccountViewModel extends AndroidViewModel { private static final String TAG = ImportAccountViewModel.class.getSimpleName(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 315fdc42..f36c0c02 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -23,12 +23,10 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; import androidx.core.view.GravityCompat; -import androidx.core.view.ViewCompat; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.selection.SelectionTracker; -import androidx.recyclerview.selection.SelectionTracker.SelectionObserver; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; @@ -81,7 +79,6 @@ import it.niedermann.owncloud.notes.shared.model.NoteClickListener; import it.niedermann.owncloud.notes.shared.util.NoteUtil; import static android.os.Build.VERSION.SDK_INT; -import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.os.Build.VERSION_CODES.O; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -420,7 +417,7 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A tracker = ItemSelectionTracker.build(listView, adapter); adapter.setTracker(tracker); - tracker.addObserver(new SelectionObserver<Long>() { + tracker.addObserver(new SelectionTracker.SelectionObserver<Long>() { @Override public void onSelectionChanged() { super.onSelectionChanged(); @@ -513,9 +510,7 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A binding.headerView.setBackgroundColor(mainColor); binding.appName.setTextColor(textColor); - if (SDK_INT >= LOLLIPOP) { - activityBinding.progressCircular.getIndeterminateDrawable().setColorFilter(getSecondaryForegroundColorDependingOnTheme(this, mainColor), PorterDuff.Mode.SRC_IN); - } + activityBinding.progressCircular.getIndeterminateDrawable().setColorFilter(getSecondaryForegroundColorDependingOnTheme(this, mainColor), PorterDuff.Mode.SRC_IN); // TODO We assume, that the background of the spinner is always white activityBinding.swiperefreshlayout.setColorSchemeColors(contrastRatioIsSufficient(Color.WHITE, mainColor) ? mainColor : Color.BLACK); @@ -664,12 +659,8 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A private void updateToolbars(boolean disableSearch) { activityBinding.homeToolbar.setVisibility(disableSearch ? VISIBLE : GONE); activityBinding.toolbar.setVisibility(disableSearch ? GONE : VISIBLE); - if (SDK_INT >= LOLLIPOP) { - activityBinding.appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator(activityBinding.appBar.getContext(), - disableSearch ? R.animator.appbar_elevation_off : R.animator.appbar_elevation_on)); - } else { - ViewCompat.setElevation(activityBinding.appBar, disableSearch ? 0 : getResources().getDimension(R.dimen.design_appbar_elevation)); - } + activityBinding.appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator(activityBinding.appBar.getContext(), + disableSearch ? R.animator.appbar_elevation_off : R.animator.appbar_elevation_on)); if (disableSearch) { activityBinding.searchView.setQuery(null, true); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java index 73002879..6a0d5ceb 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java @@ -96,13 +96,7 @@ public abstract class NoteViewHolder extends RecyclerView.ViewHolder { ((Chip) noteCategory).setChipStrokeColor(ColorStateList.valueOf(categoryBackground)); ((Chip) noteCategory).setChipBackgroundColor(ColorStateList.valueOf(isDarkThemeActive ? categoryBackground : Color.TRANSPARENT)); } else { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - DrawableCompat.setTint(noteCategory.getBackground(), categoryBackground); - } else { - final GradientDrawable drawable = (GradientDrawable) noteCategory.getBackground(); - drawable.setStroke(1, categoryBackground); - drawable.setColor(isDarkThemeActive ? categoryBackground : Color.TRANSPARENT); - } + DrawableCompat.setTint(noteCategory.getBackground(), categoryBackground); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java index 9034ce48..9432d6fa 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java @@ -97,8 +97,10 @@ public abstract class NotesDatabase extends RoomDatabase { private static NotesDatabase instance; private static Context context; private static NoteServerSyncHelper serverSyncHelper; + private static String defaultNonEmptyTitle; private static NotesDatabase create(final Context context) { + defaultNonEmptyTitle = NoteUtil.generateNonEmptyNoteTitle("", context); return Room.databaseBuilder( context, NotesDatabase.class, @@ -269,7 +271,8 @@ public abstract class NotesDatabase extends RoomDatabase { if (newTitle != null) { title = newTitle; } else { - if (oldNote.getRemoteId() == null || localAccount.getPreferredApiVersion() == null || localAccount.getPreferredApiVersion().compareTo(new ApiVersion("1.0", 0, 0)) < 0) { + if ((oldNote.getRemoteId() == null || localAccount.getPreferredApiVersion() == null || localAccount.getPreferredApiVersion().compareTo(new ApiVersion("1.0", 0, 0)) < 0) && + (defaultNonEmptyTitle.equals(oldNote.getTitle()))) { title = NoteUtil.generateNonEmptyNoteTitle(newContent, context); } else { title = oldNote.getTitle(); 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 new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CloudNote.java 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 index db696d85..ad6b6793 100644 --- 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 @@ -1,22 +1,3 @@ -/* - * 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; @@ -52,91 +33,6 @@ public class 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); - } - } - public static List<NavigationItem.CategoryNavigationItem> convertToCategoryNavigationItem(@NonNull Context context, @NonNull Collection<CategoryWithNotesCount> counter) { return counter.stream() .map(ctr -> convertToCategoryNavigationItem(context, ctr)) 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 9254de82..32caeaaf 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,13 +18,6 @@ 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() { @@ -32,26 +25,6 @@ public class 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. * <pre> * " " -> 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,18 +93,18 @@ public class NoteUtil { */ @NonNull public static String generateNoteTitle(@NonNull String content) { - return getLineWithoutMarkDown(content, 0); + return getLineWithoutMarkdown(content, 0); } /** - * 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 * @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; 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; + } + } } |