Extracted RepoProvider.DataColumns to Schema.RepoTable.Cols

This commit is contained in:
Peter Serwylo 2016-06-30 13:28:55 +10:00
parent 0ea5325b81
commit 8a155aef89
13 changed files with 150 additions and 166 deletions

View File

@ -12,6 +12,7 @@ import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoPersister; import org.fdroid.fdroid.data.RepoPersister;
import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema.RepoTable;
import org.fdroid.fdroid.net.Downloader; import org.fdroid.fdroid.net.Downloader;
import org.fdroid.fdroid.net.DownloaderFactory; import org.fdroid.fdroid.net.DownloaderFactory;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
@ -253,32 +254,32 @@ public class RepoUpdater {
private ContentValues prepareRepoDetailsForSaving(String name, String description, int maxAge, int version, long timestamp) { private ContentValues prepareRepoDetailsForSaving(String name, String description, int maxAge, int version, long timestamp) {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatTime(new Date(), "")); values.put(RepoTable.Cols.LAST_UPDATED, Utils.formatTime(new Date(), ""));
if (repo.lastetag == null || !repo.lastetag.equals(cacheTag)) { if (repo.lastetag == null || !repo.lastetag.equals(cacheTag)) {
values.put(RepoProvider.DataColumns.LAST_ETAG, cacheTag); values.put(RepoTable.Cols.LAST_ETAG, cacheTag);
} }
if (version != -1 && version != repo.version) { if (version != -1 && version != repo.version) {
Utils.debugLog(TAG, "Repo specified a new version: from " + repo.version + " to " + version); Utils.debugLog(TAG, "Repo specified a new version: from " + repo.version + " to " + version);
values.put(RepoProvider.DataColumns.VERSION, version); values.put(RepoTable.Cols.VERSION, version);
} }
if (maxAge != -1 && maxAge != repo.maxage) { if (maxAge != -1 && maxAge != repo.maxage) {
Utils.debugLog(TAG, "Repo specified a new maximum age - updated"); Utils.debugLog(TAG, "Repo specified a new maximum age - updated");
values.put(RepoProvider.DataColumns.MAX_AGE, maxAge); values.put(RepoTable.Cols.MAX_AGE, maxAge);
} }
if (description != null && !description.equals(repo.description)) { if (description != null && !description.equals(repo.description)) {
values.put(RepoProvider.DataColumns.DESCRIPTION, description); values.put(RepoTable.Cols.DESCRIPTION, description);
} }
if (name != null && !name.equals(repo.name)) { if (name != null && !name.equals(repo.name)) {
values.put(RepoProvider.DataColumns.NAME, name); values.put(RepoTable.Cols.NAME, name);
} }
if (timestamp != repo.timestamp) { if (timestamp != repo.timestamp) {
values.put(RepoProvider.DataColumns.TIMESTAMP, timestamp); values.put(RepoTable.Cols.TIMESTAMP, timestamp);
} }
return values; return values;
@ -354,8 +355,8 @@ public class RepoUpdater {
Utils.debugLog(TAG, "Saving new signing certificate in the database for " + repo.address); Utils.debugLog(TAG, "Saving new signing certificate in the database for " + repo.address);
ContentValues values = new ContentValues(2); ContentValues values = new ContentValues(2);
values.put(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatDate(new Date(), "")); values.put(RepoTable.Cols.LAST_UPDATED, Utils.formatDate(new Date(), ""));
values.put(RepoProvider.DataColumns.SIGNING_CERT, Hasher.hex(rawCertFromJar)); values.put(RepoTable.Cols.SIGNING_CERT, Hasher.hex(rawCertFromJar));
RepoProvider.Helper.update(context, repo, values); RepoProvider.Helper.update(context, repo, values);
} }

View File

@ -10,6 +10,7 @@ import android.util.Log;
import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Schema.ApkTable.Cols; import org.fdroid.fdroid.data.Schema.ApkTable.Cols;
import org.fdroid.fdroid.data.Schema.RepoTable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -213,8 +214,8 @@ public class ApkProvider extends FDroidProvider {
private static final Map<String, String> REPO_FIELDS = new HashMap<>(); private static final Map<String, String> REPO_FIELDS = new HashMap<>();
static { static {
REPO_FIELDS.put(Cols.REPO_VERSION, RepoProvider.DataColumns.VERSION); REPO_FIELDS.put(Cols.REPO_VERSION, RepoTable.Cols.VERSION);
REPO_FIELDS.put(Cols.REPO_ADDRESS, RepoProvider.DataColumns.ADDRESS); REPO_FIELDS.put(Cols.REPO_ADDRESS, RepoTable.Cols.ADDRESS);
MATCHER.addURI(getAuthority(), PATH_REPO + "/#", CODE_REPO); MATCHER.addURI(getAuthority(), PATH_REPO + "/#", CODE_REPO);
MATCHER.addURI(getAuthority(), PATH_APK + "/#/*", CODE_SINGLE); MATCHER.addURI(getAuthority(), PATH_APK + "/#/*", CODE_SINGLE);

View File

@ -10,6 +10,7 @@ import android.util.Log;
import org.fdroid.fdroid.R; import org.fdroid.fdroid.R;
import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Schema.ApkTable; import org.fdroid.fdroid.data.Schema.ApkTable;
import org.fdroid.fdroid.data.Schema.RepoTable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -257,17 +258,17 @@ class DBHelper extends SQLiteOpenHelper {
int priority) { int priority) {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(RepoProvider.DataColumns.ADDRESS, address); values.put(RepoTable.Cols.ADDRESS, address);
values.put(RepoProvider.DataColumns.NAME, name); values.put(RepoTable.Cols.NAME, name);
values.put(RepoProvider.DataColumns.DESCRIPTION, description); values.put(RepoTable.Cols.DESCRIPTION, description);
values.put(RepoProvider.DataColumns.SIGNING_CERT, pubKey); values.put(RepoTable.Cols.SIGNING_CERT, pubKey);
values.put(RepoProvider.DataColumns.FINGERPRINT, Utils.calcFingerprint(pubKey)); values.put(RepoTable.Cols.FINGERPRINT, Utils.calcFingerprint(pubKey));
values.put(RepoProvider.DataColumns.MAX_AGE, 0); values.put(RepoTable.Cols.MAX_AGE, 0);
values.put(RepoProvider.DataColumns.VERSION, version); values.put(RepoTable.Cols.VERSION, version);
values.put(RepoProvider.DataColumns.IN_USE, inUse); values.put(RepoTable.Cols.IN_USE, inUse);
values.put(RepoProvider.DataColumns.PRIORITY, priority); values.put(RepoTable.Cols.PRIORITY, priority);
values.put(RepoProvider.DataColumns.LAST_ETAG, (String) null); values.put(RepoTable.Cols.LAST_ETAG, (String) null);
values.put(RepoProvider.DataColumns.TIMESTAMP, 0); values.put(RepoTable.Cols.TIMESTAMP, 0);
Utils.debugLog(TAG, "Adding repository " + name); Utils.debugLog(TAG, "Adding repository " + name);
db.insert(TABLE_REPO, null, values); db.insert(TABLE_REPO, null, values);
@ -518,10 +519,10 @@ class DBHelper extends SQLiteOpenHelper {
if (oldVersion >= 55) { if (oldVersion >= 55) {
return; return;
} }
if (!columnExists(db, TABLE_REPO, RepoProvider.DataColumns.TIMESTAMP)) { if (!columnExists(db, TABLE_REPO, RepoTable.Cols.TIMESTAMP)) {
Utils.debugLog(TAG, "Adding " + RepoProvider.DataColumns.TIMESTAMP + " column to " + TABLE_REPO); Utils.debugLog(TAG, "Adding " + RepoTable.Cols.TIMESTAMP + " column to " + TABLE_REPO);
db.execSQL("alter table " + TABLE_REPO + " add column " db.execSQL("alter table " + TABLE_REPO + " add column "
+ RepoProvider.DataColumns.TIMESTAMP + " integer not null default 0"); + RepoTable.Cols.TIMESTAMP + " integer not null default 0");
} }
} }

View File

@ -5,6 +5,7 @@ import android.database.Cursor;
import android.text.TextUtils; import android.text.TextUtils;
import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Schema.RepoTable.Cols;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
@ -52,52 +53,52 @@ public class Repo extends ValueObject {
for (int i = 0; i < cursor.getColumnCount(); i++) { for (int i = 0; i < cursor.getColumnCount(); i++) {
switch (cursor.getColumnName(i)) { switch (cursor.getColumnName(i)) {
case RepoProvider.DataColumns._ID: case Cols._ID:
id = cursor.getInt(i); id = cursor.getInt(i);
break; break;
case RepoProvider.DataColumns.LAST_ETAG: case Cols.LAST_ETAG:
lastetag = cursor.getString(i); lastetag = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.ADDRESS: case Cols.ADDRESS:
address = cursor.getString(i); address = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.DESCRIPTION: case Cols.DESCRIPTION:
description = cursor.getString(i); description = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.FINGERPRINT: case Cols.FINGERPRINT:
fingerprint = cursor.getString(i); fingerprint = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.IN_USE: case Cols.IN_USE:
inuse = cursor.getInt(i) == 1; inuse = cursor.getInt(i) == 1;
break; break;
case RepoProvider.DataColumns.LAST_UPDATED: case Cols.LAST_UPDATED:
lastUpdated = Utils.parseTime(cursor.getString(i), null); lastUpdated = Utils.parseTime(cursor.getString(i), null);
break; break;
case RepoProvider.DataColumns.MAX_AGE: case Cols.MAX_AGE:
maxage = cursor.getInt(i); maxage = cursor.getInt(i);
break; break;
case RepoProvider.DataColumns.VERSION: case Cols.VERSION:
version = cursor.getInt(i); version = cursor.getInt(i);
break; break;
case RepoProvider.DataColumns.NAME: case Cols.NAME:
name = cursor.getString(i); name = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.SIGNING_CERT: case Cols.SIGNING_CERT:
signingCertificate = cursor.getString(i); signingCertificate = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.PRIORITY: case Cols.PRIORITY:
priority = cursor.getInt(i); priority = cursor.getInt(i);
break; break;
case RepoProvider.DataColumns.IS_SWAP: case Cols.IS_SWAP:
isSwap = cursor.getInt(i) == 1; isSwap = cursor.getInt(i) == 1;
break; break;
case RepoProvider.DataColumns.USERNAME: case Cols.USERNAME:
username = cursor.getString(i); username = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.PASSWORD: case Cols.PASSWORD:
password = cursor.getString(i); password = cursor.getString(i);
break; break;
case RepoProvider.DataColumns.TIMESTAMP: case Cols.TIMESTAMP:
timestamp = cursor.getLong(i); timestamp = cursor.getLong(i);
break; break;
} }
@ -158,69 +159,69 @@ public class Repo extends ValueObject {
public void setValues(ContentValues values) { public void setValues(ContentValues values) {
if (values.containsKey(RepoProvider.DataColumns._ID)) { if (values.containsKey(Cols._ID)) {
id = toInt(values.getAsInteger(RepoProvider.DataColumns._ID)); id = toInt(values.getAsInteger(Cols._ID));
} }
if (values.containsKey(RepoProvider.DataColumns.LAST_ETAG)) { if (values.containsKey(Cols.LAST_ETAG)) {
lastetag = values.getAsString(RepoProvider.DataColumns.LAST_ETAG); lastetag = values.getAsString(Cols.LAST_ETAG);
} }
if (values.containsKey(RepoProvider.DataColumns.ADDRESS)) { if (values.containsKey(Cols.ADDRESS)) {
address = values.getAsString(RepoProvider.DataColumns.ADDRESS); address = values.getAsString(Cols.ADDRESS);
} }
if (values.containsKey(RepoProvider.DataColumns.DESCRIPTION)) { if (values.containsKey(Cols.DESCRIPTION)) {
description = values.getAsString(RepoProvider.DataColumns.DESCRIPTION); description = values.getAsString(Cols.DESCRIPTION);
} }
if (values.containsKey(RepoProvider.DataColumns.FINGERPRINT)) { if (values.containsKey(Cols.FINGERPRINT)) {
fingerprint = values.getAsString(RepoProvider.DataColumns.FINGERPRINT); fingerprint = values.getAsString(Cols.FINGERPRINT);
} }
if (values.containsKey(RepoProvider.DataColumns.IN_USE)) { if (values.containsKey(Cols.IN_USE)) {
inuse = toInt(values.getAsInteger(RepoProvider.DataColumns.IN_USE)) == 1; inuse = toInt(values.getAsInteger(Cols.IN_USE)) == 1;
} }
if (values.containsKey(RepoProvider.DataColumns.LAST_UPDATED)) { if (values.containsKey(Cols.LAST_UPDATED)) {
final String dateString = values.getAsString(RepoProvider.DataColumns.LAST_UPDATED); final String dateString = values.getAsString(Cols.LAST_UPDATED);
lastUpdated = Utils.parseTime(dateString, null); lastUpdated = Utils.parseTime(dateString, null);
} }
if (values.containsKey(RepoProvider.DataColumns.MAX_AGE)) { if (values.containsKey(Cols.MAX_AGE)) {
maxage = toInt(values.getAsInteger(RepoProvider.DataColumns.MAX_AGE)); maxage = toInt(values.getAsInteger(Cols.MAX_AGE));
} }
if (values.containsKey(RepoProvider.DataColumns.VERSION)) { if (values.containsKey(Cols.VERSION)) {
version = toInt(values.getAsInteger(RepoProvider.DataColumns.VERSION)); version = toInt(values.getAsInteger(Cols.VERSION));
} }
if (values.containsKey(RepoProvider.DataColumns.NAME)) { if (values.containsKey(Cols.NAME)) {
name = values.getAsString(RepoProvider.DataColumns.NAME); name = values.getAsString(Cols.NAME);
} }
if (values.containsKey(RepoProvider.DataColumns.SIGNING_CERT)) { if (values.containsKey(Cols.SIGNING_CERT)) {
signingCertificate = values.getAsString(RepoProvider.DataColumns.SIGNING_CERT); signingCertificate = values.getAsString(Cols.SIGNING_CERT);
} }
if (values.containsKey(RepoProvider.DataColumns.PRIORITY)) { if (values.containsKey(Cols.PRIORITY)) {
priority = toInt(values.getAsInteger(RepoProvider.DataColumns.PRIORITY)); priority = toInt(values.getAsInteger(Cols.PRIORITY));
} }
if (values.containsKey(RepoProvider.DataColumns.IS_SWAP)) { if (values.containsKey(Cols.IS_SWAP)) {
isSwap = toInt(values.getAsInteger(RepoProvider.DataColumns.IS_SWAP)) == 1; isSwap = toInt(values.getAsInteger(Cols.IS_SWAP)) == 1;
} }
if (values.containsKey(RepoProvider.DataColumns.USERNAME)) { if (values.containsKey(Cols.USERNAME)) {
username = values.getAsString(RepoProvider.DataColumns.USERNAME); username = values.getAsString(Cols.USERNAME);
} }
if (values.containsKey(RepoProvider.DataColumns.PASSWORD)) { if (values.containsKey(Cols.PASSWORD)) {
password = values.getAsString(RepoProvider.DataColumns.PASSWORD); password = values.getAsString(Cols.PASSWORD);
} }
if (values.containsKey(RepoProvider.DataColumns.TIMESTAMP)) { if (values.containsKey(Cols.TIMESTAMP)) {
timestamp = toInt(values.getAsInteger(RepoProvider.DataColumns.TIMESTAMP)); timestamp = toInt(values.getAsInteger(Cols.TIMESTAMP));
} }
} }
} }

View File

@ -7,11 +7,11 @@ import android.content.Context;
import android.content.UriMatcher; import android.content.UriMatcher;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.provider.BaseColumns;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Schema.RepoTable.Cols;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -28,12 +28,12 @@ public class RepoProvider extends FDroidProvider {
public static Repo findByUri(Context context, Uri uri) { public static Repo findByUri(Context context, Uri uri) {
ContentResolver resolver = context.getContentResolver(); ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(uri, DataColumns.ALL, null, null, null); Cursor cursor = resolver.query(uri, Cols.ALL, null, null, null);
return cursorToRepo(cursor); return cursorToRepo(cursor);
} }
public static Repo findById(Context context, long repoId) { public static Repo findById(Context context, long repoId) {
return findById(context, repoId, DataColumns.ALL); return findById(context, repoId, Cols.ALL);
} }
public static Repo findById(Context context, long repoId, public static Repo findById(Context context, long repoId,
@ -45,18 +45,18 @@ public class RepoProvider extends FDroidProvider {
} }
public static Repo findByAddress(Context context, String address) { public static Repo findByAddress(Context context, String address) {
return findByAddress(context, address, DataColumns.ALL); return findByAddress(context, address, Cols.ALL);
} }
public static Repo findByAddress(Context context, public static Repo findByAddress(Context context,
String address, String[] projection) { String address, String[] projection) {
List<Repo> repos = findBy( List<Repo> repos = findBy(
context, DataColumns.ADDRESS, address, projection); context, Cols.ADDRESS, address, projection);
return repos.size() > 0 ? repos.get(0) : null; return repos.size() > 0 ? repos.get(0) : null;
} }
public static List<Repo> all(Context context) { public static List<Repo> all(Context context) {
return all(context, DataColumns.ALL); return all(context, Cols.ALL);
} }
public static List<Repo> all(Context context, String[] projection) { public static List<Repo> all(Context context, String[] projection) {
@ -113,10 +113,10 @@ public class RepoProvider extends FDroidProvider {
// Change the name to the new address. Next time we update the repo // Change the name to the new address. Next time we update the repo
// index file, it will populate the name field with the proper // index file, it will populate the name field with the proper
// name, but the best we can do is guess right now. // name, but the best we can do is guess right now.
if (values.containsKey(DataColumns.ADDRESS) && if (values.containsKey(Cols.ADDRESS) &&
!values.containsKey(DataColumns.NAME)) { !values.containsKey(Cols.NAME)) {
String name = Repo.addressToName(values.getAsString(DataColumns.ADDRESS)); String name = Repo.addressToName(values.getAsString(Cols.ADDRESS));
values.put(DataColumns.NAME, name); values.put(Cols.NAME, name);
} }
/* /*
@ -129,14 +129,14 @@ public class RepoProvider extends FDroidProvider {
* make sure it is correct. If the fingerprint is empty, then store * make sure it is correct. If the fingerprint is empty, then store
* the calculated one. * the calculated one.
*/ */
if (values.containsKey(DataColumns.SIGNING_CERT)) { if (values.containsKey(Cols.SIGNING_CERT)) {
String publicKey = values.getAsString(DataColumns.SIGNING_CERT); String publicKey = values.getAsString(Cols.SIGNING_CERT);
String calcedFingerprint = Utils.calcFingerprint(publicKey); String calcedFingerprint = Utils.calcFingerprint(publicKey);
if (values.containsKey(DataColumns.FINGERPRINT)) { if (values.containsKey(Cols.FINGERPRINT)) {
String fingerprint = values.getAsString(DataColumns.FINGERPRINT); String fingerprint = values.getAsString(Cols.FINGERPRINT);
if (!TextUtils.isEmpty(publicKey)) { if (!TextUtils.isEmpty(publicKey)) {
if (TextUtils.isEmpty(fingerprint)) { if (TextUtils.isEmpty(fingerprint)) {
values.put(DataColumns.FINGERPRINT, calcedFingerprint); values.put(Cols.FINGERPRINT, calcedFingerprint);
} else if (!fingerprint.equals(calcedFingerprint)) { } else if (!fingerprint.equals(calcedFingerprint)) {
// TODO the UI should represent this error! // TODO the UI should represent this error!
Log.e(TAG, "The stored and calculated fingerprints do not match!"); Log.e(TAG, "The stored and calculated fingerprints do not match!");
@ -146,20 +146,20 @@ public class RepoProvider extends FDroidProvider {
} }
} else if (!TextUtils.isEmpty(publicKey)) { } else if (!TextUtils.isEmpty(publicKey)) {
// no fingerprint in 'values', so put one there // no fingerprint in 'values', so put one there
values.put(DataColumns.FINGERPRINT, calcedFingerprint); values.put(Cols.FINGERPRINT, calcedFingerprint);
} }
} }
if (values.containsKey(DataColumns.IN_USE)) { if (values.containsKey(Cols.IN_USE)) {
Integer inUse = values.getAsInteger(DataColumns.IN_USE); Integer inUse = values.getAsInteger(Cols.IN_USE);
if (inUse != null && inUse == 0) { if (inUse != null && inUse == 0) {
values.put(DataColumns.LAST_ETAG, (String) null); values.put(Cols.LAST_ETAG, (String) null);
} }
} }
final Uri uri = getContentUri(repo.getId()); final Uri uri = getContentUri(repo.getId());
final String[] args = {Long.toString(repo.getId())}; final String[] args = {Long.toString(repo.getId())};
resolver.update(uri, values, DataColumns._ID + " = ?", args); resolver.update(uri, values, Cols._ID + " = ?", args);
repo.setValues(values); repo.setValues(values);
} }
@ -209,31 +209,6 @@ public class RepoProvider extends FDroidProvider {
} }
} }
public interface DataColumns extends BaseColumns {
String ADDRESS = "address";
String NAME = "name";
String DESCRIPTION = "description";
String IN_USE = "inuse";
String PRIORITY = "priority";
String SIGNING_CERT = "pubkey";
String FINGERPRINT = "fingerprint";
String MAX_AGE = "maxage";
String LAST_ETAG = "lastetag";
String LAST_UPDATED = "lastUpdated";
String VERSION = "version";
String IS_SWAP = "isSwap";
String USERNAME = "username";
String PASSWORD = "password";
String TIMESTAMP = "timestamp";
String[] ALL = {
_ID, ADDRESS, NAME, DESCRIPTION, IN_USE, PRIORITY, SIGNING_CERT,
FINGERPRINT, MAX_AGE, LAST_UPDATED, LAST_ETAG, VERSION, IS_SWAP,
USERNAME, PASSWORD, TIMESTAMP,
};
}
private static final String PROVIDER_NAME = "RepoProvider"; private static final String PROVIDER_NAME = "RepoProvider";
private static final String PATH_ALL_EXCEPT_SWAP = "allExceptSwap"; private static final String PATH_ALL_EXCEPT_SWAP = "allExceptSwap";
@ -294,11 +269,11 @@ public class RepoProvider extends FDroidProvider {
case CODE_SINGLE: case CODE_SINGLE:
selection = (selection == null ? "" : selection + " AND ") + selection = (selection == null ? "" : selection + " AND ") +
DataColumns._ID + " = " + uri.getLastPathSegment(); Cols._ID + " = " + uri.getLastPathSegment();
break; break;
case CODE_ALL_EXCEPT_SWAP: case CODE_ALL_EXCEPT_SWAP:
selection = DataColumns.IS_SWAP + " = 0 OR " + DataColumns.IS_SWAP + " IS NULL "; selection = Cols.IS_SWAP + " = 0 OR " + Cols.IS_SWAP + " IS NULL ";
break; break;
default: default:
@ -314,32 +289,32 @@ public class RepoProvider extends FDroidProvider {
@Override @Override
public Uri insert(Uri uri, ContentValues values) { public Uri insert(Uri uri, ContentValues values) {
if (!values.containsKey(DataColumns.ADDRESS)) { if (!values.containsKey(Cols.ADDRESS)) {
throw new UnsupportedOperationException("Cannot add repo without an address."); throw new UnsupportedOperationException("Cannot add repo without an address.");
} }
// The following fields have NOT NULL constraints in the DB, so need // The following fields have NOT NULL constraints in the DB, so need
// to be present. // to be present.
if (!values.containsKey(DataColumns.IN_USE)) { if (!values.containsKey(Cols.IN_USE)) {
values.put(DataColumns.IN_USE, 1); values.put(Cols.IN_USE, 1);
} }
if (!values.containsKey(DataColumns.PRIORITY)) { if (!values.containsKey(Cols.PRIORITY)) {
values.put(DataColumns.PRIORITY, 10); values.put(Cols.PRIORITY, 10);
} }
if (!values.containsKey(DataColumns.MAX_AGE)) { if (!values.containsKey(Cols.MAX_AGE)) {
values.put(DataColumns.MAX_AGE, 0); values.put(Cols.MAX_AGE, 0);
} }
if (!values.containsKey(DataColumns.VERSION)) { if (!values.containsKey(Cols.VERSION)) {
values.put(DataColumns.VERSION, 0); values.put(Cols.VERSION, 0);
} }
if (!values.containsKey(DataColumns.NAME)) { if (!values.containsKey(Cols.NAME)) {
final String address = values.getAsString(DataColumns.ADDRESS); final String address = values.getAsString(Cols.ADDRESS);
values.put(DataColumns.NAME, Repo.addressToName(address)); values.put(Cols.NAME, Repo.addressToName(address));
} }
long id = db().insertOrThrow(getTableName(), null, values); long id = db().insertOrThrow(getTableName(), null, values);

View File

@ -34,6 +34,7 @@ import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.localrepo.peers.Peer; import org.fdroid.fdroid.localrepo.peers.Peer;
import org.fdroid.fdroid.localrepo.peers.PeerFinder; import org.fdroid.fdroid.localrepo.peers.PeerFinder;
import org.fdroid.fdroid.localrepo.type.BluetoothSwap; import org.fdroid.fdroid.localrepo.type.BluetoothSwap;
@ -269,15 +270,15 @@ public class SwapService extends Service {
// "Manage repos" UI on other device. Doesn't hurt to put something there though, // "Manage repos" UI on other device. Doesn't hurt to put something there though,
// on the off chance that somebody is looking through the sqlite database which // on the off chance that somebody is looking through the sqlite database which
// contains the repos... // contains the repos...
values.put(RepoProvider.DataColumns.NAME, peer.getName()); values.put(Schema.RepoTable.Cols.NAME, peer.getName());
values.put(RepoProvider.DataColumns.ADDRESS, peer.getRepoAddress()); values.put(Schema.RepoTable.Cols.ADDRESS, peer.getRepoAddress());
values.put(RepoProvider.DataColumns.DESCRIPTION, ""); values.put(Schema.RepoTable.Cols.DESCRIPTION, "");
String fingerprint = peer.getFingerprint(); String fingerprint = peer.getFingerprint();
if (!TextUtils.isEmpty(fingerprint)) { if (!TextUtils.isEmpty(fingerprint)) {
values.put(RepoProvider.DataColumns.FINGERPRINT, peer.getFingerprint()); values.put(Schema.RepoTable.Cols.FINGERPRINT, peer.getFingerprint());
} }
values.put(RepoProvider.DataColumns.IN_USE, true); values.put(Schema.RepoTable.Cols.IN_USE, true);
values.put(RepoProvider.DataColumns.IS_SWAP, true); values.put(Schema.RepoTable.Cols.IS_SWAP, true);
Uri uri = RepoProvider.Helper.insert(this, values); Uri uri = RepoProvider.Helper.insert(this, values);
repo = RepoProvider.Helper.findByUri(this, uri); repo = RepoProvider.Helper.findByUri(this, uri);
} }

View File

@ -7,6 +7,7 @@ import android.support.v4.content.LocalBroadcastManager;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -47,7 +48,7 @@ public class DownloaderFactory {
} else if (isLocalFile(url)) { } else if (isLocalFile(url)) {
downloader = new LocalFileDownloader(url, destFile); downloader = new LocalFileDownloader(url, destFile);
} else { } else {
final String[] projection = {RepoProvider.DataColumns.USERNAME, RepoProvider.DataColumns.PASSWORD}; final String[] projection = {Schema.RepoTable.Cols.USERNAME, Schema.RepoTable.Cols.PASSWORD};
String repoUrlString = FilenameUtils.getBaseName(url.toString()); String repoUrlString = FilenameUtils.getBaseName(url.toString());
Repo repo = RepoProvider.Helper.findByAddress(context, repoUrlString, projection); Repo repo = RepoProvider.Helper.findByAddress(context, repoUrlString, projection);
if (repo == null) { if (repo == null) {

View File

@ -64,6 +64,7 @@ import org.fdroid.fdroid.compat.CursorAdapterCompat;
import org.fdroid.fdroid.data.NewRepoConfig; import org.fdroid.fdroid.data.NewRepoConfig;
import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema.RepoTable;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
@ -612,14 +613,14 @@ public class ManageReposActivity extends ActionBarActivity {
// Leave address as it was. // Leave address as it was.
} }
ContentValues values = new ContentValues(4); ContentValues values = new ContentValues(4);
values.put(RepoProvider.DataColumns.ADDRESS, address); values.put(RepoTable.Cols.ADDRESS, address);
if (!TextUtils.isEmpty(fingerprint)) { if (!TextUtils.isEmpty(fingerprint)) {
values.put(RepoProvider.DataColumns.FINGERPRINT, fingerprint.toUpperCase(Locale.ENGLISH)); values.put(RepoTable.Cols.FINGERPRINT, fingerprint.toUpperCase(Locale.ENGLISH));
} }
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) { if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
values.put(RepoProvider.DataColumns.USERNAME, username); values.put(RepoTable.Cols.USERNAME, username);
values.put(RepoProvider.DataColumns.PASSWORD, password); values.put(RepoTable.Cols.PASSWORD, password);
} }
RepoProvider.Helper.insert(context, values); RepoProvider.Helper.insert(context, values);
@ -643,8 +644,8 @@ public class ManageReposActivity extends ActionBarActivity {
Utils.debugLog(TAG, "Enabling existing repo: " + url); Utils.debugLog(TAG, "Enabling existing repo: " + url);
Repo repo = RepoProvider.Helper.findByAddress(context, url); Repo repo = RepoProvider.Helper.findByAddress(context, url);
ContentValues values = new ContentValues(2); ContentValues values = new ContentValues(2);
values.put(RepoProvider.DataColumns.IN_USE, 1); values.put(RepoTable.Cols.IN_USE, 1);
values.put(RepoProvider.DataColumns.FINGERPRINT, fingerprint); values.put(RepoTable.Cols.FINGERPRINT, fingerprint);
RepoProvider.Helper.update(context, repo, values); RepoProvider.Helper.update(context, repo, values);
listFragment.notifyDataSetChanged(); listFragment.notifyDataSetChanged();
finishedAddingRepo(); finishedAddingRepo();
@ -710,11 +711,11 @@ public class ManageReposActivity extends ActionBarActivity {
Uri uri = RepoProvider.allExceptSwapUri(); Uri uri = RepoProvider.allExceptSwapUri();
Utils.debugLog(TAG, "Creating repo loader '" + uri + "'."); Utils.debugLog(TAG, "Creating repo loader '" + uri + "'.");
final String[] projection = { final String[] projection = {
RepoProvider.DataColumns._ID, RepoTable.Cols._ID,
RepoProvider.DataColumns.NAME, RepoTable.Cols.NAME,
RepoProvider.DataColumns.SIGNING_CERT, RepoTable.Cols.SIGNING_CERT,
RepoProvider.DataColumns.FINGERPRINT, RepoTable.Cols.FINGERPRINT,
RepoProvider.DataColumns.IN_USE, RepoTable.Cols.IN_USE,
}; };
return new CursorLoader(getActivity(), uri, projection, null, null, null); return new CursorLoader(getActivity(), uri, projection, null, null, null);
} }
@ -748,7 +749,7 @@ public class ManageReposActivity extends ActionBarActivity {
public void onSetEnabled(Repo repo, boolean isEnabled) { public void onSetEnabled(Repo repo, boolean isEnabled) {
if (repo.inuse != isEnabled) { if (repo.inuse != isEnabled) {
ContentValues values = new ContentValues(1); ContentValues values = new ContentValues(1);
values.put(RepoProvider.DataColumns.IN_USE, isEnabled ? 1 : 0); values.put(RepoTable.Cols.IN_USE, isEnabled ? 1 : 0);
RepoProvider.Helper.update(getActivity(), repo, values); RepoProvider.Helper.update(getActivity(), repo, values);
if (isEnabled) { if (isEnabled) {

View File

@ -36,6 +36,7 @@ import org.fdroid.fdroid.UpdateService;
import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema.RepoTable;
import java.util.Locale; import java.util.Locale;
@ -100,9 +101,9 @@ public class RepoDetailsActivity extends ActionBarActivity {
repoId = getIntent().getLongExtra(ARG_REPO_ID, 0); repoId = getIntent().getLongExtra(ARG_REPO_ID, 0);
final String[] projection = { final String[] projection = {
RepoProvider.DataColumns.NAME, RepoTable.Cols.NAME,
RepoProvider.DataColumns.ADDRESS, RepoTable.Cols.ADDRESS,
RepoProvider.DataColumns.FINGERPRINT, RepoTable.Cols.FINGERPRINT,
}; };
repo = RepoProvider.Helper.findById(this, repoId, projection); repo = RepoProvider.Helper.findById(this, repoId, projection);
@ -390,8 +391,8 @@ public class RepoDetailsActivity extends ActionBarActivity {
if (!TextUtils.isEmpty(name)) { if (!TextUtils.isEmpty(name)) {
final ContentValues values = new ContentValues(2); final ContentValues values = new ContentValues(2);
values.put(RepoProvider.DataColumns.USERNAME, name); values.put(RepoTable.Cols.USERNAME, name);
values.put(RepoProvider.DataColumns.PASSWORD, password); values.put(RepoTable.Cols.PASSWORD, password);
RepoProvider.Helper.update(RepoDetailsActivity.this, repo, values); RepoProvider.Helper.update(RepoDetailsActivity.this, repo, values);

View File

@ -9,7 +9,6 @@ import junit.framework.AssertionFailedError;
import org.fdroid.fdroid.data.ApkProvider; import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.InstalledAppProvider; import org.fdroid.fdroid.data.InstalledAppProvider;
import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.data.Schema.ApkTable; import org.fdroid.fdroid.data.Schema.ApkTable;
import org.fdroid.fdroid.data.Schema.AppTable; import org.fdroid.fdroid.data.Schema.AppTable;
import org.robolectric.shadows.ShadowContentResolver; import org.robolectric.shadows.ShadowContentResolver;

View File

@ -13,6 +13,7 @@ import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.FDroidProviderTest; import org.fdroid.fdroid.data.FDroidProviderTest;
import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@ -163,9 +164,9 @@ public abstract class MultiRepoUpdaterTest extends FDroidProviderTest {
repo.name = name; repo.name = name;
ContentValues values = new ContentValues(2); ContentValues values = new ContentValues(2);
values.put(RepoProvider.DataColumns.SIGNING_CERT, repo.signingCertificate); values.put(Schema.RepoTable.Cols.SIGNING_CERT, repo.signingCertificate);
values.put(RepoProvider.DataColumns.ADDRESS, repo.address); values.put(Schema.RepoTable.Cols.ADDRESS, repo.address);
values.put(RepoProvider.DataColumns.NAME, repo.name); values.put(Schema.RepoTable.Cols.NAME, repo.name);
RepoProvider.Helper.insert(context, values); RepoProvider.Helper.insert(context, values);

View File

@ -8,6 +8,7 @@ import android.net.Uri;
import org.fdroid.fdroid.Assert; import org.fdroid.fdroid.Assert;
import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.BuildConfig;
import org.fdroid.fdroid.data.Schema.ApkTable.Cols; import org.fdroid.fdroid.data.Schema.ApkTable.Cols;
import org.fdroid.fdroid.data.Schema.RepoTable;
import org.fdroid.fdroid.mock.MockApk; import org.fdroid.fdroid.mock.MockApk;
import org.fdroid.fdroid.mock.MockApp; import org.fdroid.fdroid.mock.MockApp;
import org.fdroid.fdroid.mock.MockRepo; import org.fdroid.fdroid.mock.MockRepo;
@ -234,27 +235,27 @@ public class ApkProviderTest extends FDroidProviderTest {
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testInsertWithInvalidExtraFieldDescription() { public void testInsertWithInvalidExtraFieldDescription() {
assertInvalidExtraField(RepoProvider.DataColumns.DESCRIPTION); assertInvalidExtraField(RepoTable.Cols.DESCRIPTION);
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testInsertWithInvalidExtraFieldAddress() { public void testInsertWithInvalidExtraFieldAddress() {
assertInvalidExtraField(RepoProvider.DataColumns.ADDRESS); assertInvalidExtraField(RepoTable.Cols.ADDRESS);
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testInsertWithInvalidExtraFieldFingerprint() { public void testInsertWithInvalidExtraFieldFingerprint() {
assertInvalidExtraField(RepoProvider.DataColumns.FINGERPRINT); assertInvalidExtraField(RepoTable.Cols.FINGERPRINT);
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testInsertWithInvalidExtraFieldName() { public void testInsertWithInvalidExtraFieldName() {
assertInvalidExtraField(RepoProvider.DataColumns.NAME); assertInvalidExtraField(RepoTable.Cols.NAME);
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testInsertWithInvalidExtraFieldSigningCert() { public void testInsertWithInvalidExtraFieldSigningCert() {
assertInvalidExtraField(RepoProvider.DataColumns.SIGNING_CERT); assertInvalidExtraField(RepoTable.Cols.SIGNING_CERT);
} }
public void assertInvalidExtraField(String field) { public void assertInvalidExtraField(String field) {

View File

@ -63,7 +63,7 @@ public class ProviderUriTests {
@Test @Test
public void validRepoProviderUris() { public void validRepoProviderUris() {
ShadowContentResolver.registerProvider(RepoProvider.getAuthority(), new RepoProvider()); ShadowContentResolver.registerProvider(RepoProvider.getAuthority(), new RepoProvider());
String[] projection = new String[] {RepoProvider.DataColumns._ID}; String[] projection = new String[] {Schema.RepoTable.Cols._ID};
assertValidUri(resolver, RepoProvider.getContentUri(), projection); assertValidUri(resolver, RepoProvider.getContentUri(), projection);
assertValidUri(resolver, RepoProvider.getContentUri(10000L), projection); assertValidUri(resolver, RepoProvider.getContentUri(10000L), projection);
assertValidUri(resolver, RepoProvider.allExceptSwapUri(), projection); assertValidUri(resolver, RepoProvider.allExceptSwapUri(), projection);