Adding ability to query last repo update and number of repos.

This will be used to improve the empty state handling of the main list
of latest apps.
This commit is contained in:
Peter Serwylo 2017-04-05 12:03:50 +10:00
parent d83c15d0d4
commit 510ec5f7c7
2 changed files with 88 additions and 0 deletions

View File

@ -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";

View File

@ -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() {