diff --git a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java index dbe7dbb96..f08fc1589 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java @@ -331,6 +331,10 @@ public class RepoProvider extends FDroidProvider { @Override public Uri insert(Uri uri, ContentValues values) { + // Don't let people specify arbitrary priorities. Instead, we are responsible + // for making sure that newly created repositories by default have the highest priority. + values.put(Cols.PRIORITY, getMaxPriority() + 1); + if (!values.containsKey(Cols.ADDRESS)) { throw new UnsupportedOperationException("Cannot add repo without an address."); } @@ -342,10 +346,6 @@ public class RepoProvider extends FDroidProvider { values.put(Cols.IN_USE, 1); } - if (!values.containsKey(Cols.PRIORITY)) { - values.put(Cols.PRIORITY, 10); - } - if (!values.containsKey(Cols.MAX_AGE)) { values.put(Cols.MAX_AGE, 0); } @@ -365,6 +365,14 @@ public class RepoProvider extends FDroidProvider { return getContentUri(id); } + private int getMaxPriority() { + Cursor cursor = db().query(RepoTable.NAME, new String[] {"MAX(" + Cols.PRIORITY + ")"}, "COALESCE(" + Cols.IS_SWAP + ", 0) = 0", null, null, null, null); + cursor.moveToFirst(); + int max = cursor.getInt(0); + cursor.close(); + return max; + } + @Override public int delete(Uri uri, String where, String[] whereArgs) {