diff --git a/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java b/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java index c4cf76521..df1474543 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java @@ -960,7 +960,7 @@ public class AppProvider extends FDroidProvider { final String app = getTableName(); final String highestPriority = - "SELECT MIN(r." + RepoTable.Cols.PRIORITY + ") " + + "SELECT MAX(r." + RepoTable.Cols.PRIORITY + ") " + "FROM " + RepoTable.NAME + " AS r " + "JOIN " + getTableName() + " AS m ON (m." + Cols.REPO_ID + " = r." + RepoTable.Cols._ID + ") " + "WHERE m." + Cols.PACKAGE_ID + " = " + "metadata." + Cols.PACKAGE_ID; diff --git a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java index 079972d5b..0dd87abb9 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -190,7 +190,7 @@ class DBHelper extends SQLiteOpenHelper { + InstalledAppTable.Cols.HASH + " TEXT NOT NULL" + " );"; - protected static final int DB_VERSION = 67; + protected static final int DB_VERSION = 68; private final Context context; @@ -272,6 +272,16 @@ class DBHelper extends SQLiteOpenHelper { addCategoryTables(db, oldVersion); addIndexV1Fields(db, oldVersion); addIndexV1AppFields(db, oldVersion); + recalculatePreferredMetadata(db, oldVersion); + } + + private void recalculatePreferredMetadata(SQLiteDatabase db, int oldVersion) { + if (oldVersion >= 68) { + return; + } + + Log.i(TAG, "Previously, the repository metadata was being interpreted backwards. Need to force a repo refresh to fix this."); + resetTransient(db); } private void addIndexV1AppFields(SQLiteDatabase db, int oldVersion) { diff --git a/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java index 72b5dfbe0..986491b42 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java @@ -44,8 +44,7 @@ public class CategoryProviderTest extends FDroidProviderTest { insertAppWithCategory("com.dog.rock.apple", "Dog-Rock-Apple", "Animal,Mineral,Vegetable", mainRepo); insertAppWithCategory("com.banana.apple", "Banana", "Vegetable,Vegetable", mainRepo); - List<String> categories = CategoryProvider.Helper.categories(context); - String[] expected = new String[] { + String[] expectedFDroid = new String[] { context.getResources().getString(R.string.category_Whats_New), context.getResources().getString(R.string.category_Recently_Updated), context.getResources().getString(R.string.category_All), @@ -56,13 +55,8 @@ public class CategoryProviderTest extends FDroidProviderTest { "Vegetable", "Writing", }; - assertContainsOnly(categories, expected); - insertAppWithCategory("info.guardianproject.notepadbot", "NoteCipher", "Office,GuardianProject", gpRepo); - assertContainsOnly(CategoryProvider.Helper.categories(context), expected); - - RepoProvider.Helper.purgeApps(context, new MockRepo(mainRepo)); - String[] expectedGp = new String[] { + String[] expectedGP = new String[] { context.getResources().getString(R.string.category_Whats_New), context.getResources().getString(R.string.category_Recently_Updated), context.getResources().getString(R.string.category_All), @@ -70,8 +64,29 @@ public class CategoryProviderTest extends FDroidProviderTest { "GuardianProject", "Office", }; + + // We overwrite "Security" + "Writing" with "GuardianProject" + "Office" + String[] expectedBoth = new String[] { + context.getResources().getString(R.string.category_Whats_New), + context.getResources().getString(R.string.category_Recently_Updated), + context.getResources().getString(R.string.category_All), + + "Animal", + "Mineral", + "Vegetable", + + "GuardianProject", + "Office", + }; + + assertContainsOnly(CategoryProvider.Helper.categories(context), expectedFDroid); + + insertAppWithCategory("info.guardianproject.notepadbot", "NoteCipher", "Office,GuardianProject", gpRepo); + assertContainsOnly(CategoryProvider.Helper.categories(context), expectedBoth); + + RepoProvider.Helper.purgeApps(context, new MockRepo(mainRepo)); List<String> categoriesAfterPurge = CategoryProvider.Helper.categories(context); - assertContainsOnly(categoriesAfterPurge, expectedGp); + assertContainsOnly(categoriesAfterPurge, expectedGP); } @Test diff --git a/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java b/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java index 578391376..db9e3267e 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java @@ -95,15 +95,15 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { @Test public void metadataWithRepoPriority() throws RepoUpdater.UpdateException { - updateConflicting(); updateMain(); updateArchive(); + updateConflicting(); - Repo conflictingRepo = RepoProvider.Helper.findByAddress(context, REPO_CONFLICTING_URI); + Repo mainRepo = RepoProvider.Helper.findByAddress(context, REPO_MAIN_URI); - assertEquals(1, conflictingRepo.priority); - assertEquals(2, RepoProvider.Helper.findByAddress(context, REPO_MAIN_URI).priority); - assertEquals(3, RepoProvider.Helper.findByAddress(context, REPO_ARCHIVE_URI).priority); + assertEquals(1, mainRepo.priority); + assertEquals(2, RepoProvider.Helper.findByAddress(context, REPO_ARCHIVE_URI).priority); + assertEquals(3, RepoProvider.Helper.findByAddress(context, REPO_CONFLICTING_URI).priority); assertMainRepo(); assertMainArchiveRepoMetadata(); @@ -114,9 +114,9 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { // Make the conflicting repo less important than the main repo. ContentValues values = new ContentValues(1); values.put(Cols.PRIORITY, 5); - RepoProvider.Helper.update(context, conflictingRepo, values); - Repo updatedConflictingRepo = RepoProvider.Helper.findByAddress(context, REPO_CONFLICTING_URI); - assertEquals(5, updatedConflictingRepo.priority); + RepoProvider.Helper.update(context, mainRepo, values); + Repo updatedMainRepo = RepoProvider.Helper.findByAddress(context, REPO_MAIN_URI); + assertEquals(5, updatedMainRepo.priority); assertRepoTakesPriority("Normal"); }