Merge branch 'renames' into 'master'
Rename java names to match Android standards As seen in #37. I also did a few more that weren't mentioned there, like a few in Apk. This is basically (case insensitive): * `*version` -> `*versionname` * `*vercode` -> `*versioncode` * `pubkey` -> `signingCertificate` See merge request !263
This commit is contained in:
commit
734fe262b1
@ -121,7 +121,7 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
|||||||
cursor.close();
|
cursor.close();
|
||||||
|
|
||||||
assertEquals("com.example", apk.packageName);
|
assertEquals("com.example", apk.packageName);
|
||||||
assertEquals(10, apk.vercode);
|
assertEquals(10, apk.versionCode);
|
||||||
|
|
||||||
assertNull(apk.features);
|
assertNull(apk.features);
|
||||||
assertNull(apk.added);
|
assertNull(apk.added);
|
||||||
@ -147,7 +147,7 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
|||||||
updatedCursor.close();
|
updatedCursor.close();
|
||||||
|
|
||||||
assertEquals("com.example", updatedApk.packageName);
|
assertEquals("com.example", updatedApk.packageName);
|
||||||
assertEquals(10, updatedApk.vercode);
|
assertEquals(10, updatedApk.versionCode);
|
||||||
|
|
||||||
assertNotNull(updatedApk.features);
|
assertNotNull(updatedApk.features);
|
||||||
assertNotNull(updatedApk.added);
|
assertNotNull(updatedApk.added);
|
||||||
@ -170,7 +170,7 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(ApkProvider.DataColumns.VERSION, "v1.1");
|
values.put(ApkProvider.DataColumns.VERSION_NAME, "v1.1");
|
||||||
values.put(ApkProvider.DataColumns.HASH, "xxxxyyyy");
|
values.put(ApkProvider.DataColumns.HASH, "xxxxyyyy");
|
||||||
values.put(ApkProvider.DataColumns.HASH_TYPE, "a hash type");
|
values.put(ApkProvider.DataColumns.HASH_TYPE, "a hash type");
|
||||||
TestUtils.insertApk(this, "com.example", 11, values);
|
TestUtils.insertApk(this, "com.example", 11, values);
|
||||||
@ -187,8 +187,8 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
|||||||
// The find() method populates ALL fields if you don't specify any,
|
// The find() method populates ALL fields if you don't specify any,
|
||||||
// so we expect to find each of the ones we inserted above...
|
// so we expect to find each of the ones we inserted above...
|
||||||
assertEquals("com.example", apk.packageName);
|
assertEquals("com.example", apk.packageName);
|
||||||
assertEquals(11, apk.vercode);
|
assertEquals(11, apk.versionCode);
|
||||||
assertEquals("v1.1", apk.version);
|
assertEquals("v1.1", apk.versionName);
|
||||||
assertEquals("xxxxyyyy", apk.hash);
|
assertEquals("xxxxyyyy", apk.hash);
|
||||||
assertEquals("a hash type", apk.hashType);
|
assertEquals("a hash type", apk.hashType);
|
||||||
|
|
||||||
@ -206,8 +206,8 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
|||||||
|
|
||||||
// Didn't ask for these fields, so should be their default values...
|
// Didn't ask for these fields, so should be their default values...
|
||||||
assertNull(apkLessFields.hashType);
|
assertNull(apkLessFields.hashType);
|
||||||
assertNull(apkLessFields.version);
|
assertNull(apkLessFields.versionName);
|
||||||
assertEquals(0, apkLessFields.vercode);
|
assertEquals(0, apkLessFields.versionCode);
|
||||||
|
|
||||||
Apk notFound = ApkProvider.Helper.find(getMockContext(), "com.doesnt.exist", 1000);
|
Apk notFound = ApkProvider.Helper.find(getMockContext(), "com.doesnt.exist", 1000);
|
||||||
assertNull(notFound);
|
assertNull(notFound);
|
||||||
|
@ -233,7 +233,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
|||||||
Apk apk = new MockApk("org.fdroid.fdroid", 13);
|
Apk apk = new MockApk("org.fdroid.fdroid", 13);
|
||||||
|
|
||||||
// Insert a new record...
|
// Insert a new record...
|
||||||
Uri newUri = TestUtils.insertApk(this, apk.packageName, apk.vercode);
|
Uri newUri = TestUtils.insertApk(this, apk.packageName, apk.versionCode);
|
||||||
assertEquals(ApkProvider.getContentUri(apk).toString(), newUri.toString());
|
assertEquals(ApkProvider.getContentUri(apk).toString(), newUri.toString());
|
||||||
cursor = queryAllApks();
|
cursor = queryAllApks();
|
||||||
assertNotNull(cursor);
|
assertNotNull(cursor);
|
||||||
@ -257,7 +257,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
|||||||
Apk toCheck = new Apk(cursor);
|
Apk toCheck = new Apk(cursor);
|
||||||
cursor.close();
|
cursor.close();
|
||||||
assertEquals("org.fdroid.fdroid", toCheck.packageName);
|
assertEquals("org.fdroid.fdroid", toCheck.packageName);
|
||||||
assertEquals(13, toCheck.vercode);
|
assertEquals(13, toCheck.versionCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCount() {
|
public void testCount() {
|
||||||
@ -291,7 +291,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
|||||||
RepoProvider.DataColumns.ADDRESS,
|
RepoProvider.DataColumns.ADDRESS,
|
||||||
RepoProvider.DataColumns.FINGERPRINT,
|
RepoProvider.DataColumns.FINGERPRINT,
|
||||||
RepoProvider.DataColumns.NAME,
|
RepoProvider.DataColumns.NAME,
|
||||||
RepoProvider.DataColumns.PUBLIC_KEY,
|
RepoProvider.DataColumns.SIGNING_CERT,
|
||||||
};
|
};
|
||||||
|
|
||||||
for (String field : repoFields) {
|
for (String field : repoFields) {
|
||||||
@ -330,7 +330,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
|||||||
// But this should have saved correctly...
|
// But this should have saved correctly...
|
||||||
assertEquals("Some features", apk.features.toString());
|
assertEquals("Some features", apk.features.toString());
|
||||||
assertEquals("com.example.com", apk.packageName);
|
assertEquals("com.example.com", apk.packageName);
|
||||||
assertEquals(1, apk.vercode);
|
assertEquals(1, apk.versionCode);
|
||||||
assertEquals(10, apk.repo);
|
assertEquals(10, apk.repo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ abstract class BaseApkProviderTest extends FDroidProviderTest<ApkProvider> {
|
|||||||
protected void assertContains(List<Apk> apks, Apk apk) {
|
protected void assertContains(List<Apk> apks, Apk apk) {
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (Apk a : apks) {
|
for (Apk a : apks) {
|
||||||
if (a.vercode == apk.vercode && a.packageName.equals(apk.packageName)) {
|
if (a.versionCode == apk.versionCode && a.packageName.equals(apk.packageName)) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -289,7 +289,7 @@ public class MultiRepoUpdaterTest extends InstrumentationTestCase {
|
|||||||
for (int versionCode : versionCodes) {
|
for (int versionCode : versionCodes) {
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (Apk apk : apksToCheck) {
|
for (Apk apk : apksToCheck) {
|
||||||
if (apk.vercode == versionCode && apk.packageName.equals(appId)) {
|
if (apk.versionCode == versionCode && apk.packageName.equals(appId)) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -405,12 +405,12 @@ public class MultiRepoUpdaterTest extends InstrumentationTestCase {
|
|||||||
|
|
||||||
private RepoUpdater createUpdater(String name, Context context) {
|
private RepoUpdater createUpdater(String name, Context context) {
|
||||||
Repo repo = new Repo();
|
Repo repo = new Repo();
|
||||||
repo.pubkey = PUB_KEY;
|
repo.signingCertificate = PUB_KEY;
|
||||||
repo.address = UUID.randomUUID().toString();
|
repo.address = UUID.randomUUID().toString();
|
||||||
repo.name = name;
|
repo.name = name;
|
||||||
|
|
||||||
ContentValues values = new ContentValues(2);
|
ContentValues values = new ContentValues(2);
|
||||||
values.put(RepoProvider.DataColumns.PUBLIC_KEY, repo.pubkey);
|
values.put(RepoProvider.DataColumns.SIGNING_CERT, repo.signingCertificate);
|
||||||
values.put(RepoProvider.DataColumns.ADDRESS, repo.address);
|
values.put(RepoProvider.DataColumns.ADDRESS, repo.address);
|
||||||
values.put(RepoProvider.DataColumns.NAME, repo.name);
|
values.put(RepoProvider.DataColumns.NAME, repo.name);
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ public class RepoUpdaterTest {
|
|||||||
private RepoUpdater repoUpdater;
|
private RepoUpdater repoUpdater;
|
||||||
private File testFilesDir;
|
private File testFilesDir;
|
||||||
|
|
||||||
String simpleIndexPubkey = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b";
|
String simpleIndexSigningCert = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b";
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@ -32,7 +32,7 @@ public class RepoUpdaterTest {
|
|||||||
context = instrumentation.getContext();
|
context = instrumentation.getContext();
|
||||||
testFilesDir = TestUtils.getWriteableDir(instrumentation);
|
testFilesDir = TestUtils.getWriteableDir(instrumentation);
|
||||||
Repo repo = new Repo();
|
Repo repo = new Repo();
|
||||||
repo.pubkey = this.simpleIndexPubkey;
|
repo.signingCertificate = this.simpleIndexSigningCert;
|
||||||
repoUpdater = new RepoUpdater(context, repo);
|
repoUpdater = new RepoUpdater(context, repo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,13 +35,13 @@ import static org.junit.Assert.fail;
|
|||||||
public class RepoXMLHandlerTest {
|
public class RepoXMLHandlerTest {
|
||||||
private static final String TAG = "RepoXMLHandlerTest";
|
private static final String TAG = "RepoXMLHandlerTest";
|
||||||
|
|
||||||
private static final String FAKE_PUBKEY = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
|
private static final String FAKE_SIGNING_CERT = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSimpleIndex() {
|
public void testSimpleIndex() {
|
||||||
Repo expectedRepo = new Repo();
|
Repo expectedRepo = new Repo();
|
||||||
expectedRepo.name = "F-Droid";
|
expectedRepo.name = "F-Droid";
|
||||||
expectedRepo.pubkey = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b";
|
expectedRepo.signingCertificate = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b";
|
||||||
expectedRepo.description = "The official repository of the F-Droid client. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitorious.org/f-droid.";
|
expectedRepo.description = "The official repository of the F-Droid client. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitorious.org/f-droid.";
|
||||||
RepoDetails actualDetails = getFromFile("simpleIndex.xml");
|
RepoDetails actualDetails = getFromFile("simpleIndex.xml");
|
||||||
handlerTestSuite(expectedRepo, actualDetails, 0, 0, -1, 12);
|
handlerTestSuite(expectedRepo, actualDetails, 0, 0, -1, 12);
|
||||||
@ -51,7 +51,7 @@ public class RepoXMLHandlerTest {
|
|||||||
public void testSmallRepo() {
|
public void testSmallRepo() {
|
||||||
Repo expectedRepo = new Repo();
|
Repo expectedRepo = new Repo();
|
||||||
expectedRepo.name = "Android-Nexus-7-20139453 on UNSET";
|
expectedRepo.name = "Android-Nexus-7-20139453 on UNSET";
|
||||||
expectedRepo.pubkey = "308202da308201c2a00302010202080eb08c796fec91aa300d06092a864886f70d0101050500302d3111300f060355040a0c084b6572706c61707031183016060355040b0c0f477561726469616e50726f6a656374301e170d3134313030333135303631325a170d3135313030333135303631325a302d3111300f060355040a0c084b6572706c61707031183016060355040b0c0f477561726469616e50726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a0282010100c7ab44b130be5c00eedcc3625462f6f6ac26e502641cd641f3e30cbb0ff1ba325158611e7fc2448a35b6a6df30dc6e23602cf6909448befcf11e2fe486b580f1e76fe5887d159050d00afd2c4079f6538896bb200627f4b3e874f011ce5df0fef5d150fcb0b377b531254e436eaf4083ea72fe3b8c3ef450789fa858f2be8f6c5335bb326aff3dda689fbc7b5ba98dea53651dbea7452c38d294985ac5dd8a9e491a695de92c706d682d6911411fcaef3b0a08a030fe8a84e47acaab0b7edcda9d190ce39e810b79b1d8732eca22b15f0d048c8d6f00503a7ee81ab6e08919ff465883432304d95238b95e95c5f74e0a421809e2a6a85825aed680e0d6939e8f0203010001300d06092a864886f70d010105050003820101006d17aad3271b8b2c299dbdb7b1182849b0d5ddb9f1016dcb3487ae0db02b6be503344c7d066e2050bcd01d411b5ee78c7ed450f0ff9da5ce228f774cbf41240361df53d9c6078159d16f4d34379ab7dedf6186489397c83b44b964251a2ebb42b7c4689a521271b1056d3b5a5fa8f28ba64fb8ce5e2226c33c45d27ba3f632dc266c12abf582b8438c2abcf3eae9de9f31152b4158ace0ef33435c20eb809f1b3988131db6e5a1442f2617c3491d9565fedb3e320e8df4236200d3bd265e47934aa578f84d0d1a5efeb49b39907e876452c46996d0feff9404b41aa5631b4482175d843d5512ded45e12a514690646492191e7add434afce63dbff8f0b03ec0c";
|
expectedRepo.signingCertificate = "308202da308201c2a00302010202080eb08c796fec91aa300d06092a864886f70d0101050500302d3111300f060355040a0c084b6572706c61707031183016060355040b0c0f477561726469616e50726f6a656374301e170d3134313030333135303631325a170d3135313030333135303631325a302d3111300f060355040a0c084b6572706c61707031183016060355040b0c0f477561726469616e50726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a0282010100c7ab44b130be5c00eedcc3625462f6f6ac26e502641cd641f3e30cbb0ff1ba325158611e7fc2448a35b6a6df30dc6e23602cf6909448befcf11e2fe486b580f1e76fe5887d159050d00afd2c4079f6538896bb200627f4b3e874f011ce5df0fef5d150fcb0b377b531254e436eaf4083ea72fe3b8c3ef450789fa858f2be8f6c5335bb326aff3dda689fbc7b5ba98dea53651dbea7452c38d294985ac5dd8a9e491a695de92c706d682d6911411fcaef3b0a08a030fe8a84e47acaab0b7edcda9d190ce39e810b79b1d8732eca22b15f0d048c8d6f00503a7ee81ab6e08919ff465883432304d95238b95e95c5f74e0a421809e2a6a85825aed680e0d6939e8f0203010001300d06092a864886f70d010105050003820101006d17aad3271b8b2c299dbdb7b1182849b0d5ddb9f1016dcb3487ae0db02b6be503344c7d066e2050bcd01d411b5ee78c7ed450f0ff9da5ce228f774cbf41240361df53d9c6078159d16f4d34379ab7dedf6186489397c83b44b964251a2ebb42b7c4689a521271b1056d3b5a5fa8f28ba64fb8ce5e2226c33c45d27ba3f632dc266c12abf582b8438c2abcf3eae9de9f31152b4158ace0ef33435c20eb809f1b3988131db6e5a1442f2617c3491d9565fedb3e320e8df4236200d3bd265e47934aa578f84d0d1a5efeb49b39907e876452c46996d0feff9404b41aa5631b4482175d843d5512ded45e12a514690646492191e7add434afce63dbff8f0b03ec0c";
|
||||||
expectedRepo.description = "A local FDroid repo generated from apps installed on Android-Nexus-7-20139453";
|
expectedRepo.description = "A local FDroid repo generated from apps installed on Android-Nexus-7-20139453";
|
||||||
RepoDetails actualDetails = getFromFile("smallRepo.xml");
|
RepoDetails actualDetails = getFromFile("smallRepo.xml");
|
||||||
handlerTestSuite(expectedRepo, actualDetails, 12, 12, 14, -1);
|
handlerTestSuite(expectedRepo, actualDetails, 12, 12, 14, -1);
|
||||||
@ -75,7 +75,7 @@ public class RepoXMLHandlerTest {
|
|||||||
public void testMediumRepo() {
|
public void testMediumRepo() {
|
||||||
Repo expectedRepo = new Repo();
|
Repo expectedRepo = new Repo();
|
||||||
expectedRepo.name = "Guardian Project Official Releases";
|
expectedRepo.name = "Guardian Project Official Releases";
|
||||||
expectedRepo.pubkey = "308205d8308203c0020900a397b4da7ecda034300d06092a864886f70d01010505003081ad310b30090603550406130255533111300f06035504080c084e657720596f726b3111300f06035504070c084e657720596f726b31143012060355040b0c0b4644726f6964205265706f31193017060355040a0c10477561726469616e2050726f6a656374311d301b06035504030c14677561726469616e70726f6a6563742e696e666f3128302606092a864886f70d0109011619726f6f7440677561726469616e70726f6a6563742e696e666f301e170d3134303632363139333931385a170d3431313131303139333931385a3081ad310b30090603550406130255533111300f06035504080c084e657720596f726b3111300f06035504070c084e657720596f726b31143012060355040b0c0b4644726f6964205265706f31193017060355040a0c10477561726469616e2050726f6a656374311d301b06035504030c14677561726469616e70726f6a6563742e696e666f3128302606092a864886f70d0109011619726f6f7440677561726469616e70726f6a6563742e696e666f30820222300d06092a864886f70d01010105000382020f003082020a0282020100b3cd79121b9b883843be3c4482e320809106b0a23755f1dd3c7f46f7d315d7bb2e943486d61fc7c811b9294dcc6b5baac4340f8db2b0d5e14749e7f35e1fc211fdbc1071b38b4753db201c314811bef885bd8921ad86facd6cc3b8f74d30a0b6e2e6e576f906e9581ef23d9c03e926e06d1f033f28bd1e21cfa6a0e3ff5c9d8246cf108d82b488b9fdd55d7de7ebb6a7f64b19e0d6b2ab1380a6f9d42361770d1956701a7f80e2de568acd0bb4527324b1e0973e89595d91c8cc102d9248525ae092e2c9b69f7414f724195b81427f28b1d3d09a51acfe354387915fd9521e8c890c125fc41a12bf34d2a1b304067ab7251e0e9ef41833ce109e76963b0b256395b16b886bca21b831f1408f836146019e7908829e716e72b81006610a2af08301de5d067c9e114a1e5759db8a6be6a3cc2806bcfe6fafd41b5bc9ddddb3dc33d6f605b1ca7d8a9e0ecdd6390d38906649e68a90a717bea80fa220170eea0c86fc78a7e10dac7b74b8e62045a3ecca54e035281fdc9fe5920a855fde3c0be522e3aef0c087524f13d973dff3768158b01a5800a060c06b451ec98d627dd052eda804d0556f60dbc490d94e6e9dea62ffcafb5beffbd9fc38fb2f0d7050004fe56b4dda0a27bc47554e1e0a7d764e17622e71f83a475db286bc7862deee1327e2028955d978272ea76bf0b88e70a18621aba59ff0c5993ef5f0e5d6b6b98e68b70203010001300d06092a864886f70d0101050500038202010079c79c8ef408a20d243d8bd8249fb9a48350dc19663b5e0fce67a8dbcb7de296c5ae7bbf72e98a2020fb78f2db29b54b0e24b181aa1c1d333cc0303685d6120b03216a913f96b96eb838f9bff125306ae3120af838c9fc07ebb5100125436bd24ec6d994d0bff5d065221871f8410daf536766757239bf594e61c5432c9817281b985263bada8381292e543a49814061ae11c92a316e7dc100327b59e3da90302c5ada68c6a50201bda1fcce800b53f381059665dbabeeb0b50eb22b2d7d2d9b0aa7488ca70e67ac6c518adb8e78454a466501e89d81a45bf1ebc350896f2c3ae4b6679ecfbf9d32960d4f5b493125c7876ef36158562371193f600bc511000a67bdb7c664d018f99d9e589868d103d7e0994f166b2ba18ff7e67d8c4da749e44dfae1d930ae5397083a51675c409049dfb626a96246c0015ca696e94ebb767a20147834bf78b07fece3f0872b057c1c519ff882501995237d8206b0b3832f78753ebd8dcbd1d3d9f5ba733538113af6b407d960ec4353c50eb38ab29888238da843cd404ed8f4952f59e4bbc0035fc77a54846a9d419179c46af1b4a3b7fc98e4d312aaa29b9b7d79e739703dc0fa41c7280d5587709277ffa11c3620f5fba985b82c238ba19b17ebd027af9424be0941719919f620dd3bb3c3f11638363708aa11f858e153cf3a69bce69978b90e4a273836100aa1e617ba455cd00426847f";
|
expectedRepo.signingCertificate = "308205d8308203c0020900a397b4da7ecda034300d06092a864886f70d01010505003081ad310b30090603550406130255533111300f06035504080c084e657720596f726b3111300f06035504070c084e657720596f726b31143012060355040b0c0b4644726f6964205265706f31193017060355040a0c10477561726469616e2050726f6a656374311d301b06035504030c14677561726469616e70726f6a6563742e696e666f3128302606092a864886f70d0109011619726f6f7440677561726469616e70726f6a6563742e696e666f301e170d3134303632363139333931385a170d3431313131303139333931385a3081ad310b30090603550406130255533111300f06035504080c084e657720596f726b3111300f06035504070c084e657720596f726b31143012060355040b0c0b4644726f6964205265706f31193017060355040a0c10477561726469616e2050726f6a656374311d301b06035504030c14677561726469616e70726f6a6563742e696e666f3128302606092a864886f70d0109011619726f6f7440677561726469616e70726f6a6563742e696e666f30820222300d06092a864886f70d01010105000382020f003082020a0282020100b3cd79121b9b883843be3c4482e320809106b0a23755f1dd3c7f46f7d315d7bb2e943486d61fc7c811b9294dcc6b5baac4340f8db2b0d5e14749e7f35e1fc211fdbc1071b38b4753db201c314811bef885bd8921ad86facd6cc3b8f74d30a0b6e2e6e576f906e9581ef23d9c03e926e06d1f033f28bd1e21cfa6a0e3ff5c9d8246cf108d82b488b9fdd55d7de7ebb6a7f64b19e0d6b2ab1380a6f9d42361770d1956701a7f80e2de568acd0bb4527324b1e0973e89595d91c8cc102d9248525ae092e2c9b69f7414f724195b81427f28b1d3d09a51acfe354387915fd9521e8c890c125fc41a12bf34d2a1b304067ab7251e0e9ef41833ce109e76963b0b256395b16b886bca21b831f1408f836146019e7908829e716e72b81006610a2af08301de5d067c9e114a1e5759db8a6be6a3cc2806bcfe6fafd41b5bc9ddddb3dc33d6f605b1ca7d8a9e0ecdd6390d38906649e68a90a717bea80fa220170eea0c86fc78a7e10dac7b74b8e62045a3ecca54e035281fdc9fe5920a855fde3c0be522e3aef0c087524f13d973dff3768158b01a5800a060c06b451ec98d627dd052eda804d0556f60dbc490d94e6e9dea62ffcafb5beffbd9fc38fb2f0d7050004fe56b4dda0a27bc47554e1e0a7d764e17622e71f83a475db286bc7862deee1327e2028955d978272ea76bf0b88e70a18621aba59ff0c5993ef5f0e5d6b6b98e68b70203010001300d06092a864886f70d0101050500038202010079c79c8ef408a20d243d8bd8249fb9a48350dc19663b5e0fce67a8dbcb7de296c5ae7bbf72e98a2020fb78f2db29b54b0e24b181aa1c1d333cc0303685d6120b03216a913f96b96eb838f9bff125306ae3120af838c9fc07ebb5100125436bd24ec6d994d0bff5d065221871f8410daf536766757239bf594e61c5432c9817281b985263bada8381292e543a49814061ae11c92a316e7dc100327b59e3da90302c5ada68c6a50201bda1fcce800b53f381059665dbabeeb0b50eb22b2d7d2d9b0aa7488ca70e67ac6c518adb8e78454a466501e89d81a45bf1ebc350896f2c3ae4b6679ecfbf9d32960d4f5b493125c7876ef36158562371193f600bc511000a67bdb7c664d018f99d9e589868d103d7e0994f166b2ba18ff7e67d8c4da749e44dfae1d930ae5397083a51675c409049dfb626a96246c0015ca696e94ebb767a20147834bf78b07fece3f0872b057c1c519ff882501995237d8206b0b3832f78753ebd8dcbd1d3d9f5ba733538113af6b407d960ec4353c50eb38ab29888238da843cd404ed8f4952f59e4bbc0035fc77a54846a9d419179c46af1b4a3b7fc98e4d312aaa29b9b7d79e739703dc0fa41c7280d5587709277ffa11c3620f5fba985b82c238ba19b17ebd027af9424be0941719919f620dd3bb3c3f11638363708aa11f858e153cf3a69bce69978b90e4a273836100aa1e617ba455cd00426847f";
|
||||||
expectedRepo.description = "The official app repository of The Guardian Project. Applications in this repository are official binaries build by the original application developers and signed by the same key as the APKs that are released in the Google Play store.";
|
expectedRepo.description = "The official app repository of The Guardian Project. Applications in this repository are official binaries build by the original application developers and signed by the same key as the APKs that are released in the Google Play store.";
|
||||||
RepoDetails actualDetails = getFromFile("mediumRepo.xml");
|
RepoDetails actualDetails = getFromFile("mediumRepo.xml");
|
||||||
handlerTestSuite(expectedRepo, actualDetails, 15, 36, 60, 12);
|
handlerTestSuite(expectedRepo, actualDetails, 15, 36, 60, 12);
|
||||||
@ -102,7 +102,7 @@ public class RepoXMLHandlerTest {
|
|||||||
public void testLargeRepo() {
|
public void testLargeRepo() {
|
||||||
Repo expectedRepo = new Repo();
|
Repo expectedRepo = new Repo();
|
||||||
expectedRepo.name = "F-Droid";
|
expectedRepo.name = "F-Droid";
|
||||||
expectedRepo.pubkey = "3082035e30820246a00302010202044c49cd00300d06092a864886f70d01010505003071310b300906035504061302554b3110300e06035504081307556e6b6e6f776e3111300f0603550407130857657468657262793110300e060355040a1307556e6b6e6f776e3110300e060355040b1307556e6b6e6f776e311930170603550403131043696172616e2047756c746e69656b73301e170d3130303732333137313032345a170d3337313230383137313032345a3071310b300906035504061302554b3110300e06035504081307556e6b6e6f776e3111300f0603550407130857657468657262793110300e060355040a1307556e6b6e6f776e3110300e060355040b1307556e6b6e6f776e311930170603550403131043696172616e2047756c746e69656b7330820122300d06092a864886f70d01010105000382010f003082010a028201010096d075e47c014e7822c89fd67f795d23203e2a8843f53ba4e6b1bf5f2fd0e225938267cfcae7fbf4fe596346afbaf4070fdb91f66fbcdf2348a3d92430502824f80517b156fab00809bdc8e631bfa9afd42d9045ab5fd6d28d9e140afc1300917b19b7c6c4df4a494cf1f7cb4a63c80d734265d735af9e4f09455f427aa65a53563f87b336ca2c19d244fcbba617ba0b19e56ed34afe0b253ab91e2fdb1271f1b9e3c3232027ed8862a112f0706e234cf236914b939bcf959821ecb2a6c18057e070de3428046d94b175e1d89bd795e535499a091f5bc65a79d539a8d43891ec504058acb28c08393b5718b57600a211e803f4a634e5c57f25b9b8c4422c6fd90203010001300d06092a864886f70d0101050500038201010008e4ef699e9807677ff56753da73efb2390d5ae2c17e4db691d5df7a7b60fc071ae509c5414be7d5da74df2811e83d3668c4a0b1abc84b9fa7d96b4cdf30bba68517ad2a93e233b042972ac0553a4801c9ebe07bf57ebe9a3b3d6d663965260e50f3b8f46db0531761e60340a2bddc3426098397fda54044a17e5244549f9869b460ca5e6e216b6f6a2db0580b480ca2afe6ec6b46eedacfa4aa45038809ece0c5978653d6c85f678e7f5a2156d1bedd8117751e64a4b0dcd140f3040b021821a8d93aed8d01ba36db6c82372211fed714d9a32607038cdfd565bd529ffc637212aaa2c224ef22b603eccefb5bf1e085c191d4b24fe742b17ab3f55d4e6f05ef";
|
expectedRepo.signingCertificate = "3082035e30820246a00302010202044c49cd00300d06092a864886f70d01010505003071310b300906035504061302554b3110300e06035504081307556e6b6e6f776e3111300f0603550407130857657468657262793110300e060355040a1307556e6b6e6f776e3110300e060355040b1307556e6b6e6f776e311930170603550403131043696172616e2047756c746e69656b73301e170d3130303732333137313032345a170d3337313230383137313032345a3071310b300906035504061302554b3110300e06035504081307556e6b6e6f776e3111300f0603550407130857657468657262793110300e060355040a1307556e6b6e6f776e3110300e060355040b1307556e6b6e6f776e311930170603550403131043696172616e2047756c746e69656b7330820122300d06092a864886f70d01010105000382010f003082010a028201010096d075e47c014e7822c89fd67f795d23203e2a8843f53ba4e6b1bf5f2fd0e225938267cfcae7fbf4fe596346afbaf4070fdb91f66fbcdf2348a3d92430502824f80517b156fab00809bdc8e631bfa9afd42d9045ab5fd6d28d9e140afc1300917b19b7c6c4df4a494cf1f7cb4a63c80d734265d735af9e4f09455f427aa65a53563f87b336ca2c19d244fcbba617ba0b19e56ed34afe0b253ab91e2fdb1271f1b9e3c3232027ed8862a112f0706e234cf236914b939bcf959821ecb2a6c18057e070de3428046d94b175e1d89bd795e535499a091f5bc65a79d539a8d43891ec504058acb28c08393b5718b57600a211e803f4a634e5c57f25b9b8c4422c6fd90203010001300d06092a864886f70d0101050500038201010008e4ef699e9807677ff56753da73efb2390d5ae2c17e4db691d5df7a7b60fc071ae509c5414be7d5da74df2811e83d3668c4a0b1abc84b9fa7d96b4cdf30bba68517ad2a93e233b042972ac0553a4801c9ebe07bf57ebe9a3b3d6d663965260e50f3b8f46db0531761e60340a2bddc3426098397fda54044a17e5244549f9869b460ca5e6e216b6f6a2db0580b480ca2afe6ec6b46eedacfa4aa45038809ece0c5978653d6c85f678e7f5a2156d1bedd8117751e64a4b0dcd140f3040b021821a8d93aed8d01ba36db6c82372211fed714d9a32607038cdfd565bd529ffc637212aaa2c224ef22b603eccefb5bf1e085c191d4b24fe742b17ab3f55d4e6f05ef";
|
||||||
expectedRepo.description = "The official FDroid repository. Applications in this repository are mostly built directory from the source code. Some are official binaries built by the original application developers - these will be replaced by source-built versions over time.";
|
expectedRepo.description = "The official FDroid repository. Applications in this repository are mostly built directory from the source code. Some are official binaries built by the original application developers - these will be replaced by source-built versions over time.";
|
||||||
RepoDetails actualDetails = getFromFile("largeRepo.xml");
|
RepoDetails actualDetails = getFromFile("largeRepo.xml");
|
||||||
handlerTestSuite(expectedRepo, actualDetails, 1211, 2381, 14, 12);
|
handlerTestSuite(expectedRepo, actualDetails, 1211, 2381, 14, 12);
|
||||||
@ -612,9 +612,9 @@ public class RepoXMLHandlerTest {
|
|||||||
private void handlerTestSuite(Repo expectedRepo, RepoDetails actualDetails, int appCount, int apkCount, int maxAge, int version) {
|
private void handlerTestSuite(Repo expectedRepo, RepoDetails actualDetails, int appCount, int apkCount, int maxAge, int version) {
|
||||||
assertNotNull(actualDetails);
|
assertNotNull(actualDetails);
|
||||||
assertFalse(TextUtils.isEmpty(actualDetails.signingCert));
|
assertFalse(TextUtils.isEmpty(actualDetails.signingCert));
|
||||||
assertEquals(expectedRepo.pubkey.length(), actualDetails.signingCert.length());
|
assertEquals(expectedRepo.signingCertificate.length(), actualDetails.signingCert.length());
|
||||||
assertEquals(expectedRepo.pubkey, actualDetails.signingCert);
|
assertEquals(expectedRepo.signingCertificate, actualDetails.signingCert);
|
||||||
assertFalse(FAKE_PUBKEY.equals(actualDetails.signingCert));
|
assertFalse(FAKE_SIGNING_CERT.equals(actualDetails.signingCert));
|
||||||
|
|
||||||
assertFalse(TextUtils.isEmpty(actualDetails.name));
|
assertFalse(TextUtils.isEmpty(actualDetails.name));
|
||||||
assertEquals(expectedRepo.name.length(), actualDetails.name.length());
|
assertEquals(expectedRepo.name.length(), actualDetails.name.length());
|
||||||
|
@ -132,7 +132,7 @@ public class TestUtils {
|
|||||||
|
|
||||||
// Required fields (NOT NULL in the database).
|
// Required fields (NOT NULL in the database).
|
||||||
values.put(ApkProvider.DataColumns.REPO_ID, 1);
|
values.put(ApkProvider.DataColumns.REPO_ID, 1);
|
||||||
values.put(ApkProvider.DataColumns.VERSION, "The good one");
|
values.put(ApkProvider.DataColumns.VERSION_NAME, "The good one");
|
||||||
values.put(ApkProvider.DataColumns.HASH, "11111111aaaaaaaa");
|
values.put(ApkProvider.DataColumns.HASH, "11111111aaaaaaaa");
|
||||||
values.put(ApkProvider.DataColumns.NAME, "Test Apk");
|
values.put(ApkProvider.DataColumns.NAME, "Test Apk");
|
||||||
values.put(ApkProvider.DataColumns.SIZE, 10000);
|
values.put(ApkProvider.DataColumns.SIZE, 10000);
|
||||||
|
@ -6,7 +6,7 @@ public class MockApk extends Apk {
|
|||||||
|
|
||||||
public MockApk(String id, int versionCode) {
|
public MockApk(String id, int versionCode) {
|
||||||
this.packageName = id;
|
this.packageName = id;
|
||||||
this.vercode = versionCode;
|
this.versionCode = versionCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
|
|
||||||
private String getInstalledStatus(final Apk apk) {
|
private String getInstalledStatus(final Apk apk) {
|
||||||
// Definitely not installed.
|
// Definitely not installed.
|
||||||
if (apk.vercode != app.installedVersionCode) {
|
if (apk.versionCode != app.installedVersionCode) {
|
||||||
return getString(R.string.app_not_installed);
|
return getString(R.string.app_not_installed);
|
||||||
}
|
}
|
||||||
// Definitely installed this version.
|
// Definitely installed this version.
|
||||||
@ -210,8 +210,8 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
holder.version.setText(getString(R.string.version)
|
holder.version.setText(getString(R.string.version)
|
||||||
+ " " + apk.version
|
+ " " + apk.versionName
|
||||||
+ (apk.vercode == app.suggestedVercode ? " ☆" : ""));
|
+ (apk.versionCode == app.suggestedVersionCode ? " ☆" : ""));
|
||||||
|
|
||||||
holder.status.setText(getInstalledStatus(apk));
|
holder.status.setText(getInstalledStatus(apk));
|
||||||
|
|
||||||
@ -661,7 +661,7 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
menu.add(Menu.NONE, IGNORETHIS, 2, R.string.menu_ignore_this)
|
menu.add(Menu.NONE, IGNORETHIS, 2, R.string.menu_ignore_this)
|
||||||
.setIcon(R.drawable.ic_do_not_disturb_white)
|
.setIcon(R.drawable.ic_do_not_disturb_white)
|
||||||
.setCheckable(true)
|
.setCheckable(true)
|
||||||
.setChecked(app.ignoreThisUpdate >= app.suggestedVercode);
|
.setChecked(app.ignoreThisUpdate >= app.suggestedVersionCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignore on devices without Bluetooth
|
// Ignore on devices without Bluetooth
|
||||||
@ -766,8 +766,8 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
|
|
||||||
case INSTALL:
|
case INSTALL:
|
||||||
// Note that this handles updating as well as installing.
|
// Note that this handles updating as well as installing.
|
||||||
if (app.suggestedVercode > 0) {
|
if (app.suggestedVersionCode > 0) {
|
||||||
final Apk apkToInstall = ApkProvider.Helper.find(this, app.packageName, app.suggestedVercode);
|
final Apk apkToInstall = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode);
|
||||||
install(apkToInstall);
|
install(apkToInstall);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -782,10 +782,10 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case IGNORETHIS:
|
case IGNORETHIS:
|
||||||
if (app.ignoreThisUpdate >= app.suggestedVercode) {
|
if (app.ignoreThisUpdate >= app.suggestedVersionCode) {
|
||||||
app.ignoreThisUpdate = 0;
|
app.ignoreThisUpdate = 0;
|
||||||
} else {
|
} else {
|
||||||
app.ignoreThisUpdate = app.suggestedVercode;
|
app.ignoreThisUpdate = app.suggestedVersionCode;
|
||||||
}
|
}
|
||||||
item.setChecked(app.ignoreThisUpdate > 0);
|
item.setChecked(app.ignoreThisUpdate > 0);
|
||||||
return true;
|
return true;
|
||||||
@ -1246,7 +1246,7 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
Apk curApk = null;
|
Apk curApk = null;
|
||||||
for (int i = 0; i < appDetails.getApks().getCount(); i++) {
|
for (int i = 0; i < appDetails.getApks().getCount(); i++) {
|
||||||
final Apk apk = appDetails.getApks().getItem(i);
|
final Apk apk = appDetails.getApks().getItem(i);
|
||||||
if (apk.vercode == app.suggestedVercode) {
|
if (apk.versionCode == app.suggestedVersionCode) {
|
||||||
curApk = apk;
|
curApk = apk;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1498,7 +1498,7 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
if (appDetails.activeDownloadUrlString != null) {
|
if (appDetails.activeDownloadUrlString != null) {
|
||||||
btMain.setText(R.string.downloading);
|
btMain.setText(R.string.downloading);
|
||||||
btMain.setEnabled(false);
|
btMain.setEnabled(false);
|
||||||
} else if (!app.isInstalled() && app.suggestedVercode > 0 &&
|
} else if (!app.isInstalled() && app.suggestedVersionCode > 0 &&
|
||||||
appDetails.adapter.getCount() > 0) {
|
appDetails.adapter.getCount() > 0) {
|
||||||
// Check count > 0 due to incompatible apps resulting in an empty list.
|
// Check count > 0 due to incompatible apps resulting in an empty list.
|
||||||
// If App isn't installed
|
// If App isn't installed
|
||||||
@ -1538,7 +1538,7 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
TextView currentVersion = (TextView) view.findViewById(R.id.current_version);
|
TextView currentVersion = (TextView) view.findViewById(R.id.current_version);
|
||||||
if (!appDetails.getApks().isEmpty()) {
|
if (!appDetails.getApks().isEmpty()) {
|
||||||
currentVersion.setText(appDetails.getApks().getItem(0).version + " (" + app.license + ")");
|
currentVersion.setText(appDetails.getApks().getItem(0).versionName + " (" + app.license + ")");
|
||||||
} else {
|
} else {
|
||||||
currentVersion.setVisibility(View.GONE);
|
currentVersion.setVisibility(View.GONE);
|
||||||
btMain.setVisibility(View.GONE);
|
btMain.setVisibility(View.GONE);
|
||||||
@ -1550,8 +1550,8 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
App app = appDetails.getApp();
|
App app = appDetails.getApp();
|
||||||
AppDetails activity = (AppDetails) getActivity();
|
AppDetails activity = (AppDetails) getActivity();
|
||||||
if (updateWanted && app.suggestedVercode > 0) {
|
if (updateWanted && app.suggestedVersionCode > 0) {
|
||||||
Apk apkToInstall = ApkProvider.Helper.find(activity, app.packageName, app.suggestedVercode);
|
Apk apkToInstall = ApkProvider.Helper.find(activity, app.packageName, app.suggestedVersionCode);
|
||||||
activity.install(apkToInstall);
|
activity.install(apkToInstall);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1563,11 +1563,11 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
} else {
|
} else {
|
||||||
activity.removeApk(app.packageName);
|
activity.removeApk(app.packageName);
|
||||||
}
|
}
|
||||||
} else if (app.suggestedVercode > 0) {
|
} else if (app.suggestedVersionCode > 0) {
|
||||||
// If not installed, install
|
// If not installed, install
|
||||||
btMain.setEnabled(false);
|
btMain.setEnabled(false);
|
||||||
btMain.setText(R.string.system_install_installing);
|
btMain.setText(R.string.system_install_installing);
|
||||||
final Apk apkToInstall = ApkProvider.Helper.find(activity, app.packageName, app.suggestedVercode);
|
final Apk apkToInstall = ApkProvider.Helper.find(activity, app.packageName, app.suggestedVersionCode);
|
||||||
activity.install(apkToInstall);
|
activity.install(apkToInstall);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1619,9 +1619,9 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
public void onListItemClick(ListView l, View v, int position, long id) {
|
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||||
App app = appDetails.getApp();
|
App app = appDetails.getApp();
|
||||||
final Apk apk = appDetails.getApks().getItem(position - l.getHeaderViewsCount());
|
final Apk apk = appDetails.getApks().getItem(position - l.getHeaderViewsCount());
|
||||||
if (app.installedVersionCode == apk.vercode) {
|
if (app.installedVersionCode == apk.versionCode) {
|
||||||
remove();
|
remove();
|
||||||
} else if (app.installedVersionCode > apk.vercode) {
|
} else if (app.installedVersionCode > apk.versionCode) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
builder.setMessage(R.string.installDowngrade);
|
builder.setMessage(R.string.installDowngrade);
|
||||||
builder.setPositiveButton(R.string.yes,
|
builder.setPositiveButton(R.string.yes,
|
||||||
|
@ -102,7 +102,7 @@ public class CompatibilityChecker {
|
|||||||
}
|
}
|
||||||
if (!features.contains(feat)) {
|
if (!features.contains(feat)) {
|
||||||
Collections.addAll(incompatibleReasons, feat.split(","));
|
Collections.addAll(incompatibleReasons, feat.split(","));
|
||||||
Utils.debugLog(TAG, apk.packageName + " vercode " + apk.vercode
|
Utils.debugLog(TAG, apk.packageName + " vercode " + apk.versionCode
|
||||||
+ " is incompatible based on lack of " + feat);
|
+ " is incompatible based on lack of " + feat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,7 +111,7 @@ public class CompatibilityChecker {
|
|||||||
for (final String code : apk.nativecode) {
|
for (final String code : apk.nativecode) {
|
||||||
incompatibleReasons.add(code);
|
incompatibleReasons.add(code);
|
||||||
}
|
}
|
||||||
Utils.debugLog(TAG, apk.packageName + " vercode " + apk.vercode
|
Utils.debugLog(TAG, apk.packageName + " vercode " + apk.versionCode
|
||||||
+ " only supports " + Utils.CommaSeparatedList.str(apk.nativecode)
|
+ " only supports " + Utils.CommaSeparatedList.str(apk.nativecode)
|
||||||
+ " while your architectures are " + cpuAbisDesc);
|
+ " while your architectures are " + cpuAbisDesc);
|
||||||
}
|
}
|
||||||
|
@ -216,7 +216,7 @@ public class RepoUpdater {
|
|||||||
private void assertSigningCertFromXmlCorrect() throws SigningException {
|
private void assertSigningCertFromXmlCorrect() throws SigningException {
|
||||||
|
|
||||||
// no signing cert read from database, this is the first use
|
// no signing cert read from database, this is the first use
|
||||||
if (repo.pubkey == null) {
|
if (repo.signingCertificate == null) {
|
||||||
verifyAndStoreTOFUCerts(signingCertFromIndexXml, signingCertFromJar);
|
verifyAndStoreTOFUCerts(signingCertFromIndexXml, signingCertFromJar);
|
||||||
}
|
}
|
||||||
verifyCerts(signingCertFromIndexXml, signingCertFromJar);
|
verifyCerts(signingCertFromIndexXml, signingCertFromJar);
|
||||||
@ -308,8 +308,8 @@ public class RepoUpdater {
|
|||||||
*/
|
*/
|
||||||
private void verifyAndStoreTOFUCerts(String certFromIndexXml, X509Certificate rawCertFromJar)
|
private void verifyAndStoreTOFUCerts(String certFromIndexXml, X509Certificate rawCertFromJar)
|
||||||
throws SigningException {
|
throws SigningException {
|
||||||
if (repo.pubkey != null) {
|
if (repo.signingCertificate != null) {
|
||||||
return; // there is a repo.pubkey already, nothing to TOFU
|
return; // there is a repo.signingCertificate already, nothing to TOFU
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The first time a repo is added, it can be added with the signing certificate's
|
/* The first time a repo is added, it can be added with the signing certificate's
|
||||||
@ -328,7 +328,7 @@ 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(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatDate(new Date(), ""));
|
||||||
values.put(RepoProvider.DataColumns.PUBLIC_KEY, Hasher.hex(rawCertFromJar));
|
values.put(RepoProvider.DataColumns.SIGNING_CERT, Hasher.hex(rawCertFromJar));
|
||||||
RepoProvider.Helper.update(context, repo, values);
|
RepoProvider.Helper.update(context, repo, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,16 +348,16 @@ public class RepoUpdater {
|
|||||||
// convert binary data to string version that is used in FDroid's database
|
// convert binary data to string version that is used in FDroid's database
|
||||||
String certFromJar = Hasher.hex(rawCertFromJar);
|
String certFromJar = Hasher.hex(rawCertFromJar);
|
||||||
|
|
||||||
// repo and repo.pubkey must be pre-loaded from the database
|
// repo and repo.signingCertificate must be pre-loaded from the database
|
||||||
if (TextUtils.isEmpty(repo.pubkey)
|
if (TextUtils.isEmpty(repo.signingCertificate)
|
||||||
|| TextUtils.isEmpty(certFromJar)
|
|| TextUtils.isEmpty(certFromJar)
|
||||||
|| TextUtils.isEmpty(certFromIndexXml)) {
|
|| TextUtils.isEmpty(certFromIndexXml)) {
|
||||||
throw new SigningException(repo, "A empty repo or signing certificate is invalid!");
|
throw new SigningException(repo, "A empty repo or signing certificate is invalid!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// though its called repo.pubkey, its actually a X509 certificate
|
// though its called repo.signingCertificate, its actually a X509 certificate
|
||||||
if (repo.pubkey.equals(certFromJar)
|
if (repo.signingCertificate.equals(certFromJar)
|
||||||
&& repo.pubkey.equals(certFromIndexXml)
|
&& repo.signingCertificate.equals(certFromIndexXml)
|
||||||
&& certFromIndexXml.equals(certFromJar)) {
|
&& certFromIndexXml.equals(certFromJar)) {
|
||||||
return; // we have a match!
|
return; // we have a match!
|
||||||
}
|
}
|
||||||
|
@ -96,10 +96,10 @@ public class RepoXMLHandler extends DefaultHandler {
|
|||||||
if (curapk != null) {
|
if (curapk != null) {
|
||||||
switch (localName) {
|
switch (localName) {
|
||||||
case "version":
|
case "version":
|
||||||
curapk.version = str;
|
curapk.versionName = str;
|
||||||
break;
|
break;
|
||||||
case "versioncode":
|
case "versioncode":
|
||||||
curapk.vercode = Utils.parseInt(str, -1);
|
curapk.versionCode = Utils.parseInt(str, -1);
|
||||||
break;
|
break;
|
||||||
case "size":
|
case "size":
|
||||||
curapk.size = Utils.parseInt(str, 0);
|
curapk.size = Utils.parseInt(str, 0);
|
||||||
@ -204,10 +204,10 @@ public class RepoXMLHandler extends DefaultHandler {
|
|||||||
curapp.lastUpdated = Utils.parseDate(str, null);
|
curapp.lastUpdated = Utils.parseDate(str, null);
|
||||||
break;
|
break;
|
||||||
case "marketversion":
|
case "marketversion":
|
||||||
curapp.upstreamVersion = str;
|
curapp.upstreamVersionName = str;
|
||||||
break;
|
break;
|
||||||
case "marketvercode":
|
case "marketvercode":
|
||||||
curapp.upstreamVercode = Utils.parseInt(str, -1);
|
curapp.upstreamVersionCode = Utils.parseInt(str, -1);
|
||||||
break;
|
break;
|
||||||
case "categories":
|
case "categories":
|
||||||
curapp.categories = Utils.CommaSeparatedList.make(str);
|
curapp.categories = Utils.CommaSeparatedList.make(str);
|
||||||
|
@ -471,7 +471,7 @@ public class UpdateService extends IntentService implements ProgressListener {
|
|||||||
for (int i = 0; i < Math.min(hasUpdates.getCount(), MAX_UPDATES_TO_SHOW); i++) {
|
for (int i = 0; i < Math.min(hasUpdates.getCount(), MAX_UPDATES_TO_SHOW); i++) {
|
||||||
App app = new App(hasUpdates);
|
App app = new App(hasUpdates);
|
||||||
hasUpdates.moveToNext();
|
hasUpdates.moveToNext();
|
||||||
inboxStyle.addLine(app.name + " (" + app.installedVersionName + " → " + app.getSuggestedVersion() + ")");
|
inboxStyle.addLine(app.name + " (" + app.installedVersionName + " → " + app.getSuggestedVersionName() + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasUpdates.getCount() > MAX_UPDATES_TO_SHOW) {
|
if (hasUpdates.getCount() > MAX_UPDATES_TO_SHOW) {
|
||||||
@ -492,7 +492,7 @@ public class UpdateService extends IntentService implements ProgressListener {
|
|||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
for (int i = 0; i < cursor.getCount(); i++) {
|
for (int i = 0; i < cursor.getCount(); i++) {
|
||||||
App app = new App(cursor);
|
App app = new App(cursor);
|
||||||
Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVercode, new String[]{
|
Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode, new String[]{
|
||||||
ApkProvider.DataColumns.NAME,
|
ApkProvider.DataColumns.NAME,
|
||||||
});
|
});
|
||||||
String urlString = Utils.getApkUrl(repoAddress, apk);
|
String urlString = Utils.getApkUrl(repoAddress, apk);
|
||||||
|
@ -15,8 +15,8 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
|||||||
public static final int SDK_VERSION_MAX_VALUE = Byte.MAX_VALUE;
|
public static final int SDK_VERSION_MAX_VALUE = Byte.MAX_VALUE;
|
||||||
|
|
||||||
public String packageName;
|
public String packageName;
|
||||||
public String version;
|
public String versionName;
|
||||||
public int vercode;
|
public int versionCode;
|
||||||
public int size; // Size in bytes - 0 means we don't know!
|
public int size; // Size in bytes - 0 means we don't know!
|
||||||
public long repo; // ID of the repo it comes from
|
public long repo; // ID of the repo it comes from
|
||||||
public String hash;
|
public String hash;
|
||||||
@ -105,11 +105,11 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
|||||||
case ApkProvider.DataColumns.SOURCE_NAME:
|
case ApkProvider.DataColumns.SOURCE_NAME:
|
||||||
srcname = cursor.getString(i);
|
srcname = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case ApkProvider.DataColumns.VERSION:
|
case ApkProvider.DataColumns.VERSION_NAME:
|
||||||
version = cursor.getString(i);
|
versionName = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case ApkProvider.DataColumns.VERSION_CODE:
|
case ApkProvider.DataColumns.VERSION_CODE:
|
||||||
vercode = cursor.getInt(i);
|
versionCode = cursor.getInt(i);
|
||||||
break;
|
break;
|
||||||
case ApkProvider.DataColumns.REPO_VERSION:
|
case ApkProvider.DataColumns.REPO_VERSION:
|
||||||
repoVersion = cursor.getInt(i);
|
repoVersion = cursor.getInt(i);
|
||||||
@ -123,14 +123,14 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return packageName + " (version " + vercode + ")";
|
return packageName + " (version " + versionCode + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContentValues toContentValues() {
|
public ContentValues toContentValues() {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(ApkProvider.DataColumns.PACKAGE_NAME, packageName);
|
values.put(ApkProvider.DataColumns.PACKAGE_NAME, packageName);
|
||||||
values.put(ApkProvider.DataColumns.VERSION, version);
|
values.put(ApkProvider.DataColumns.VERSION_NAME, versionName);
|
||||||
values.put(ApkProvider.DataColumns.VERSION_CODE, vercode);
|
values.put(ApkProvider.DataColumns.VERSION_CODE, versionCode);
|
||||||
values.put(ApkProvider.DataColumns.REPO_ID, repo);
|
values.put(ApkProvider.DataColumns.REPO_ID, repo);
|
||||||
values.put(ApkProvider.DataColumns.HASH, hash);
|
values.put(ApkProvider.DataColumns.HASH, hash);
|
||||||
values.put(ApkProvider.DataColumns.HASH_TYPE, hashType);
|
values.put(ApkProvider.DataColumns.HASH_TYPE, hashType);
|
||||||
@ -153,9 +153,9 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
|||||||
@TargetApi(19)
|
@TargetApi(19)
|
||||||
public int compareTo(Apk apk) {
|
public int compareTo(Apk apk) {
|
||||||
if (Build.VERSION.SDK_INT < 19) {
|
if (Build.VERSION.SDK_INT < 19) {
|
||||||
return Integer.valueOf(vercode).compareTo(apk.vercode);
|
return Integer.valueOf(versionCode).compareTo(apk.versionCode);
|
||||||
}
|
}
|
||||||
return Integer.compare(vercode, apk.vercode);
|
return Integer.compare(versionCode, apk.versionCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
|
|
||||||
public static void update(Context context, Apk apk) {
|
public static void update(Context context, Apk apk) {
|
||||||
ContentResolver resolver = context.getContentResolver();
|
ContentResolver resolver = context.getContentResolver();
|
||||||
Uri uri = getContentUri(apk.packageName, apk.vercode);
|
Uri uri = getContentUri(apk.packageName, apk.versionCode);
|
||||||
resolver.update(uri, apk.toContentValues(), null, null);
|
resolver.update(uri, apk.toContentValues(), null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
String _COUNT_DISTINCT_ID = "countDistinct";
|
String _COUNT_DISTINCT_ID = "countDistinct";
|
||||||
|
|
||||||
String PACKAGE_NAME = "id";
|
String PACKAGE_NAME = "id";
|
||||||
String VERSION = "version";
|
String VERSION_NAME = "version";
|
||||||
String REPO_ID = "repo";
|
String REPO_ID = "repo";
|
||||||
String HASH = "hash";
|
String HASH = "hash";
|
||||||
String VERSION_CODE = "vercode";
|
String VERSION_CODE = "vercode";
|
||||||
@ -216,8 +216,8 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
String REPO_ADDRESS = "repoAddress";
|
String REPO_ADDRESS = "repoAddress";
|
||||||
|
|
||||||
String[] ALL = {
|
String[] ALL = {
|
||||||
_ID, PACKAGE_NAME, VERSION, REPO_ID, HASH, VERSION_CODE, NAME, SIZE,
|
_ID, PACKAGE_NAME, VERSION_NAME, REPO_ID, HASH, VERSION_CODE, NAME,
|
||||||
SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, MAX_SDK_VERSION,
|
SIZE, SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, MAX_SDK_VERSION,
|
||||||
PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
||||||
IS_COMPATIBLE, REPO_VERSION, REPO_ADDRESS, INCOMPATIBLE_REASONS,
|
IS_COMPATIBLE, REPO_VERSION, REPO_ADDRESS, INCOMPATIBLE_REASONS,
|
||||||
};
|
};
|
||||||
@ -279,7 +279,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Uri getContentUri(Apk apk) {
|
public static Uri getContentUri(Apk apk) {
|
||||||
return getContentUri(apk.packageName, apk.vercode);
|
return getContentUri(apk.packageName, apk.versionCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Uri getContentUri(String packageName, int versionCode) {
|
public static Uri getContentUri(String packageName, int versionCode) {
|
||||||
@ -328,8 +328,8 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
builder.append(',');
|
builder.append(',');
|
||||||
}
|
}
|
||||||
final Apk a = apks.get(i);
|
final Apk apk = apks.get(i);
|
||||||
builder.append(a.packageName).append(':').append(a.vercode);
|
builder.append(apk.packageName).append(':').append(apk.versionCode);
|
||||||
}
|
}
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
@ -433,9 +433,9 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
for (int i = 0; i < apkDetails.length; i++) {
|
for (int i = 0; i < apkDetails.length; i++) {
|
||||||
String[] parts = apkDetails[i].split(":");
|
String[] parts = apkDetails[i].split(":");
|
||||||
String packageName = parts[0];
|
String packageName = parts[0];
|
||||||
String verCode = parts[1];
|
String versionCode = parts[1];
|
||||||
args[i * 2] = packageName;
|
args[i * 2] = packageName;
|
||||||
args[i * 2 + 1] = verCode;
|
args[i * 2 + 1] = versionCode;
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
sb.append(" OR ");
|
sb.append(" OR ");
|
||||||
}
|
}
|
||||||
|
@ -59,17 +59,18 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
|
|
||||||
public String flattrID;
|
public String flattrID;
|
||||||
|
|
||||||
public String upstreamVersion;
|
public String upstreamVersionName;
|
||||||
public int upstreamVercode;
|
public int upstreamVersionCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unlike other public fields, this is only accessible via a getter, to
|
* Unlike other public fields, this is only accessible via a getter, to
|
||||||
* emphasise that setting it wont do anything. In order to change this,
|
* emphasise that setting it wont do anything. In order to change this,
|
||||||
* you need to change suggestedVercode to an apk which is in the apk table.
|
* you need to change suggestedVersionCode to an apk which is in the
|
||||||
|
* apk table.
|
||||||
*/
|
*/
|
||||||
private String suggestedVersion;
|
private String suggestedVersionName;
|
||||||
|
|
||||||
public int suggestedVercode;
|
public int suggestedVersionCode;
|
||||||
|
|
||||||
public Date added;
|
public Date added;
|
||||||
public Date lastUpdated;
|
public Date lastUpdated;
|
||||||
@ -172,17 +173,17 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
case AppProvider.DataColumns.FLATTR_ID:
|
case AppProvider.DataColumns.FLATTR_ID:
|
||||||
flattrID = cursor.getString(i);
|
flattrID = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case AppProvider.DataColumns.SuggestedApk.VERSION:
|
case AppProvider.DataColumns.SuggestedApk.VERSION_NAME:
|
||||||
suggestedVersion = cursor.getString(i);
|
suggestedVersionName = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case AppProvider.DataColumns.SUGGESTED_VERSION_CODE:
|
case AppProvider.DataColumns.SUGGESTED_VERSION_CODE:
|
||||||
suggestedVercode = cursor.getInt(i);
|
suggestedVersionCode = cursor.getInt(i);
|
||||||
break;
|
break;
|
||||||
case AppProvider.DataColumns.UPSTREAM_VERSION_CODE:
|
case AppProvider.DataColumns.UPSTREAM_VERSION_CODE:
|
||||||
upstreamVercode = cursor.getInt(i);
|
upstreamVersionCode = cursor.getInt(i);
|
||||||
break;
|
break;
|
||||||
case AppProvider.DataColumns.UPSTREAM_VERSION:
|
case AppProvider.DataColumns.UPSTREAM_VERSION_NAME:
|
||||||
upstreamVersion = cursor.getString(i);
|
upstreamVersionName = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case AppProvider.DataColumns.ADDED:
|
case AppProvider.DataColumns.ADDED:
|
||||||
added = Utils.parseDate(cursor.getString(i), null);
|
added = Utils.parseDate(cursor.getString(i), null);
|
||||||
@ -275,8 +276,8 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
|
|
||||||
final SanitizedFile apkFile = SanitizedFile.knownSanitized(appInfo.publicSourceDir);
|
final SanitizedFile apkFile = SanitizedFile.knownSanitized(appInfo.publicSourceDir);
|
||||||
final Apk apk = new Apk();
|
final Apk apk = new Apk();
|
||||||
apk.version = packageInfo.versionName;
|
apk.versionName = packageInfo.versionName;
|
||||||
apk.vercode = packageInfo.versionCode;
|
apk.versionCode = packageInfo.versionCode;
|
||||||
apk.hashType = "sha256";
|
apk.hashType = "sha256";
|
||||||
apk.hash = Utils.getBinaryHash(apkFile, apk.hashType);
|
apk.hash = Utils.getBinaryHash(apkFile, apk.hashType);
|
||||||
apk.added = this.added;
|
apk.added = this.added;
|
||||||
@ -285,7 +286,7 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
apk.packageName = this.packageName;
|
apk.packageName = this.packageName;
|
||||||
apk.installedFile = apkFile;
|
apk.installedFile = apkFile;
|
||||||
apk.permissions = Utils.CommaSeparatedList.make(packageInfo.requestedPermissions);
|
apk.permissions = Utils.CommaSeparatedList.make(packageInfo.requestedPermissions);
|
||||||
apk.apkName = apk.packageName + "_" + apk.vercode + ".apk";
|
apk.apkName = apk.packageName + "_" + apk.versionCode + ".apk";
|
||||||
|
|
||||||
final FeatureInfo[] features = packageInfo.reqFeatures;
|
final FeatureInfo[] features = packageInfo.reqFeatures;
|
||||||
if (features != null && features.length > 0) {
|
if (features != null && features.length > 0) {
|
||||||
@ -402,9 +403,9 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
values.put(AppProvider.DataColumns.FLATTR_ID, flattrID);
|
values.put(AppProvider.DataColumns.FLATTR_ID, flattrID);
|
||||||
values.put(AppProvider.DataColumns.ADDED, Utils.formatDate(added, ""));
|
values.put(AppProvider.DataColumns.ADDED, Utils.formatDate(added, ""));
|
||||||
values.put(AppProvider.DataColumns.LAST_UPDATED, Utils.formatDate(lastUpdated, ""));
|
values.put(AppProvider.DataColumns.LAST_UPDATED, Utils.formatDate(lastUpdated, ""));
|
||||||
values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVercode);
|
values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVersionCode);
|
||||||
values.put(AppProvider.DataColumns.UPSTREAM_VERSION, upstreamVersion);
|
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_NAME, upstreamVersionName);
|
||||||
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_CODE, upstreamVercode);
|
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_CODE, upstreamVersionCode);
|
||||||
values.put(AppProvider.DataColumns.CATEGORIES, Utils.CommaSeparatedList.str(categories));
|
values.put(AppProvider.DataColumns.CATEGORIES, Utils.CommaSeparatedList.str(categories));
|
||||||
values.put(AppProvider.DataColumns.ANTI_FEATURES, Utils.CommaSeparatedList.str(antiFeatures));
|
values.put(AppProvider.DataColumns.ANTI_FEATURES, Utils.CommaSeparatedList.str(antiFeatures));
|
||||||
values.put(AppProvider.DataColumns.REQUIREMENTS, Utils.CommaSeparatedList.str(requirements));
|
values.put(AppProvider.DataColumns.REQUIREMENTS, Utils.CommaSeparatedList.str(requirements));
|
||||||
@ -424,8 +425,8 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
*/
|
*/
|
||||||
public boolean hasUpdates() {
|
public boolean hasUpdates() {
|
||||||
boolean updates = false;
|
boolean updates = false;
|
||||||
if (suggestedVercode > 0) {
|
if (suggestedVersionCode > 0) {
|
||||||
updates = installedVersionCode > 0 && installedVersionCode < suggestedVercode;
|
updates = installedVersionCode > 0 && installedVersionCode < suggestedVersionCode;
|
||||||
}
|
}
|
||||||
return updates;
|
return updates;
|
||||||
}
|
}
|
||||||
@ -434,7 +435,7 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
// to be notified about them
|
// to be notified about them
|
||||||
public boolean canAndWantToUpdate() {
|
public boolean canAndWantToUpdate() {
|
||||||
boolean canUpdate = hasUpdates();
|
boolean canUpdate = hasUpdates();
|
||||||
boolean wantsUpdate = !ignoreAllUpdates && ignoreThisUpdate < suggestedVercode;
|
boolean wantsUpdate = !ignoreAllUpdates && ignoreThisUpdate < suggestedVersionCode;
|
||||||
return canUpdate && wantsUpdate && !isFiltered();
|
return canUpdate && wantsUpdate && !isFiltered();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,7 +445,7 @@ public class App extends ValueObject implements Comparable<App> {
|
|||||||
return new AppFilter().filter(this);
|
return new AppFilter().filter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSuggestedVersion() {
|
public String getSuggestedVersionName() {
|
||||||
return suggestedVersion;
|
return suggestedVersionName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ public class AppProvider extends FDroidProvider {
|
|||||||
String LITECOIN_ADDR = "litecoinAddr";
|
String LITECOIN_ADDR = "litecoinAddr";
|
||||||
String FLATTR_ID = "flattrID";
|
String FLATTR_ID = "flattrID";
|
||||||
String SUGGESTED_VERSION_CODE = "suggestedVercode";
|
String SUGGESTED_VERSION_CODE = "suggestedVercode";
|
||||||
String UPSTREAM_VERSION = "upstreamVersion";
|
String UPSTREAM_VERSION_NAME = "upstreamVersion";
|
||||||
String UPSTREAM_VERSION_CODE = "upstreamVercode";
|
String UPSTREAM_VERSION_CODE = "upstreamVercode";
|
||||||
String ADDED = "added";
|
String ADDED = "added";
|
||||||
String LAST_UPDATED = "lastUpdated";
|
String LAST_UPDATED = "lastUpdated";
|
||||||
@ -204,7 +204,7 @@ public class AppProvider extends FDroidProvider {
|
|||||||
String ICON_URL_LARGE = "iconUrlLarge";
|
String ICON_URL_LARGE = "iconUrlLarge";
|
||||||
|
|
||||||
interface SuggestedApk {
|
interface SuggestedApk {
|
||||||
String VERSION = "suggestedApkVersion";
|
String VERSION_NAME = "suggestedApkVersion";
|
||||||
}
|
}
|
||||||
|
|
||||||
interface InstalledApp {
|
interface InstalledApp {
|
||||||
@ -217,10 +217,10 @@ public class AppProvider extends FDroidProvider {
|
|||||||
_ID, IS_COMPATIBLE, PACKAGE_NAME, NAME, SUMMARY, ICON, DESCRIPTION,
|
_ID, IS_COMPATIBLE, PACKAGE_NAME, NAME, SUMMARY, ICON, DESCRIPTION,
|
||||||
LICENSE, AUTHOR, EMAIL, WEB_URL, TRACKER_URL, SOURCE_URL,
|
LICENSE, AUTHOR, EMAIL, WEB_URL, TRACKER_URL, SOURCE_URL,
|
||||||
CHANGELOG_URL, DONATE_URL, BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID,
|
CHANGELOG_URL, DONATE_URL, BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID,
|
||||||
UPSTREAM_VERSION, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
|
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
|
||||||
CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES,
|
CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES,
|
||||||
IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE,
|
IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE,
|
||||||
SUGGESTED_VERSION_CODE, SuggestedApk.VERSION,
|
SUGGESTED_VERSION_CODE, SuggestedApk.VERSION_NAME,
|
||||||
InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME,
|
InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME,
|
||||||
InstalledApp.SIGNATURE,
|
InstalledApp.SIGNATURE,
|
||||||
};
|
};
|
||||||
@ -348,7 +348,7 @@ public class AppProvider extends FDroidProvider {
|
|||||||
@Override
|
@Override
|
||||||
public void addField(String field) {
|
public void addField(String field) {
|
||||||
switch (field) {
|
switch (field) {
|
||||||
case DataColumns.SuggestedApk.VERSION:
|
case DataColumns.SuggestedApk.VERSION_NAME:
|
||||||
addSuggestedApkVersionField();
|
addSuggestedApkVersionField();
|
||||||
break;
|
break;
|
||||||
case DataColumns.InstalledApp.VERSION_NAME:
|
case DataColumns.InstalledApp.VERSION_NAME:
|
||||||
@ -379,8 +379,8 @@ public class AppProvider extends FDroidProvider {
|
|||||||
|
|
||||||
private void addSuggestedApkVersionField() {
|
private void addSuggestedApkVersionField() {
|
||||||
addSuggestedApkField(
|
addSuggestedApkField(
|
||||||
ApkProvider.DataColumns.VERSION,
|
ApkProvider.DataColumns.VERSION_NAME,
|
||||||
DataColumns.SuggestedApk.VERSION);
|
DataColumns.SuggestedApk.VERSION_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSuggestedApkField(String fieldName, String alias) {
|
private void addSuggestedApkField(String fieldName, String alias) {
|
||||||
|
@ -252,7 +252,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
values.put(RepoProvider.DataColumns.ADDRESS, address);
|
values.put(RepoProvider.DataColumns.ADDRESS, address);
|
||||||
values.put(RepoProvider.DataColumns.NAME, name);
|
values.put(RepoProvider.DataColumns.NAME, name);
|
||||||
values.put(RepoProvider.DataColumns.DESCRIPTION, description);
|
values.put(RepoProvider.DataColumns.DESCRIPTION, description);
|
||||||
values.put(RepoProvider.DataColumns.PUBLIC_KEY, pubKey);
|
values.put(RepoProvider.DataColumns.SIGNING_CERT, pubKey);
|
||||||
values.put(RepoProvider.DataColumns.FINGERPRINT, Utils.calcFingerprint(pubKey));
|
values.put(RepoProvider.DataColumns.FINGERPRINT, Utils.calcFingerprint(pubKey));
|
||||||
values.put(RepoProvider.DataColumns.MAX_AGE, 0);
|
values.put(RepoProvider.DataColumns.MAX_AGE, 0);
|
||||||
values.put(RepoProvider.DataColumns.VERSION, version);
|
values.put(RepoProvider.DataColumns.VERSION, version);
|
||||||
@ -311,7 +311,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
Repo repo = new Repo();
|
Repo repo = new Repo();
|
||||||
repo.address = cursor.getString(0);
|
repo.address = cursor.getString(0);
|
||||||
repo.inuse = cursor.getInt(1) == 1;
|
repo.inuse = cursor.getInt(1) == 1;
|
||||||
repo.pubkey = cursor.getString(2);
|
repo.signingCertificate = cursor.getString(2);
|
||||||
oldrepos.add(repo);
|
oldrepos.add(repo);
|
||||||
cursor.moveToNext();
|
cursor.moveToNext();
|
||||||
}
|
}
|
||||||
@ -325,7 +325,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
values.put("address", repo.address);
|
values.put("address", repo.address);
|
||||||
values.put("inuse", repo.inuse);
|
values.put("inuse", repo.inuse);
|
||||||
values.put("priority", 10);
|
values.put("priority", 10);
|
||||||
values.put("pubkey", repo.pubkey);
|
values.put("pubkey", repo.signingCertificate);
|
||||||
values.put("lastetag", (String) null);
|
values.put("lastetag", (String) null);
|
||||||
db.insert(TABLE_REPO, null, values);
|
db.insert(TABLE_REPO, null, values);
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
while (!cursor.isAfterLast()) {
|
while (!cursor.isAfterLast()) {
|
||||||
Repo repo = new Repo();
|
Repo repo = new Repo();
|
||||||
repo.address = cursor.getString(0);
|
repo.address = cursor.getString(0);
|
||||||
repo.pubkey = cursor.getString(1);
|
repo.signingCertificate = cursor.getString(1);
|
||||||
oldrepos.add(repo);
|
oldrepos.add(repo);
|
||||||
cursor.moveToNext();
|
cursor.moveToNext();
|
||||||
}
|
}
|
||||||
@ -397,7 +397,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
for (final Repo repo : oldrepos) {
|
for (final Repo repo : oldrepos) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put("fingerprint", Utils.calcFingerprint(repo.pubkey));
|
values.put("fingerprint", Utils.calcFingerprint(repo.signingCertificate));
|
||||||
db.update(TABLE_REPO, values, "address = ?", new String[] {repo.address});
|
db.update(TABLE_REPO, values, "address = ?", new String[] {repo.address});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ public class Repo extends ValueObject {
|
|||||||
public boolean inuse;
|
public boolean inuse;
|
||||||
public int priority;
|
public int priority;
|
||||||
/** The signing certificate, {@code null} for a newly added repo */
|
/** The signing certificate, {@code null} for a newly added repo */
|
||||||
public String pubkey;
|
public String signingCertificate;
|
||||||
/**
|
/**
|
||||||
* The SHA1 fingerprint of {@link #pubkey}, set to {@code null} when a
|
* The SHA1 fingerprint of {@link #pubkey}, set to {@code null} when a
|
||||||
* newly added repo did not include fingerprint. It should never be an
|
* newly added repo did not include fingerprint. It should never be an
|
||||||
@ -79,8 +79,8 @@ public class Repo extends ValueObject {
|
|||||||
case RepoProvider.DataColumns.NAME:
|
case RepoProvider.DataColumns.NAME:
|
||||||
name = cursor.getString(i);
|
name = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case RepoProvider.DataColumns.PUBLIC_KEY:
|
case RepoProvider.DataColumns.SIGNING_CERT:
|
||||||
pubkey = cursor.getString(i);
|
signingCertificate = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case RepoProvider.DataColumns.PRIORITY:
|
case RepoProvider.DataColumns.PRIORITY:
|
||||||
priority = cursor.getInt(i);
|
priority = cursor.getInt(i);
|
||||||
@ -112,13 +112,13 @@ public class Repo extends ValueObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSigned() {
|
public boolean isSigned() {
|
||||||
return !TextUtils.isEmpty(this.pubkey);
|
return !TextUtils.isEmpty(this.signingCertificate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this happens when a repo is configed with a fingerprint, but the client
|
// this happens when a repo is configed with a fingerprint, but the client
|
||||||
// has not connected to it yet to download its pubkey
|
// has not connected to it yet to download its signing certificate
|
||||||
public boolean isSignedButUnverified() {
|
public boolean isSignedButUnverified() {
|
||||||
return TextUtils.isEmpty(this.pubkey) && !TextUtils.isEmpty(this.fingerprint);
|
return TextUtils.isEmpty(this.signingCertificate) && !TextUtils.isEmpty(this.fingerprint);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasBeenUpdated() {
|
public boolean hasBeenUpdated() {
|
||||||
@ -191,8 +191,8 @@ public class Repo extends ValueObject {
|
|||||||
name = values.getAsString(RepoProvider.DataColumns.NAME);
|
name = values.getAsString(RepoProvider.DataColumns.NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (values.containsKey(RepoProvider.DataColumns.PUBLIC_KEY)) {
|
if (values.containsKey(RepoProvider.DataColumns.SIGNING_CERT)) {
|
||||||
pubkey = values.getAsString(RepoProvider.DataColumns.PUBLIC_KEY);
|
signingCertificate = values.getAsString(RepoProvider.DataColumns.SIGNING_CERT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (values.containsKey(RepoProvider.DataColumns.PRIORITY)) {
|
if (values.containsKey(RepoProvider.DataColumns.PRIORITY)) {
|
||||||
|
@ -169,7 +169,7 @@ public class RepoPersister {
|
|||||||
for (Apk apk : packages) {
|
for (Apk apk : packages) {
|
||||||
boolean exists = false;
|
boolean exists = false;
|
||||||
for (Apk existing : existingApks) {
|
for (Apk existing : existingApks) {
|
||||||
if (existing.packageName.equals(apk.packageName) && existing.vercode == apk.vercode) {
|
if (existing.packageName.equals(apk.packageName) && existing.versionCode == apk.versionCode) {
|
||||||
exists = true;
|
exists = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -256,7 +256,7 @@ public class RepoPersister {
|
|||||||
|
|
||||||
if (packages.containsKey(existingApk.packageName)) {
|
if (packages.containsKey(existingApk.packageName)) {
|
||||||
for (Apk newApk : packages.get(existingApk.packageName)) {
|
for (Apk newApk : packages.get(existingApk.packageName)) {
|
||||||
if (newApk.vercode == existingApk.vercode) {
|
if (newApk.versionCode == existingApk.versionCode) {
|
||||||
shouldStay = true;
|
shouldStay = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -129,8 +129,8 @@ 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.PUBLIC_KEY)) {
|
if (values.containsKey(DataColumns.SIGNING_CERT)) {
|
||||||
String publicKey = values.getAsString(DataColumns.PUBLIC_KEY);
|
String publicKey = values.getAsString(DataColumns.SIGNING_CERT);
|
||||||
String calcedFingerprint = Utils.calcFingerprint(publicKey);
|
String calcedFingerprint = Utils.calcFingerprint(publicKey);
|
||||||
if (values.containsKey(DataColumns.FINGERPRINT)) {
|
if (values.containsKey(DataColumns.FINGERPRINT)) {
|
||||||
String fingerprint = values.getAsString(DataColumns.FINGERPRINT);
|
String fingerprint = values.getAsString(DataColumns.FINGERPRINT);
|
||||||
@ -216,7 +216,7 @@ public class RepoProvider extends FDroidProvider {
|
|||||||
String DESCRIPTION = "description";
|
String DESCRIPTION = "description";
|
||||||
String IN_USE = "inuse";
|
String IN_USE = "inuse";
|
||||||
String PRIORITY = "priority";
|
String PRIORITY = "priority";
|
||||||
String PUBLIC_KEY = "pubkey";
|
String SIGNING_CERT = "pubkey";
|
||||||
String FINGERPRINT = "fingerprint";
|
String FINGERPRINT = "fingerprint";
|
||||||
String MAX_AGE = "maxage";
|
String MAX_AGE = "maxage";
|
||||||
String LAST_ETAG = "lastetag";
|
String LAST_ETAG = "lastetag";
|
||||||
@ -227,7 +227,7 @@ public class RepoProvider extends FDroidProvider {
|
|||||||
String PASSWORD = "password";
|
String PASSWORD = "password";
|
||||||
|
|
||||||
String[] ALL = {
|
String[] ALL = {
|
||||||
_ID, ADDRESS, NAME, DESCRIPTION, IN_USE, PRIORITY, PUBLIC_KEY,
|
_ID, ADDRESS, NAME, DESCRIPTION, IN_USE, PRIORITY, SIGNING_CERT,
|
||||||
FINGERPRINT, MAX_AGE, LAST_UPDATED, LAST_ETAG, VERSION, IS_SWAP,
|
FINGERPRINT, MAX_AGE, LAST_UPDATED, LAST_ETAG, VERSION, IS_SWAP,
|
||||||
USERNAME, PASSWORD,
|
USERNAME, PASSWORD,
|
||||||
};
|
};
|
||||||
|
@ -49,7 +49,7 @@ public class TempApkProvider extends ApkProvider {
|
|||||||
return getContentUri()
|
return getContentUri()
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.appendPath(PATH_APK)
|
.appendPath(PATH_APK)
|
||||||
.appendPath(Integer.toString(apk.vercode))
|
.appendPath(Integer.toString(apk.versionCode))
|
||||||
.appendPath(apk.packageName)
|
.appendPath(apk.packageName)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
@ -293,7 +293,7 @@ public final class LocalRepoManager {
|
|||||||
if (app.installedApk != null) {
|
if (app.installedApk != null) {
|
||||||
try {
|
try {
|
||||||
appInfo = pm.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA);
|
appInfo = pm.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA);
|
||||||
copyIconToRepo(appInfo.loadIcon(pm), app.packageName, app.installedApk.vercode);
|
copyIconToRepo(appInfo.loadIcon(pm), app.packageName, app.installedApk.versionCode);
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
Log.e(TAG, "Error getting app icon", e);
|
Log.e(TAG, "Error getting app icon", e);
|
||||||
}
|
}
|
||||||
@ -438,8 +438,8 @@ public final class LocalRepoManager {
|
|||||||
tag("web", "web");
|
tag("web", "web");
|
||||||
tag("source", "source");
|
tag("source", "source");
|
||||||
tag("tracker", "tracker");
|
tag("tracker", "tracker");
|
||||||
tag("marketversion", app.installedApk.version);
|
tag("marketversion", app.installedApk.versionName);
|
||||||
tag("marketvercode", app.installedApk.vercode);
|
tag("marketvercode", app.installedApk.versionCode);
|
||||||
|
|
||||||
tagPackage(app);
|
tagPackage(app);
|
||||||
|
|
||||||
@ -449,8 +449,8 @@ public final class LocalRepoManager {
|
|||||||
private void tagPackage(App app) throws IOException {
|
private void tagPackage(App app) throws IOException {
|
||||||
serializer.startTag("", "package");
|
serializer.startTag("", "package");
|
||||||
|
|
||||||
tag("version", app.installedApk.version);
|
tag("version", app.installedApk.versionName);
|
||||||
tag("versioncode", app.installedApk.vercode);
|
tag("versioncode", app.installedApk.versionCode);
|
||||||
tag("apkname", app.installedApk.apkName);
|
tag("apkname", app.installedApk.apkName);
|
||||||
tagHash(app);
|
tagHash(app);
|
||||||
tag("sig", app.installedApk.sig.toLowerCase(Locale.US));
|
tag("sig", app.installedApk.sig.toLowerCase(Locale.US));
|
||||||
|
@ -113,19 +113,19 @@ public abstract class AppListAdapter extends CursorAdapter {
|
|||||||
|
|
||||||
private String getVersionInfo(App app) {
|
private String getVersionInfo(App app) {
|
||||||
|
|
||||||
if (app.suggestedVercode <= 0) {
|
if (app.suggestedVersionCode <= 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!app.isInstalled()) {
|
if (!app.isInstalled()) {
|
||||||
return app.getSuggestedVersion();
|
return app.getSuggestedVersionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
final String installedVersionString = app.installedVersionName;
|
final String installedVersionString = app.installedVersionName;
|
||||||
|
|
||||||
if (app.canAndWantToUpdate() && showStatusUpdate()) {
|
if (app.canAndWantToUpdate() && showStatusUpdate()) {
|
||||||
return String.format(upgradeFromTo,
|
return String.format(upgradeFromTo,
|
||||||
installedVersionString, app.getSuggestedVersion());
|
installedVersionString, app.getSuggestedVersionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (app.installedVersionCode > 0 && showStatusInstalled()) {
|
if (app.installedVersionCode > 0 && showStatusInstalled()) {
|
||||||
|
@ -711,7 +711,7 @@ public class ManageReposActivity extends ActionBarActivity {
|
|||||||
final String[] projection = {
|
final String[] projection = {
|
||||||
RepoProvider.DataColumns._ID,
|
RepoProvider.DataColumns._ID,
|
||||||
RepoProvider.DataColumns.NAME,
|
RepoProvider.DataColumns.NAME,
|
||||||
RepoProvider.DataColumns.PUBLIC_KEY,
|
RepoProvider.DataColumns.SIGNING_CERT,
|
||||||
RepoProvider.DataColumns.FINGERPRINT,
|
RepoProvider.DataColumns.FINGERPRINT,
|
||||||
RepoProvider.DataColumns.IN_USE,
|
RepoProvider.DataColumns.IN_USE,
|
||||||
};
|
};
|
||||||
|
@ -264,7 +264,7 @@ public class RepoDetailsActivity extends ActionBarActivity {
|
|||||||
String repoFingerprint;
|
String repoFingerprint;
|
||||||
|
|
||||||
// TODO show the current state of the signature check, not just whether there is a key or not
|
// TODO show the current state of the signature check, not just whether there is a key or not
|
||||||
if (TextUtils.isEmpty(repo.fingerprint) && TextUtils.isEmpty(repo.pubkey)) {
|
if (TextUtils.isEmpty(repo.fingerprint) && TextUtils.isEmpty(repo.signingCertificate)) {
|
||||||
repoFingerprint = getResources().getString(R.string.unsigned);
|
repoFingerprint = getResources().getString(R.string.unsigned);
|
||||||
repoFingerprintView.setTextColor(getResources().getColor(R.color.unsigned));
|
repoFingerprintView.setTextColor(getResources().getColor(R.color.unsigned));
|
||||||
repoFingerprintDescView.setVisibility(View.VISIBLE);
|
repoFingerprintDescView.setVisibility(View.VISIBLE);
|
||||||
|
@ -49,7 +49,7 @@ public abstract class AppListFragment extends ListFragment implements
|
|||||||
AppProvider.DataColumns.ICON_URL,
|
AppProvider.DataColumns.ICON_URL,
|
||||||
AppProvider.DataColumns.InstalledApp.VERSION_CODE,
|
AppProvider.DataColumns.InstalledApp.VERSION_CODE,
|
||||||
AppProvider.DataColumns.InstalledApp.VERSION_NAME,
|
AppProvider.DataColumns.InstalledApp.VERSION_NAME,
|
||||||
AppProvider.DataColumns.SuggestedApk.VERSION,
|
AppProvider.DataColumns.SuggestedApk.VERSION_NAME,
|
||||||
AppProvider.DataColumns.SUGGESTED_VERSION_CODE,
|
AppProvider.DataColumns.SUGGESTED_VERSION_CODE,
|
||||||
AppProvider.DataColumns.IGNORE_ALLUPDATES,
|
AppProvider.DataColumns.IGNORE_ALLUPDATES,
|
||||||
AppProvider.DataColumns.IGNORE_THISUPDATE,
|
AppProvider.DataColumns.IGNORE_THISUPDATE,
|
||||||
|
@ -336,7 +336,7 @@ public class SwapAppsView extends ListView implements
|
|||||||
*/
|
*/
|
||||||
private Apk getApkToInstall() {
|
private Apk getApkToInstall() {
|
||||||
if (apkToInstall == null) {
|
if (apkToInstall == null) {
|
||||||
apkToInstall = ApkProvider.Helper.find(getActivity(), app.packageName, app.suggestedVercode);
|
apkToInstall = ApkProvider.Helper.find(getActivity(), app.packageName, app.suggestedVersionCode);
|
||||||
}
|
}
|
||||||
return apkToInstall;
|
return apkToInstall;
|
||||||
}
|
}
|
||||||
|
@ -782,7 +782,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void install(@NonNull final App app) {
|
public void install(@NonNull final App app) {
|
||||||
final Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVercode);
|
final Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode);
|
||||||
String urlString = Utils.getApkUrl(apk.repoAddress, apk);
|
String urlString = Utils.getApkUrl(apk.repoAddress, apk);
|
||||||
downloadCompleteReceiver = new BroadcastReceiver() {
|
downloadCompleteReceiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user