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..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 @@ -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( @@ -43,7 +44,7 @@ CategoryOptions.class, SingleNoteWidgetData.class, NotesListWidgetData.class - }, version = 23 + }, version = 24 ) @TypeConverters({Converters.class}) public abstract class NotesDatabase extends RoomDatabase { @@ -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/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 9e553be10..7450d40f1 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,6 +178,11 @@ public List getAccounts() { public void deleteAccount(@NonNull Account account) { try { ApiProvider.invalidateAPICache(AccountImporter.getSingleSignOnAccount(context, account.getAccountName())); + 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(); @@ -608,18 +613,17 @@ 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(); - 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); 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); 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); break; } case DEFAULT_CATEGORY: @@ -661,19 +665,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 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); + 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); + 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); + prefKey = context.getString(R.string.action_sorting_method) + ' ' + context.getString(R.string.action_uncategorized) + accountId; break; } case DEFAULT_CATEGORY: 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..0cc6e7f6f --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/migration/Migration_23_24.java @@ -0,0 +1,58 @@ +package it.niedermann.owncloud.notes.persistence.migration; + +import android.content.Context; +import android.content.SharedPreferences; +import android.database.Cursor; + +import androidx.annotation.NonNull; +import androidx.preference.PreferenceManager; +import androidx.room.migration.Migration; +import androidx.sqlite.db.SupportSQLiteDatabase; + +import it.niedermann.owncloud.notes.R; + +/** + * 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(); + 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, 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); + } + + 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 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