Refactored the recent MR for dynamicly adding default repos.
The idea was good: reduce the amount of copied/pasted code where ContentValues were initialized, populated, then inserted. I've kept the idea, by putting it in its own method which is called twice. But the resources are not loaded dynamically any more. This is so that the compiler will be able to pick up if we reference a missing resource. Also, I took the opportunity to replace the field name string literals with references to RepoProvider.DataColumns.* constants. Finally, changed the tests around because now we need to have the "getInteger()" call mocked in resources correctly (for priority/inUse).
This commit is contained in:
parent
9703350f41
commit
3ebad383d6
@ -177,55 +177,46 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
public void onCreate(SQLiteDatabase db) {
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
|
||||||
createAppApk(db);
|
createAppApk(db);
|
||||||
|
|
||||||
db.execSQL(CREATE_TABLE_REPO);
|
db.execSQL(CREATE_TABLE_REPO);
|
||||||
|
|
||||||
Resources ress = context.getResources();
|
insertRepo(
|
||||||
|
db,
|
||||||
|
context.getString(R.string.default_repo_name1),
|
||||||
|
context.getString(R.string.default_repo_address1),
|
||||||
|
context.getString(R.string.default_repo_description1),
|
||||||
|
context.getString(R.string.default_repo_pubkey1),
|
||||||
|
context.getResources().getInteger(R.integer.default_repo_inuse1),
|
||||||
|
context.getResources().getInteger(R.integer.default_repo_priority1)
|
||||||
|
);
|
||||||
|
|
||||||
int repoCount = ress.getInteger(R.integer.default_repo_count);
|
insertRepo(
|
||||||
for (int i = 1; i <= repoCount; i++) {
|
db,
|
||||||
ContentValues values = new ContentValues();
|
context.getString(R.string.default_repo_name2),
|
||||||
String repoName = context.getString(ress.getIdentifier(
|
context.getString(R.string.default_repo_address2),
|
||||||
"default_repo_name" + i,
|
context.getString(R.string.default_repo_description2),
|
||||||
"string",
|
context.getString(R.string.default_repo_pubkey2),
|
||||||
"org.fdroid.fdroid"
|
context.getResources().getInteger(R.integer.default_repo_inuse2),
|
||||||
));
|
context.getResources().getInteger(R.integer.default_repo_priority2)
|
||||||
values.put("address",
|
);
|
||||||
context.getString(ress.getIdentifier(
|
}
|
||||||
"default_repo_address" + i,
|
|
||||||
"string",
|
private void insertRepo(
|
||||||
"org.fdroid.fdroid"
|
SQLiteDatabase db, String name, String address, String description,
|
||||||
)));
|
String pubKey, int inUse, int priority) {
|
||||||
values.put("name",repoName);
|
|
||||||
values.put("description",
|
ContentValues values = new ContentValues();
|
||||||
context.getString(ress.getIdentifier(
|
values.put(RepoProvider.DataColumns.ADDRESS, address);
|
||||||
"default_repo_description" + i,
|
values.put(RepoProvider.DataColumns.NAME, name);
|
||||||
"string",
|
values.put(RepoProvider.DataColumns.DESCRIPTION, description);
|
||||||
"org.fdroid.fdroid"
|
values.put(RepoProvider.DataColumns.PUBLIC_KEY, pubKey);
|
||||||
)));
|
values.put(RepoProvider.DataColumns.FINGERPRINT, Utils.calcFingerprint(pubKey));
|
||||||
String pubkey = context.getString(ress.getIdentifier(
|
values.put(RepoProvider.DataColumns.MAX_AGE, 0);
|
||||||
"default_repo_pubkey" + i,
|
values.put(RepoProvider.DataColumns.IN_USE, inUse);
|
||||||
"string",
|
values.put(RepoProvider.DataColumns.PRIORITY, priority);
|
||||||
"org.fdroid.fdroid"
|
values.put(RepoProvider.DataColumns.LAST_ETAG, (String)null);
|
||||||
));
|
|
||||||
String fingerprint = Utils.calcFingerprint(pubkey);
|
Log.i("FDroid", "Adding repository " + name);
|
||||||
values.put("pubkey", pubkey);
|
db.insert(TABLE_REPO, null, values);
|
||||||
values.put("fingerprint", fingerprint);
|
|
||||||
values.put("maxage", 0);
|
|
||||||
values.put("inuse", ress.getInteger(ress.getIdentifier(
|
|
||||||
"default_repo_inuse" + i,
|
|
||||||
"integer",
|
|
||||||
"org.fdroid.fdroid"
|
|
||||||
)));
|
|
||||||
values.put("priority", ress.getInteger(ress.getIdentifier(
|
|
||||||
"default_repo_priority" + i,
|
|
||||||
"integer",
|
|
||||||
"org.fdroid.fdroid"
|
|
||||||
)));
|
|
||||||
values.put("lastetag", (String) null);
|
|
||||||
Log.i("FDroid", "Add repository " + repoName);
|
|
||||||
db.insert(TABLE_REPO, null, values);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
package mock;
|
package mock;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.test.mock.*;
|
import android.test.mock.*;
|
||||||
import org.fdroid.fdroid.*;
|
import org.fdroid.fdroid.*;
|
||||||
|
|
||||||
public class MockCategoryResources extends MockResources {
|
public class MockCategoryResources extends MockFDroidResources {
|
||||||
|
|
||||||
|
public MockCategoryResources(Context getStringDelegatingContext) {
|
||||||
|
super(getStringDelegatingContext);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getString(int id) {
|
public String getString(int id) {
|
||||||
|
36
test/src/mock/MockFDroidResources.java
Normal file
36
test/src/mock/MockFDroidResources.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package mock;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.test.mock.*;
|
||||||
|
import org.fdroid.fdroid.*;
|
||||||
|
|
||||||
|
public class MockFDroidResources extends MockResources {
|
||||||
|
|
||||||
|
private Context getStringDelegatingContext;
|
||||||
|
|
||||||
|
public MockFDroidResources(Context getStringDelegatingContext) {
|
||||||
|
this.getStringDelegatingContext = getStringDelegatingContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getString(int id) {
|
||||||
|
return getStringDelegatingContext.getString(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInteger(int id) {
|
||||||
|
if (id == R.integer.default_repo_inuse1) {
|
||||||
|
return 1;
|
||||||
|
} else if (id == R.integer.default_repo_inuse2) {
|
||||||
|
return 0;
|
||||||
|
} else if (id == R.integer.default_repo_priority1) {
|
||||||
|
return 10;
|
||||||
|
} else if (id == R.integer.default_repo_priority2) {
|
||||||
|
return 20;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,6 +2,7 @@ package org.fdroid.fdroid;
|
|||||||
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
|
||||||
import mock.MockCategoryResources;
|
import mock.MockCategoryResources;
|
||||||
@ -24,7 +25,12 @@ public class AppProviderTest extends FDroidProviderTest<AppProvider> {
|
|||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
getSwappableContext().setResources(new MockCategoryResources());
|
getSwappableContext().setResources(new MockCategoryResources(getContext()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Resources getMockResources() {
|
||||||
|
return new MockCategoryResources(getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,13 +3,16 @@ package org.fdroid.fdroid;
|
|||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import android.test.ProviderTestCase2MockContext;
|
import android.test.ProviderTestCase2MockContext;
|
||||||
|
import mock.MockCategoryResources;
|
||||||
import mock.MockContextEmptyComponents;
|
import mock.MockContextEmptyComponents;
|
||||||
import mock.MockContextSwappableComponents;
|
import mock.MockContextSwappableComponents;
|
||||||
|
import mock.MockFDroidResources;
|
||||||
import org.fdroid.fdroid.data.FDroidProvider;
|
import org.fdroid.fdroid.data.FDroidProvider;
|
||||||
import org.fdroid.fdroid.mock.MockInstalledApkCache;
|
import org.fdroid.fdroid.mock.MockInstalledApkCache;
|
||||||
|
|
||||||
@ -23,10 +26,15 @@ public abstract class FDroidProviderTest<T extends FDroidProvider> extends Provi
|
|||||||
super(providerClass, providerAuthority);
|
super(providerClass, providerAuthority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Resources getMockResources() {
|
||||||
|
return new MockFDroidResources(getContext());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
Utils.setupInstalledApkCache(new MockInstalledApkCache());
|
Utils.setupInstalledApkCache(new MockInstalledApkCache());
|
||||||
|
getSwappableContext().setResources(getMockResources());
|
||||||
|
|
||||||
// The *Provider.Helper.* functions tend to take a Context as their
|
// The *Provider.Helper.* functions tend to take a Context as their
|
||||||
// first parameter. This context is used to connect to the relevant
|
// first parameter. This context is used to connect to the relevant
|
||||||
@ -34,6 +42,7 @@ public abstract class FDroidProviderTest<T extends FDroidProvider> extends Provi
|
|||||||
// to the mock content resolver, in order to reach the provider
|
// to the mock content resolver, in order to reach the provider
|
||||||
// under test.
|
// under test.
|
||||||
getSwappableContext().setContentResolver(getMockContentResolver());
|
getSwappableContext().setContentResolver(getMockContentResolver());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.ECLAIR)
|
@TargetApi(Build.VERSION_CODES.ECLAIR)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user