From 32369d52d6990f3728574db02665e596f5156b31 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Mon, 10 May 2021 21:41:38 +0800 Subject: [PATCH 01/16] Remove markdown syntax from title. --- app/build.gradle | 2 ++ .../it/niedermann/owncloud/notes/shared/util/NoteUtil.java | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 75667208b..9152bec18 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,5 +117,7 @@ dependencies { testImplementation 'androidx.test.ext:junit:1.1.2' testImplementation 'androidx.arch.core:core-testing:2.1.0' + implementation group: 'com.youbenzi', name: 'MDTool', version: '1.2.4' + implementation fileTree(dir: 'libs', include: ['*.jar']) } 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 e5b8afae8..80396f79b 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 @@ -9,6 +9,8 @@ import it.niedermann.owncloud.notes.R; +import com.youbenzi.mdtool.tool.MDTool; + import static it.niedermann.android.markdown.MarkdownUtil.removeMarkdown; import static it.niedermann.android.markdown.MarkdownUtil.replaceCheckboxesWithEmojis; @@ -65,6 +67,10 @@ private static String truncateString(@NonNull String str, @SuppressWarnings("Sam @NonNull public static String generateNoteExcerpt(@NonNull String content, @Nullable String title) { content = removeMarkdown(replaceCheckboxesWithEmojis(content.trim())); + String html = MDTool.markdown2Html(title); + if (title != null) { + title = html.replaceAll("(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)", ""); + } if (TextUtils.isEmpty(content)) { return ""; } From 970f4ab3b79806cc05bdad26f2f8cebfce152e28 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Tue, 11 May 2021 15:25:34 +0800 Subject: [PATCH 02/16] Remove markdown syntax "# " from title. A simple version. --- .../niedermann/owncloud/notes/shared/util/NoteUtil.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 80396f79b..8420531af 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 @@ -75,9 +75,12 @@ public static String generateNoteExcerpt(@NonNull String content, @Nullable Stri return ""; } if (!TextUtils.isEmpty(title)) { - final String trimmedTitle = removeMarkdown(replaceCheckboxesWithEmojis(title.trim())); - if (content.startsWith(trimmedTitle)) { - content = content.substring(trimmedTitle.length()); + if (title != null) { + title = title.replaceFirst("^# ", ""); + final String trimmedTitle = removeMarkdown(replaceCheckboxesWithEmojis(title.trim())); + if (content.startsWith(trimmedTitle)) { + content = content.substring(trimmedTitle.length()); + } } } return truncateString(content.trim(), 200).replace("\n", EXCERPT_LINE_SEPARATOR); From 60023e4ba48cc522a974790e10e80ea01f44d6e7 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Tue, 11 May 2021 15:32:21 +0800 Subject: [PATCH 03/16] Remove markdown syntax "# " from title. A simple version. --- app/build.gradle | 2 -- .../it/niedermann/owncloud/notes/shared/util/NoteUtil.java | 6 ------ 2 files changed, 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9152bec18..75667208b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,7 +117,5 @@ dependencies { testImplementation 'androidx.test.ext:junit:1.1.2' testImplementation 'androidx.arch.core:core-testing:2.1.0' - implementation group: 'com.youbenzi', name: 'MDTool', version: '1.2.4' - implementation fileTree(dir: 'libs', include: ['*.jar']) } 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 8420531af..86436129c 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 @@ -9,8 +9,6 @@ import it.niedermann.owncloud.notes.R; -import com.youbenzi.mdtool.tool.MDTool; - import static it.niedermann.android.markdown.MarkdownUtil.removeMarkdown; import static it.niedermann.android.markdown.MarkdownUtil.replaceCheckboxesWithEmojis; @@ -67,10 +65,6 @@ private static String truncateString(@NonNull String str, @SuppressWarnings("Sam @NonNull public static String generateNoteExcerpt(@NonNull String content, @Nullable String title) { content = removeMarkdown(replaceCheckboxesWithEmojis(content.trim())); - String html = MDTool.markdown2Html(title); - if (title != null) { - title = html.replaceAll("(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)", ""); - } if (TextUtils.isEmpty(content)) { return ""; } From 05c51c9f792f6baa58183887a414dedb6db0a4d1 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Tue, 11 May 2021 17:08:23 +0800 Subject: [PATCH 04/16] Remove markdown syntax "# " from title. A simple version. --- .../java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java | 1 - .../main/java/it/niedermann/android/markdown/MarkdownUtil.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) 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 86436129c..f638e4d87 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 @@ -70,7 +70,6 @@ public static String generateNoteExcerpt(@NonNull String content, @Nullable Stri } if (!TextUtils.isEmpty(title)) { if (title != null) { - title = title.replaceFirst("^# ", ""); final String trimmedTitle = removeMarkdown(replaceCheckboxesWithEmojis(title.trim())); if (content.startsWith(trimmedTitle)) { content = content.substring(trimmedTitle.length()); 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 097acd764..44b6f7423 100644 --- a/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java +++ b/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java @@ -50,6 +50,7 @@ public class MarkdownUtil { private static final Pattern PATTERN_ORDERED_LIST_ITEM = Pattern.compile("^(\\d+).\\s.+$"); private static final Pattern PATTERN_ORDERED_LIST_ITEM_EMPTY = Pattern.compile("^(\\d+).\\s$"); private static final Pattern PATTERN_MARKDOWN_LINK = Pattern.compile("\\[(.+)?]\\(([^ ]+?)?( \"(.+)\")?\\)"); + private static final Pattern PATTERN_MARKDOWN_TITLE = Pattern.compile("^# "); @Nullable private static final String checkboxCheckedEmoji = getCheckboxEmoji(true); @@ -496,6 +497,7 @@ public static String removeMarkdown(@Nullable String s) { s = PATTERN_EMPHASIS.matcher(s).replaceAll("$2"); s = PATTERN_SPACE_1.matcher(s).replaceAll(""); s = PATTERN_SPACE_2.matcher(s).replaceAll(""); + s = PATTERN_MARKDOWN_TITLE.matcher(s).replaceAll(""); return s; } } From f33b67ac816c2bd97eefba601aa5ba535d0f3f7e Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Wed, 12 May 2021 19:30:48 +0800 Subject: [PATCH 05/16] Remove markdown syntax "# " from title up to 6 times. A simple version. --- .../niedermann/owncloud/notes/shared/util/NoteUtil.java | 8 +++----- .../java/it/niedermann/android/markdown/MarkdownUtil.java | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) 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 f638e4d87..e5b8afae8 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 @@ -69,11 +69,9 @@ public static String generateNoteExcerpt(@NonNull String content, @Nullable Stri return ""; } if (!TextUtils.isEmpty(title)) { - if (title != null) { - final String trimmedTitle = removeMarkdown(replaceCheckboxesWithEmojis(title.trim())); - if (content.startsWith(trimmedTitle)) { - content = content.substring(trimmedTitle.length()); - } + final String trimmedTitle = removeMarkdown(replaceCheckboxesWithEmojis(title.trim())); + if (content.startsWith(trimmedTitle)) { + content = content.substring(trimmedTitle.length()); } } return truncateString(content.trim(), 200).replace("\n", EXCERPT_LINE_SEPARATOR); 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 44b6f7423..c66a47db6 100644 --- a/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java +++ b/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java @@ -50,7 +50,7 @@ public class MarkdownUtil { private static final Pattern PATTERN_ORDERED_LIST_ITEM = Pattern.compile("^(\\d+).\\s.+$"); private static final Pattern PATTERN_ORDERED_LIST_ITEM_EMPTY = Pattern.compile("^(\\d+).\\s$"); private static final Pattern PATTERN_MARKDOWN_LINK = Pattern.compile("\\[(.+)?]\\(([^ ]+?)?( \"(.+)\")?\\)"); - private static final Pattern PATTERN_MARKDOWN_TITLE = Pattern.compile("^# "); + private static final Pattern PATTERN_MARKDOWN_TITLE = Pattern.compile("^[#]{1,6} "); @Nullable private static final String checkboxCheckedEmoji = getCheckboxEmoji(true); @@ -317,7 +317,7 @@ public static int togglePunctuation(@NonNull Editable editable, int selectionSta // CS304 issue link: https://github.com/stefan-niedermann/nextcloud-notes/issues/1186 public static int insertLink(@NonNull Editable editable, int selectionStart, int selectionEnd, @Nullable String clipboardUrl) { if (selectionStart == selectionEnd) { - if (selectionStart>0 && selectionEnd 0 && selectionEnd < editable.length()) { char start = editable.charAt(selectionStart - 1); char end = editable.charAt(selectionEnd); if (start == ' ' || end == ' ') { @@ -352,8 +352,7 @@ public static int insertLink(@NonNull Editable editable, int selectionStart, int } return selectionEnd + 2; } - } - else { + } else { editable.insert(selectionStart, "[](" + (clipboardUrl == null ? "" : clipboardUrl) + ")"); return selectionStart + 1; } From 62d986351aee54a99865abb52816eab2eab3220e Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sat, 15 May 2021 19:54:20 +0800 Subject: [PATCH 06/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../notes/persistence/NotesRepository.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 37116e4bd..12a7b89e2 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -462,8 +462,7 @@ public Note updateNoteAndSync(@NonNull Account localAccount, @NonNull Note oldNo final Note newNote; // Re-read the up to date remoteId from the database because the UI might not have the state after synchronization yet // https://github.com/stefan-niedermann/nextcloud-notes/issues/1198 - @Nullable - final Long remoteId = db.getNoteDao().getRemoteId(oldNote.getId()); + @Nullable final Long remoteId = db.getNoteDao().getRemoteId(oldNote.getId()); if (newContent == null) { newNote = new Note(oldNote.getId(), remoteId, oldNote.getModified(), oldNote.getTitle(), oldNote.getContent(), oldNote.getCategory(), oldNote.getFavorite(), oldNote.getETag(), DBStatus.LOCAL_EDITED, localAccount.getId(), oldNote.getExcerpt(), oldNote.getScrollY()); } else { @@ -626,18 +625,23 @@ public void modifyCategoryOrder(long accountId, @NonNull NavigationCategory sele final Context ctx = context.getApplicationContext(); final SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(ctx).edit(); int orderIndex = sortingMethod.getId(); + final String categoryType = selectedCategory.getType().toString(); + final String keyMetaCategory = categoryType.concat(String.valueOf(accountId)); switch (selectedCategory.getType()) { case FAVORITES: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites), orderIndex); + sp.putString(keyMetaCategory, "modified"); break; } case UNCATEGORIZED: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.action_uncategorized), orderIndex); + sp.putString(keyMetaCategory, "lexicographically"); break; } case RECENT: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_all_notes), orderIndex); + sp.putString(keyMetaCategory, "modified"); break; } case DEFAULT_CATEGORY: @@ -679,19 +683,19 @@ public void modifyCategoryOrder(long accountId, @NonNull NavigationCategory sele public LiveData getCategoryOrder(@NonNull NavigationCategory selectedCategory) { final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); String prefKey; - + final String categoryType = selectedCategory.getType().toString(); switch (selectedCategory.getType()) { // TODO make this account specific case RECENT: { - prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_all_notes); + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_all_notes + '_') + categoryType; break; } case FAVORITES: { - prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_favorites); + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_favorites + '_') + categoryType; break; } case UNCATEGORIZED: { - prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.action_uncategorized); + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.action_uncategorized + '_') + categoryType; break; } case DEFAULT_CATEGORY: From 2f53701e2a64e18df5f123afa71b24a18a8add34 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sat, 15 May 2021 20:15:58 +0800 Subject: [PATCH 07/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../notes/persistence/NotesRepository.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 12a7b89e2..0bacc4732 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -177,6 +177,8 @@ public List getAccounts() { @WorkerThread public void deleteAccount(@NonNull Account account) { +// final Context ctx = context.getApplicationContext(); +// final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctx); try { ApiProvider.invalidateAPICache(AccountImporter.getSingleSignOnAccount(context, account.getAccountName())); } catch (NextcloudFilesAppAccountNotFoundException e) { @@ -627,20 +629,19 @@ public void modifyCategoryOrder(long accountId, @NonNull NavigationCategory sele int orderIndex = sortingMethod.getId(); final String categoryType = selectedCategory.getType().toString(); final String keyMetaCategory = categoryType.concat(String.valueOf(accountId)); - switch (selectedCategory.getType()) { case FAVORITES: { - sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites), orderIndex); + sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites) + accountId, orderIndex); sp.putString(keyMetaCategory, "modified"); break; } case UNCATEGORIZED: { - sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.action_uncategorized), orderIndex); + sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.action_uncategorized) + accountId, orderIndex); sp.putString(keyMetaCategory, "lexicographically"); break; } case RECENT: { - sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_all_notes), orderIndex); + sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_all_notes) + accountId, orderIndex); sp.putString(keyMetaCategory, "modified"); break; } @@ -683,19 +684,19 @@ public void modifyCategoryOrder(long accountId, @NonNull NavigationCategory sele public LiveData getCategoryOrder(@NonNull NavigationCategory selectedCategory) { final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); String prefKey; - final String categoryType = selectedCategory.getType().toString(); + final String accountId = String.valueOf(selectedCategory.getAccountId()); switch (selectedCategory.getType()) { // TODO make this account specific case RECENT: { - prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_all_notes + '_') + categoryType; + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_all_notes) + accountId; break; } case FAVORITES: { - prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_favorites + '_') + categoryType; + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.label_favorites) + accountId; break; } case UNCATEGORIZED: { - prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.action_uncategorized + '_') + categoryType; + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.action_uncategorized) + accountId; break; } case DEFAULT_CATEGORY: From 869f7838c808baccf6d7b5030a0452ce22c5899f Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sun, 16 May 2021 15:07:52 +0800 Subject: [PATCH 08/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../main/java/it/niedermann/android/markdown/MarkdownUtil.java | 2 -- 1 file changed, 2 deletions(-) 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 ce739114f..2f711ed6f 100644 --- a/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java +++ b/markdown/src/main/java/it/niedermann/android/markdown/MarkdownUtil.java @@ -50,7 +50,6 @@ public class MarkdownUtil { private static final Pattern PATTERN_ORDERED_LIST_ITEM = Pattern.compile("^(\\d+).\\s.+$"); private static final Pattern PATTERN_ORDERED_LIST_ITEM_EMPTY = Pattern.compile("^(\\d+).\\s$"); private static final Pattern PATTERN_MARKDOWN_LINK = Pattern.compile("\\[(.+)?]\\(([^ ]+?)?( \"(.+)\")?\\)"); - private static final Pattern PATTERN_MARKDOWN_TITLE = Pattern.compile("^[#]{1,6} "); @Nullable private static final String checkboxCheckedEmoji = getCheckboxEmoji(true); @@ -586,7 +585,6 @@ public static String removeMarkdown(@Nullable String s) { s = PATTERN_EMPHASIS.matcher(s).replaceAll("$2"); s = PATTERN_SPACE_1.matcher(s).replaceAll(""); s = PATTERN_SPACE_2.matcher(s).replaceAll(""); - s = PATTERN_MARKDOWN_TITLE.matcher(s).replaceAll(""); return s; } } From ac6e07c3acccea0a2815ee6e86a181a1a6f7fe3f Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sun, 16 May 2021 15:23:46 +0800 Subject: [PATCH 09/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../owncloud/notes/persistence/NotesRepository.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 0bacc4732..ab0658c67 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -177,10 +177,19 @@ public List getAccounts() { @WorkerThread public void deleteAccount(@NonNull Account account) { -// final Context ctx = context.getApplicationContext(); -// final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctx); try { ApiProvider.invalidateAPICache(AccountImporter.getSingleSignOnAccount(context, account.getAccountName())); + executor.submit(() -> { + final Context ctx = context.getApplicationContext(); + final SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(ctx).edit(); + final String keyRecentCategory = ENavigationCategoryType.RECENT.toString().concat(String.valueOf(account.getId())); + final String keyUncategorizedCategory = ENavigationCategoryType.UNCATEGORIZED.toString().concat(String.valueOf(account.getId())); + final String keyFavoritesCategory = ENavigationCategoryType.FAVORITES.toString().concat(String.valueOf(account.getId())); + sp.remove(keyRecentCategory); + sp.remove(keyUncategorizedCategory); + sp.remove(keyFavoritesCategory); + sp.apply(); + }); } catch (NextcloudFilesAppAccountNotFoundException e) { e.printStackTrace(); ApiProvider.invalidateAPICache(); From 7593f817358125f604e4da141b9c978ef9474b92 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sun, 16 May 2021 15:37:39 +0800 Subject: [PATCH 10/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../niedermann/owncloud/notes/persistence/NotesRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index ab0658c67..ae4feacb5 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -188,6 +188,9 @@ public void deleteAccount(@NonNull Account account) { sp.remove(keyRecentCategory); sp.remove(keyUncategorizedCategory); sp.remove(keyFavoritesCategory); + sp.remove(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites) + account.getId()); + sp.remove(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.action_uncategorized) + account.getId()); + sp.remove(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_all_notes) + account.getId()); sp.apply(); }); } catch (NextcloudFilesAppAccountNotFoundException e) { From 9e15412aa636f30a0ba06958a7ad575545ee3b0f Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sun, 16 May 2021 20:40:34 +0800 Subject: [PATCH 11/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../notes/persistence/NotesRepository.java | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 2fced708e..b36102a70 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -178,20 +178,11 @@ public List getAccounts() { public void deleteAccount(@NonNull Account account) { try { ApiProvider.invalidateAPICache(AccountImporter.getSingleSignOnAccount(context, account.getAccountName())); - executor.submit(() -> { - final Context ctx = context.getApplicationContext(); - final SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(ctx).edit(); - final String keyRecentCategory = ENavigationCategoryType.RECENT.toString().concat(String.valueOf(account.getId())); - final String keyUncategorizedCategory = ENavigationCategoryType.UNCATEGORIZED.toString().concat(String.valueOf(account.getId())); - final String keyFavoritesCategory = ENavigationCategoryType.FAVORITES.toString().concat(String.valueOf(account.getId())); - sp.remove(keyRecentCategory); - sp.remove(keyUncategorizedCategory); - sp.remove(keyFavoritesCategory); - sp.remove(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites) + account.getId()); - sp.remove(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.action_uncategorized) + account.getId()); - sp.remove(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_all_notes) + account.getId()); - sp.apply(); - }); + final SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(this.context).edit(); + sp.remove(this.context.getString(R.string.action_sorting_method) + ' ' + this.context.getString(R.string.label_favorites) + account.getId()); + sp.remove(this.context.getString(R.string.action_sorting_method) + ' ' + this.context.getString(R.string.action_uncategorized) + account.getId()); + sp.remove(this.context.getString(R.string.action_sorting_method) + ' ' + this.context.getString(R.string.label_all_notes) + account.getId()); + sp.apply(); } catch (NextcloudFilesAppAccountNotFoundException e) { e.printStackTrace(); ApiProvider.invalidateAPICache(); @@ -627,17 +618,14 @@ public void modifyCategoryOrder(long accountId, @NonNull NavigationCategory sele switch (selectedCategory.getType()) { case FAVORITES: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites) + accountId, orderIndex); - sp.putString(keyMetaCategory, "modified"); break; } case UNCATEGORIZED: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.action_uncategorized) + accountId, orderIndex); - sp.putString(keyMetaCategory, "lexicographically"); break; } case RECENT: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_all_notes) + accountId, orderIndex); - sp.putString(keyMetaCategory, "modified"); break; } case DEFAULT_CATEGORY: From fea58394641fdc06dab657754c8f5469d32b0e9a Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Sun, 16 May 2021 20:41:44 +0800 Subject: [PATCH 12/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../niedermann/owncloud/notes/persistence/NotesRepository.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index b36102a70..cc27d1b3a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -613,8 +613,6 @@ public void modifyCategoryOrder(long accountId, @NonNull NavigationCategory sele final Context ctx = context.getApplicationContext(); final SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(ctx).edit(); int orderIndex = sortingMethod.getId(); - final String categoryType = selectedCategory.getType().toString(); - final String keyMetaCategory = categoryType.concat(String.valueOf(accountId)); switch (selectedCategory.getType()) { case FAVORITES: { sp.putInt(ctx.getString(R.string.action_sorting_method) + ' ' + ctx.getString(R.string.label_favorites) + accountId, orderIndex); From b3fcd8e95c72daef1088004cbb674eb016c3c140 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Tue, 18 May 2021 17:16:37 +0800 Subject: [PATCH 13/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../notes/persistence/NotesDatabase.java | 4 +- .../migration/Migration_23_24.java | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java 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 5cc50641e..f5046f8bf 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 @@ -34,6 +34,7 @@ import it.niedermann.owncloud.notes.persistence.migration.Migration_20_21; import it.niedermann.owncloud.notes.persistence.migration.Migration_21_22; import it.niedermann.owncloud.notes.persistence.migration.Migration_22_23; +import it.niedermann.owncloud.notes.persistence.migration.Migration_23_24; import it.niedermann.owncloud.notes.persistence.migration.Migration_9_10; @Database( @@ -78,7 +79,8 @@ private static NotesDatabase create(final Context context) { new Migration_19_20(context), new Migration_20_21(), new Migration_21_22(context), - new Migration_22_23() + new Migration_22_23(), + new Migration_23_24(context) ) .fallbackToDestructiveMigrationOnDowngrade() .fallbackToDestructiveMigration() diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java new file mode 100644 index 000000000..bd58eadf8 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java @@ -0,0 +1,54 @@ +package it.niedermann.owncloud.notes.persistence.migration; + +import android.content.Context; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.preference.PreferenceManager; +import androidx.room.migration.Migration; +import androidx.sqlite.db.SupportSQLiteDatabase; + +import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.persistence.SyncWorker; +import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod; + +/** + * Add account ID to sharedPreferences and thus make meta category account aware. + * https://github.com/stefan-niedermann/nextcloud-notes/issues/1169 + */ +public class Migration_23_24 extends Migration { + @NonNull + private final Context context; + + public Migration_23_24(@NonNull Context context) { + super(23, 24); + this.context = context; + } + + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences.Editor editor = sharedPreferences.edit(); + String tmpTableNotes = String.format("tmp_%s", "NOTES"); + Cursor tmpNotesCursor = database.query("SELECT * FROM " + tmpTableNotes, null); + while (tmpNotesCursor.moveToNext()) { + int accountId = tmpNotesCursor.getInt(2); + Log.e("###", accountId + ""); + resetSharedPreferences(sharedPreferences, editor, R.string.action_uncategorized, accountId); + resetSharedPreferences(sharedPreferences, editor, R.string.label_favorites, accountId); + resetSharedPreferences(sharedPreferences, editor, R.string.label_all_notes, accountId); + } + editor.apply(); + } + + + private void resetSharedPreferences(SharedPreferences sharedPreferences, SharedPreferences.Editor editor, int label, int accountId) { + if (sharedPreferences.contains(context.getString(label) + ' ' + context.getString(label))) { + int sortingMethod = sharedPreferences.getInt(context.getString(R.string.action_sorting_method) + ' ' + context.getString(label), 0); + editor.remove(context.getString(R.string.action_sorting_method) + ' ' + context.getString(label)); + editor.putInt(context.getString(R.string.action_sorting_method) + ' ' + context.getString(label) + accountId, sortingMethod); + } + } +} From 5d8b44be4c0a9dbc91b94caed5ae978d6f499ea6 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Tue, 18 May 2021 17:43:19 +0800 Subject: [PATCH 14/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../notes/persistence/NotesDatabase.java | 2 +- .../migration/Migration_23_24.java | 25 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) 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 f5046f8bf..d062f4c54 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 @@ -44,7 +44,7 @@ CategoryOptions.class, SingleNoteWidgetData.class, NotesListWidgetData.class - }, version = 23 + }, version = 24 ) @TypeConverters({Converters.class}) public abstract class NotesDatabase extends RoomDatabase { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java index bd58eadf8..be767e3e0 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java @@ -3,7 +3,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; -import android.util.Log; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; @@ -11,8 +10,6 @@ import androidx.sqlite.db.SupportSQLiteDatabase; import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.persistence.SyncWorker; -import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod; /** * Add account ID to sharedPreferences and thus make meta category account aware. @@ -31,24 +28,26 @@ public Migration_23_24(@NonNull Context context) { public void migrate(@NonNull SupportSQLiteDatabase database) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); - String tmpTableNotes = String.format("tmp_%s", "NOTES"); - Cursor tmpNotesCursor = database.query("SELECT * FROM " + tmpTableNotes, null); - while (tmpNotesCursor.moveToNext()) { - int accountId = tmpNotesCursor.getInt(2); - Log.e("###", accountId + ""); + final Cursor cursor = database.query("SELECT id FROM ACCOUNT", null); + final int COLUMN_POSITION_ID = cursor.getColumnIndex("id"); + + while (cursor.moveToNext()) { + long accountId = cursor.getLong(COLUMN_POSITION_ID); resetSharedPreferences(sharedPreferences, editor, R.string.action_uncategorized, accountId); resetSharedPreferences(sharedPreferences, editor, R.string.label_favorites, accountId); resetSharedPreferences(sharedPreferences, editor, R.string.label_all_notes, accountId); } editor.apply(); + cursor.close(); } - private void resetSharedPreferences(SharedPreferences sharedPreferences, SharedPreferences.Editor editor, int label, int accountId) { - if (sharedPreferences.contains(context.getString(label) + ' ' + context.getString(label))) { - int sortingMethod = sharedPreferences.getInt(context.getString(R.string.action_sorting_method) + ' ' + context.getString(label), 0); - editor.remove(context.getString(R.string.action_sorting_method) + ' ' + context.getString(label)); - editor.putInt(context.getString(R.string.action_sorting_method) + ' ' + context.getString(label) + accountId, sortingMethod); + private void resetSharedPreferences(SharedPreferences sharedPreferences, SharedPreferences.Editor editor, int label, long accountId) { + final String key = context.getString(R.string.action_sorting_method) + ' ' + context.getString(label); + if (sharedPreferences.contains(key)) { + int sortingMethod = sharedPreferences.getInt(key, 0); + editor.remove(key); + editor.putInt(key + accountId, sortingMethod); } } } From 9d626faa047915a02c2fb5a403bccd42b8511347 Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Tue, 18 May 2021 20:57:12 +0800 Subject: [PATCH 15/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../persistence/migration/Migration_23_24.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java index be767e3e0..41dfeab7d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java @@ -33,20 +33,23 @@ public void migrate(@NonNull SupportSQLiteDatabase database) { while (cursor.moveToNext()) { long accountId = cursor.getLong(COLUMN_POSITION_ID); - resetSharedPreferences(sharedPreferences, editor, R.string.action_uncategorized, accountId); - resetSharedPreferences(sharedPreferences, editor, R.string.label_favorites, accountId); - resetSharedPreferences(sharedPreferences, editor, R.string.label_all_notes, accountId); + resetSharedPreferences(sharedPreferences, editor, "Uncategorized", accountId); + resetSharedPreferences(sharedPreferences, editor, "Favorites", accountId); + resetSharedPreferences(sharedPreferences, editor, "All notes", accountId); } + + editor.remove("Sorting method" + ' ' + "Uncategorized"); + editor.remove("Sorting method" + ' ' + "Favorites"); + editor.remove("Sorting method" + ' ' + "All notes"); editor.apply(); cursor.close(); } - private void resetSharedPreferences(SharedPreferences sharedPreferences, SharedPreferences.Editor editor, int label, long accountId) { - final String key = context.getString(R.string.action_sorting_method) + ' ' + context.getString(label); + private void resetSharedPreferences(SharedPreferences sharedPreferences, SharedPreferences.Editor editor, String label, long accountId) { + final String key = "Sorting method" + ' ' + label; if (sharedPreferences.contains(key)) { int sortingMethod = sharedPreferences.getInt(key, 0); - editor.remove(key); editor.putInt(key + accountId, sortingMethod); } } From 11bc09b079a999ec90b695fd7a9e17d7462d731b Mon Sep 17 00:00:00 2001 From: alpaca0072 Date: Wed, 19 May 2021 10:31:19 +0800 Subject: [PATCH 16/16] [Store category sorting for recent, favorites and uncategorized per account](https://github.com/stefan-niedermann/nextcloud-notes/issues/1169) --- .../persistence/migration/Migration_23_24.java | 18 ++++++++++-------- app/src/main/res/values/strings.xml | 5 +++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java index 41dfeab7d..0cc6e7f6f 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java @@ -33,21 +33,23 @@ public void migrate(@NonNull SupportSQLiteDatabase database) { while (cursor.moveToNext()) { long accountId = cursor.getLong(COLUMN_POSITION_ID); - resetSharedPreferences(sharedPreferences, editor, "Uncategorized", accountId); - resetSharedPreferences(sharedPreferences, editor, "Favorites", accountId); - resetSharedPreferences(sharedPreferences, editor, "All notes", accountId); + resetSharedPreferences(sharedPreferences, editor, context.getString(R.string.meta_category_uncategorized), accountId); + resetSharedPreferences(sharedPreferences, editor, context.getString(R.string.meta_category_favorites), accountId); + resetSharedPreferences(sharedPreferences, editor, context.getString(R.string.meta_category_all_notes), accountId); } - editor.remove("Sorting method" + ' ' + "Uncategorized"); - editor.remove("Sorting method" + ' ' + "Favorites"); - editor.remove("Sorting method" + ' ' + "All notes"); + final String categorySorting = context.getString(R.string.category_sorting); + + editor.remove(categorySorting + ' ' + context.getString(R.string.meta_category_uncategorized)); + editor.remove(categorySorting + ' ' + context.getString(R.string.meta_category_favorites)); + editor.remove(categorySorting + ' ' + context.getString(R.string.meta_category_all_notes)); editor.apply(); cursor.close(); } - private void resetSharedPreferences(SharedPreferences sharedPreferences, SharedPreferences.Editor editor, String label, long accountId) { - final String key = "Sorting method" + ' ' + label; + final String categorySorting = context.getString(R.string.category_sorting); + final String key = categorySorting + ' ' + label; if (sharedPreferences.contains(key)) { int sortingMethod = sharedPreferences.getInt(key, 0); editor.putInt(key + accountId, sortingMethod); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8a404469f..0c73a7628 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,6 +27,11 @@ Preview Share + Sorting method + Uncategorized + Favorites + All notes + Search in %1$s Search all notes