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 e8491f00b..ac0dd0198 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java @@ -16,6 +16,7 @@ import org.fdroid.fdroid.data.Schema.RepoTable; import org.fdroid.fdroid.data.Schema.RepoTable.Cols; import java.util.ArrayList; +import java.util.Date; import java.util.List; public class RepoProvider extends FDroidProvider { @@ -251,6 +252,40 @@ public class RepoProvider extends FDroidProvider { } return count; } + + @Nullable + public static Date lastUpdate(Context context) { + ContentResolver resolver = context.getContentResolver(); + final String[] projection = {Cols.LAST_UPDATED}; + final String selection = Cols.IN_USE + " = 1"; + Cursor cursor = resolver.query(getContentUri(), projection, selection, null, Cols.LAST_UPDATED + " DESC"); + + Date lastUpdate = null; + if (cursor != null) { + if (cursor.getCount() > 0) { + cursor.moveToFirst(); + lastUpdate = Utils.parseDate(cursor.getString(0), null); + } + cursor.close(); + } + + return lastUpdate; + } + + public static int countEnabledRepos(Context context) { + ContentResolver resolver = context.getContentResolver(); + final String[] projection = {Cols._ID}; + final String selection = Cols.IN_USE + " = 1"; + Cursor cursor = resolver.query(getContentUri(), projection, selection, null, null); + + int count = 0; + if (cursor != null) { + count = cursor.getCount(); + cursor.close(); + } + + return count; + } } private static final String PROVIDER_NAME = "RepoProvider"; diff --git a/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java index ae6495920..2570ade73 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/RepoProviderTest.java @@ -36,6 +36,7 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; @@ -48,6 +49,58 @@ public class RepoProviderTest extends FDroidProviderTest { private static final String[] COLS = RepoTable.Cols.ALL; + @Test + public void countEnabledRepos() { + + // By default, f-droid is enabled. + assertEquals(1, RepoProvider.Helper.countEnabledRepos(context)); + + Repo gpRepo = RepoProvider.Helper.findByAddress(context, "https://guardianproject.info/fdroid/repo"); + gpRepo = setEnabled(gpRepo, true); + assertEquals(2, RepoProvider.Helper.countEnabledRepos(context)); + + Repo fdroidRepo = RepoProvider.Helper.findByAddress(context, "https://f-droid.org/repo"); + setEnabled(fdroidRepo, false); + setEnabled(gpRepo, false); + + assertEquals(0, RepoProvider.Helper.countEnabledRepos(context)); + } + + private Repo setEnabled(Repo repo, boolean enabled) { + ContentValues enable = new ContentValues(1); + enable.put(RepoTable.Cols.IN_USE, enabled); + RepoProvider.Helper.update(context, repo, enable); + return RepoProvider.Helper.findByAddress(context, repo.address); + } + + @Test + public void lastUpdated() { + assertNull(RepoProvider.Helper.lastUpdate(context)); + + Repo gpRepo = RepoProvider.Helper.findByAddress(context, "https://guardianproject.info/fdroid/repo"); + + // Set date to 2017-04-05 11:56:38 + setLastUpdate(gpRepo, new Date(1491357408643L)); + + // GP is not yet enabled, so it is not counted. + assertNull(RepoProvider.Helper.lastUpdate(context)); + + // Set date to 2017-04-04 11:56:38 + Repo fdroidRepo = RepoProvider.Helper.findByAddress(context, "https://f-droid.org/repo"); + setLastUpdate(fdroidRepo, new Date(1491357408643L - (1000 * 60 * 60 * 24))); + assertEquals("2017-04-04", Utils.formatDate(RepoProvider.Helper.lastUpdate(context), null)); + + setEnabled(gpRepo, true); + assertEquals("2017-04-05", Utils.formatDate(RepoProvider.Helper.lastUpdate(context), null)); + } + + private Repo setLastUpdate(Repo repo, Date date) { + ContentValues values = new ContentValues(1); + values.put(RepoTable.Cols.LAST_UPDATED, Utils.formatDate(date, null)); + RepoProvider.Helper.update(context, repo, values); + return RepoProvider.Helper.findByAddress(context, repo.address); + } + @Test public void findByUrl() {