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();
|
||||
|
||||
assertEquals("com.example", apk.packageName);
|
||||
assertEquals(10, apk.vercode);
|
||||
assertEquals(10, apk.versionCode);
|
||||
|
||||
assertNull(apk.features);
|
||||
assertNull(apk.added);
|
||||
@ -147,7 +147,7 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
||||
updatedCursor.close();
|
||||
|
||||
assertEquals("com.example", updatedApk.packageName);
|
||||
assertEquals(10, updatedApk.vercode);
|
||||
assertEquals(10, updatedApk.versionCode);
|
||||
|
||||
assertNotNull(updatedApk.features);
|
||||
assertNotNull(updatedApk.added);
|
||||
@ -170,7 +170,7 @@ public class ApkProviderHelperTest extends BaseApkProviderTest {
|
||||
}
|
||||
|
||||
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_TYPE, "a hash type");
|
||||
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,
|
||||
// so we expect to find each of the ones we inserted above...
|
||||
assertEquals("com.example", apk.packageName);
|
||||
assertEquals(11, apk.vercode);
|
||||
assertEquals("v1.1", apk.version);
|
||||
assertEquals(11, apk.versionCode);
|
||||
assertEquals("v1.1", apk.versionName);
|
||||
assertEquals("xxxxyyyy", apk.hash);
|
||||
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...
|
||||
assertNull(apkLessFields.hashType);
|
||||
assertNull(apkLessFields.version);
|
||||
assertEquals(0, apkLessFields.vercode);
|
||||
assertNull(apkLessFields.versionName);
|
||||
assertEquals(0, apkLessFields.versionCode);
|
||||
|
||||
Apk notFound = ApkProvider.Helper.find(getMockContext(), "com.doesnt.exist", 1000);
|
||||
assertNull(notFound);
|
||||
|
@ -233,7 +233,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
||||
Apk apk = new MockApk("org.fdroid.fdroid", 13);
|
||||
|
||||
// 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());
|
||||
cursor = queryAllApks();
|
||||
assertNotNull(cursor);
|
||||
@ -257,7 +257,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
||||
Apk toCheck = new Apk(cursor);
|
||||
cursor.close();
|
||||
assertEquals("org.fdroid.fdroid", toCheck.packageName);
|
||||
assertEquals(13, toCheck.vercode);
|
||||
assertEquals(13, toCheck.versionCode);
|
||||
}
|
||||
|
||||
public void testCount() {
|
||||
@ -291,7 +291,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
||||
RepoProvider.DataColumns.ADDRESS,
|
||||
RepoProvider.DataColumns.FINGERPRINT,
|
||||
RepoProvider.DataColumns.NAME,
|
||||
RepoProvider.DataColumns.PUBLIC_KEY,
|
||||
RepoProvider.DataColumns.SIGNING_CERT,
|
||||
};
|
||||
|
||||
for (String field : repoFields) {
|
||||
@ -330,7 +330,7 @@ public class ApkProviderTest extends BaseApkProviderTest {
|
||||
// But this should have saved correctly...
|
||||
assertEquals("Some features", apk.features.toString());
|
||||
assertEquals("com.example.com", apk.packageName);
|
||||
assertEquals(1, apk.vercode);
|
||||
assertEquals(1, apk.versionCode);
|
||||
assertEquals(10, apk.repo);
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ abstract class BaseApkProviderTest extends FDroidProviderTest<ApkProvider> {
|
||||
protected void assertContains(List<Apk> apks, Apk apk) {
|
||||
boolean found = false;
|
||||
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;
|
||||
break;
|
||||
}
|
||||
|
@ -289,7 +289,7 @@ public class MultiRepoUpdaterTest extends InstrumentationTestCase {
|
||||
for (int versionCode : versionCodes) {
|
||||
boolean found = false;
|
||||
for (Apk apk : apksToCheck) {
|
||||
if (apk.vercode == versionCode && apk.packageName.equals(appId)) {
|
||||
if (apk.versionCode == versionCode && apk.packageName.equals(appId)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
@ -405,12 +405,12 @@ public class MultiRepoUpdaterTest extends InstrumentationTestCase {
|
||||
|
||||
private RepoUpdater createUpdater(String name, Context context) {
|
||||
Repo repo = new Repo();
|
||||
repo.pubkey = PUB_KEY;
|
||||
repo.signingCertificate = PUB_KEY;
|
||||
repo.address = UUID.randomUUID().toString();
|
||||
repo.name = name;
|
||||
|
||||
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.NAME, repo.name);
|
||||
|
||||
|
@ -24,7 +24,7 @@ public class RepoUpdaterTest {
|
||||
private RepoUpdater repoUpdater;
|
||||
private File testFilesDir;
|
||||
|
||||
String simpleIndexPubkey = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b";
|
||||
String simpleIndexSigningCert = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b";
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@ -32,7 +32,7 @@ public class RepoUpdaterTest {
|
||||
context = instrumentation.getContext();
|
||||
testFilesDir = TestUtils.getWriteableDir(instrumentation);
|
||||
Repo repo = new Repo();
|
||||
repo.pubkey = this.simpleIndexPubkey;
|
||||
repo.signingCertificate = this.simpleIndexSigningCert;
|
||||
repoUpdater = new RepoUpdater(context, repo);
|
||||
}
|
||||
|
||||
|
@ -35,13 +35,13 @@ import static org.junit.Assert.fail;
|
||||
public class RepoXMLHandlerTest {
|
||||
private static final String TAG = "RepoXMLHandlerTest";
|
||||
|
||||
private static final String FAKE_PUBKEY = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
|
||||
private static final String FAKE_SIGNING_CERT = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345";
|
||||
|
||||
@Test
|
||||
public void testSimpleIndex() {
|
||||
Repo expectedRepo = new Repo();
|
||||
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.";
|
||||
RepoDetails actualDetails = getFromFile("simpleIndex.xml");
|
||||
handlerTestSuite(expectedRepo, actualDetails, 0, 0, -1, 12);
|
||||
@ -51,7 +51,7 @@ public class RepoXMLHandlerTest {
|
||||
public void testSmallRepo() {
|
||||
Repo expectedRepo = new Repo();
|
||||
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";
|
||||
RepoDetails actualDetails = getFromFile("smallRepo.xml");
|
||||
handlerTestSuite(expectedRepo, actualDetails, 12, 12, 14, -1);
|
||||
@ -75,7 +75,7 @@ public class RepoXMLHandlerTest {
|
||||
public void testMediumRepo() {
|
||||
Repo expectedRepo = new Repo();
|
||||
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.";
|
||||
RepoDetails actualDetails = getFromFile("mediumRepo.xml");
|
||||
handlerTestSuite(expectedRepo, actualDetails, 15, 36, 60, 12);
|
||||
@ -102,7 +102,7 @@ public class RepoXMLHandlerTest {
|
||||
public void testLargeRepo() {
|
||||
Repo expectedRepo = new Repo();
|
||||
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.";
|
||||
RepoDetails actualDetails = getFromFile("largeRepo.xml");
|
||||
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) {
|
||||
assertNotNull(actualDetails);
|
||||
assertFalse(TextUtils.isEmpty(actualDetails.signingCert));
|
||||
assertEquals(expectedRepo.pubkey.length(), actualDetails.signingCert.length());
|
||||
assertEquals(expectedRepo.pubkey, actualDetails.signingCert);
|
||||
assertFalse(FAKE_PUBKEY.equals(actualDetails.signingCert));
|
||||
assertEquals(expectedRepo.signingCertificate.length(), actualDetails.signingCert.length());
|
||||
assertEquals(expectedRepo.signingCertificate, actualDetails.signingCert);
|
||||
assertFalse(FAKE_SIGNING_CERT.equals(actualDetails.signingCert));
|
||||
|
||||
assertFalse(TextUtils.isEmpty(actualDetails.name));
|
||||
assertEquals(expectedRepo.name.length(), actualDetails.name.length());
|
||||
|
@ -132,7 +132,7 @@ public class TestUtils {
|
||||
|
||||
// Required fields (NOT NULL in the database).
|
||||
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.NAME, "Test Apk");
|
||||
values.put(ApkProvider.DataColumns.SIZE, 10000);
|
||||
|
@ -6,7 +6,7 @@ public class MockApk extends Apk {
|
||||
|
||||
public MockApk(String id, int versionCode) {
|
||||
this.packageName = id;
|
||||
this.vercode = versionCode;
|
||||
this.versionCode = versionCode;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ public class AppDetails extends AppCompatActivity {
|
||||
|
||||
private String getInstalledStatus(final Apk apk) {
|
||||
// Definitely not installed.
|
||||
if (apk.vercode != app.installedVersionCode) {
|
||||
if (apk.versionCode != app.installedVersionCode) {
|
||||
return getString(R.string.app_not_installed);
|
||||
}
|
||||
// Definitely installed this version.
|
||||
@ -210,8 +210,8 @@ public class AppDetails extends AppCompatActivity {
|
||||
}
|
||||
|
||||
holder.version.setText(getString(R.string.version)
|
||||
+ " " + apk.version
|
||||
+ (apk.vercode == app.suggestedVercode ? " ☆" : ""));
|
||||
+ " " + apk.versionName
|
||||
+ (apk.versionCode == app.suggestedVersionCode ? " ☆" : ""));
|
||||
|
||||
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)
|
||||
.setIcon(R.drawable.ic_do_not_disturb_white)
|
||||
.setCheckable(true)
|
||||
.setChecked(app.ignoreThisUpdate >= app.suggestedVercode);
|
||||
.setChecked(app.ignoreThisUpdate >= app.suggestedVersionCode);
|
||||
}
|
||||
|
||||
// Ignore on devices without Bluetooth
|
||||
@ -766,8 +766,8 @@ public class AppDetails extends AppCompatActivity {
|
||||
|
||||
case INSTALL:
|
||||
// Note that this handles updating as well as installing.
|
||||
if (app.suggestedVercode > 0) {
|
||||
final Apk apkToInstall = ApkProvider.Helper.find(this, app.packageName, app.suggestedVercode);
|
||||
if (app.suggestedVersionCode > 0) {
|
||||
final Apk apkToInstall = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode);
|
||||
install(apkToInstall);
|
||||
}
|
||||
return true;
|
||||
@ -782,10 +782,10 @@ public class AppDetails extends AppCompatActivity {
|
||||
return true;
|
||||
|
||||
case IGNORETHIS:
|
||||
if (app.ignoreThisUpdate >= app.suggestedVercode) {
|
||||
if (app.ignoreThisUpdate >= app.suggestedVersionCode) {
|
||||
app.ignoreThisUpdate = 0;
|
||||
} else {
|
||||
app.ignoreThisUpdate = app.suggestedVercode;
|
||||
app.ignoreThisUpdate = app.suggestedVersionCode;
|
||||
}
|
||||
item.setChecked(app.ignoreThisUpdate > 0);
|
||||
return true;
|
||||
@ -1246,7 +1246,7 @@ public class AppDetails extends AppCompatActivity {
|
||||
Apk curApk = null;
|
||||
for (int i = 0; i < appDetails.getApks().getCount(); i++) {
|
||||
final Apk apk = appDetails.getApks().getItem(i);
|
||||
if (apk.vercode == app.suggestedVercode) {
|
||||
if (apk.versionCode == app.suggestedVersionCode) {
|
||||
curApk = apk;
|
||||
break;
|
||||
}
|
||||
@ -1498,7 +1498,7 @@ public class AppDetails extends AppCompatActivity {
|
||||
if (appDetails.activeDownloadUrlString != null) {
|
||||
btMain.setText(R.string.downloading);
|
||||
btMain.setEnabled(false);
|
||||
} else if (!app.isInstalled() && app.suggestedVercode > 0 &&
|
||||
} else if (!app.isInstalled() && app.suggestedVersionCode > 0 &&
|
||||
appDetails.adapter.getCount() > 0) {
|
||||
// Check count > 0 due to incompatible apps resulting in an empty list.
|
||||
// If App isn't installed
|
||||
@ -1538,7 +1538,7 @@ public class AppDetails extends AppCompatActivity {
|
||||
}
|
||||
TextView currentVersion = (TextView) view.findViewById(R.id.current_version);
|
||||
if (!appDetails.getApks().isEmpty()) {
|
||||
currentVersion.setText(appDetails.getApks().getItem(0).version + " (" + app.license + ")");
|
||||
currentVersion.setText(appDetails.getApks().getItem(0).versionName + " (" + app.license + ")");
|
||||
} else {
|
||||
currentVersion.setVisibility(View.GONE);
|
||||
btMain.setVisibility(View.GONE);
|
||||
@ -1550,8 +1550,8 @@ public class AppDetails extends AppCompatActivity {
|
||||
public void onClick(View v) {
|
||||
App app = appDetails.getApp();
|
||||
AppDetails activity = (AppDetails) getActivity();
|
||||
if (updateWanted && app.suggestedVercode > 0) {
|
||||
Apk apkToInstall = ApkProvider.Helper.find(activity, app.packageName, app.suggestedVercode);
|
||||
if (updateWanted && app.suggestedVersionCode > 0) {
|
||||
Apk apkToInstall = ApkProvider.Helper.find(activity, app.packageName, app.suggestedVersionCode);
|
||||
activity.install(apkToInstall);
|
||||
return;
|
||||
}
|
||||
@ -1563,11 +1563,11 @@ public class AppDetails extends AppCompatActivity {
|
||||
} else {
|
||||
activity.removeApk(app.packageName);
|
||||
}
|
||||
} else if (app.suggestedVercode > 0) {
|
||||
} else if (app.suggestedVersionCode > 0) {
|
||||
// If not installed, install
|
||||
btMain.setEnabled(false);
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -1619,9 +1619,9 @@ public class AppDetails extends AppCompatActivity {
|
||||
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||
App app = appDetails.getApp();
|
||||
final Apk apk = appDetails.getApks().getItem(position - l.getHeaderViewsCount());
|
||||
if (app.installedVersionCode == apk.vercode) {
|
||||
if (app.installedVersionCode == apk.versionCode) {
|
||||
remove();
|
||||
} else if (app.installedVersionCode > apk.vercode) {
|
||||
} else if (app.installedVersionCode > apk.versionCode) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setMessage(R.string.installDowngrade);
|
||||
builder.setPositiveButton(R.string.yes,
|
||||
|
@ -102,7 +102,7 @@ public class CompatibilityChecker {
|
||||
}
|
||||
if (!features.contains(feat)) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -111,7 +111,7 @@ public class CompatibilityChecker {
|
||||
for (final String code : apk.nativecode) {
|
||||
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)
|
||||
+ " while your architectures are " + cpuAbisDesc);
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ public class RepoUpdater {
|
||||
private void assertSigningCertFromXmlCorrect() throws SigningException {
|
||||
|
||||
// no signing cert read from database, this is the first use
|
||||
if (repo.pubkey == null) {
|
||||
if (repo.signingCertificate == null) {
|
||||
verifyAndStoreTOFUCerts(signingCertFromIndexXml, signingCertFromJar);
|
||||
}
|
||||
verifyCerts(signingCertFromIndexXml, signingCertFromJar);
|
||||
@ -308,8 +308,8 @@ public class RepoUpdater {
|
||||
*/
|
||||
private void verifyAndStoreTOFUCerts(String certFromIndexXml, X509Certificate rawCertFromJar)
|
||||
throws SigningException {
|
||||
if (repo.pubkey != null) {
|
||||
return; // there is a repo.pubkey already, nothing to TOFU
|
||||
if (repo.signingCertificate != null) {
|
||||
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
|
||||
@ -328,7 +328,7 @@ public class RepoUpdater {
|
||||
Utils.debugLog(TAG, "Saving new signing certificate in the database for " + repo.address);
|
||||
ContentValues values = new ContentValues(2);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -348,16 +348,16 @@ public class RepoUpdater {
|
||||
// convert binary data to string version that is used in FDroid's database
|
||||
String certFromJar = Hasher.hex(rawCertFromJar);
|
||||
|
||||
// repo and repo.pubkey must be pre-loaded from the database
|
||||
if (TextUtils.isEmpty(repo.pubkey)
|
||||
// repo and repo.signingCertificate must be pre-loaded from the database
|
||||
if (TextUtils.isEmpty(repo.signingCertificate)
|
||||
|| TextUtils.isEmpty(certFromJar)
|
||||
|| TextUtils.isEmpty(certFromIndexXml)) {
|
||||
throw new SigningException(repo, "A empty repo or signing certificate is invalid!");
|
||||
}
|
||||
|
||||
// though its called repo.pubkey, its actually a X509 certificate
|
||||
if (repo.pubkey.equals(certFromJar)
|
||||
&& repo.pubkey.equals(certFromIndexXml)
|
||||
// though its called repo.signingCertificate, its actually a X509 certificate
|
||||
if (repo.signingCertificate.equals(certFromJar)
|
||||
&& repo.signingCertificate.equals(certFromIndexXml)
|
||||
&& certFromIndexXml.equals(certFromJar)) {
|
||||
return; // we have a match!
|
||||
}
|
||||
|
@ -96,10 +96,10 @@ public class RepoXMLHandler extends DefaultHandler {
|
||||
if (curapk != null) {
|
||||
switch (localName) {
|
||||
case "version":
|
||||
curapk.version = str;
|
||||
curapk.versionName = str;
|
||||
break;
|
||||
case "versioncode":
|
||||
curapk.vercode = Utils.parseInt(str, -1);
|
||||
curapk.versionCode = Utils.parseInt(str, -1);
|
||||
break;
|
||||
case "size":
|
||||
curapk.size = Utils.parseInt(str, 0);
|
||||
@ -204,10 +204,10 @@ public class RepoXMLHandler extends DefaultHandler {
|
||||
curapp.lastUpdated = Utils.parseDate(str, null);
|
||||
break;
|
||||
case "marketversion":
|
||||
curapp.upstreamVersion = str;
|
||||
curapp.upstreamVersionName = str;
|
||||
break;
|
||||
case "marketvercode":
|
||||
curapp.upstreamVercode = Utils.parseInt(str, -1);
|
||||
curapp.upstreamVersionCode = Utils.parseInt(str, -1);
|
||||
break;
|
||||
case "categories":
|
||||
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++) {
|
||||
App app = new App(hasUpdates);
|
||||
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) {
|
||||
@ -492,7 +492,7 @@ public class UpdateService extends IntentService implements ProgressListener {
|
||||
cursor.moveToFirst();
|
||||
for (int i = 0; i < cursor.getCount(); i++) {
|
||||
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,
|
||||
});
|
||||
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 String packageName;
|
||||
public String version;
|
||||
public int vercode;
|
||||
public String versionName;
|
||||
public int versionCode;
|
||||
public int size; // Size in bytes - 0 means we don't know!
|
||||
public long repo; // ID of the repo it comes from
|
||||
public String hash;
|
||||
@ -105,11 +105,11 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
||||
case ApkProvider.DataColumns.SOURCE_NAME:
|
||||
srcname = cursor.getString(i);
|
||||
break;
|
||||
case ApkProvider.DataColumns.VERSION:
|
||||
version = cursor.getString(i);
|
||||
case ApkProvider.DataColumns.VERSION_NAME:
|
||||
versionName = cursor.getString(i);
|
||||
break;
|
||||
case ApkProvider.DataColumns.VERSION_CODE:
|
||||
vercode = cursor.getInt(i);
|
||||
versionCode = cursor.getInt(i);
|
||||
break;
|
||||
case ApkProvider.DataColumns.REPO_VERSION:
|
||||
repoVersion = cursor.getInt(i);
|
||||
@ -123,14 +123,14 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return packageName + " (version " + vercode + ")";
|
||||
return packageName + " (version " + versionCode + ")";
|
||||
}
|
||||
|
||||
public ContentValues toContentValues() {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(ApkProvider.DataColumns.PACKAGE_NAME, packageName);
|
||||
values.put(ApkProvider.DataColumns.VERSION, version);
|
||||
values.put(ApkProvider.DataColumns.VERSION_CODE, vercode);
|
||||
values.put(ApkProvider.DataColumns.VERSION_NAME, versionName);
|
||||
values.put(ApkProvider.DataColumns.VERSION_CODE, versionCode);
|
||||
values.put(ApkProvider.DataColumns.REPO_ID, repo);
|
||||
values.put(ApkProvider.DataColumns.HASH, hash);
|
||||
values.put(ApkProvider.DataColumns.HASH_TYPE, hashType);
|
||||
@ -153,9 +153,9 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
||||
@TargetApi(19)
|
||||
public int compareTo(Apk apk) {
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
|
||||
@ -195,7 +195,7 @@ public class ApkProvider extends FDroidProvider {
|
||||
String _COUNT_DISTINCT_ID = "countDistinct";
|
||||
|
||||
String PACKAGE_NAME = "id";
|
||||
String VERSION = "version";
|
||||
String VERSION_NAME = "version";
|
||||
String REPO_ID = "repo";
|
||||
String HASH = "hash";
|
||||
String VERSION_CODE = "vercode";
|
||||
@ -216,8 +216,8 @@ public class ApkProvider extends FDroidProvider {
|
||||
String REPO_ADDRESS = "repoAddress";
|
||||
|
||||
String[] ALL = {
|
||||
_ID, PACKAGE_NAME, VERSION, REPO_ID, HASH, VERSION_CODE, NAME, SIZE,
|
||||
SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, MAX_SDK_VERSION,
|
||||
_ID, PACKAGE_NAME, VERSION_NAME, REPO_ID, HASH, VERSION_CODE, NAME,
|
||||
SIZE, SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, MAX_SDK_VERSION,
|
||||
PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
||||
IS_COMPATIBLE, REPO_VERSION, REPO_ADDRESS, INCOMPATIBLE_REASONS,
|
||||
};
|
||||
@ -279,7 +279,7 @@ public class ApkProvider extends FDroidProvider {
|
||||
}
|
||||
|
||||
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) {
|
||||
@ -328,8 +328,8 @@ public class ApkProvider extends FDroidProvider {
|
||||
if (i != 0) {
|
||||
builder.append(',');
|
||||
}
|
||||
final Apk a = apks.get(i);
|
||||
builder.append(a.packageName).append(':').append(a.vercode);
|
||||
final Apk apk = apks.get(i);
|
||||
builder.append(apk.packageName).append(':').append(apk.versionCode);
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
@ -433,9 +433,9 @@ public class ApkProvider extends FDroidProvider {
|
||||
for (int i = 0; i < apkDetails.length; i++) {
|
||||
String[] parts = apkDetails[i].split(":");
|
||||
String packageName = parts[0];
|
||||
String verCode = parts[1];
|
||||
String versionCode = parts[1];
|
||||
args[i * 2] = packageName;
|
||||
args[i * 2 + 1] = verCode;
|
||||
args[i * 2 + 1] = versionCode;
|
||||
if (i != 0) {
|
||||
sb.append(" OR ");
|
||||
}
|
||||
|
@ -59,17 +59,18 @@ public class App extends ValueObject implements Comparable<App> {
|
||||
|
||||
public String flattrID;
|
||||
|
||||
public String upstreamVersion;
|
||||
public int upstreamVercode;
|
||||
public String upstreamVersionName;
|
||||
public int upstreamVersionCode;
|
||||
|
||||
/**
|
||||
* Unlike other public fields, this is only accessible via a getter, to
|
||||
* 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 lastUpdated;
|
||||
@ -172,17 +173,17 @@ public class App extends ValueObject implements Comparable<App> {
|
||||
case AppProvider.DataColumns.FLATTR_ID:
|
||||
flattrID = cursor.getString(i);
|
||||
break;
|
||||
case AppProvider.DataColumns.SuggestedApk.VERSION:
|
||||
suggestedVersion = cursor.getString(i);
|
||||
case AppProvider.DataColumns.SuggestedApk.VERSION_NAME:
|
||||
suggestedVersionName = cursor.getString(i);
|
||||
break;
|
||||
case AppProvider.DataColumns.SUGGESTED_VERSION_CODE:
|
||||
suggestedVercode = cursor.getInt(i);
|
||||
suggestedVersionCode = cursor.getInt(i);
|
||||
break;
|
||||
case AppProvider.DataColumns.UPSTREAM_VERSION_CODE:
|
||||
upstreamVercode = cursor.getInt(i);
|
||||
upstreamVersionCode = cursor.getInt(i);
|
||||
break;
|
||||
case AppProvider.DataColumns.UPSTREAM_VERSION:
|
||||
upstreamVersion = cursor.getString(i);
|
||||
case AppProvider.DataColumns.UPSTREAM_VERSION_NAME:
|
||||
upstreamVersionName = cursor.getString(i);
|
||||
break;
|
||||
case AppProvider.DataColumns.ADDED:
|
||||
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 Apk apk = new Apk();
|
||||
apk.version = packageInfo.versionName;
|
||||
apk.vercode = packageInfo.versionCode;
|
||||
apk.versionName = packageInfo.versionName;
|
||||
apk.versionCode = packageInfo.versionCode;
|
||||
apk.hashType = "sha256";
|
||||
apk.hash = Utils.getBinaryHash(apkFile, apk.hashType);
|
||||
apk.added = this.added;
|
||||
@ -285,7 +286,7 @@ public class App extends ValueObject implements Comparable<App> {
|
||||
apk.packageName = this.packageName;
|
||||
apk.installedFile = apkFile;
|
||||
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;
|
||||
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.ADDED, Utils.formatDate(added, ""));
|
||||
values.put(AppProvider.DataColumns.LAST_UPDATED, Utils.formatDate(lastUpdated, ""));
|
||||
values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVercode);
|
||||
values.put(AppProvider.DataColumns.UPSTREAM_VERSION, upstreamVersion);
|
||||
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_CODE, upstreamVercode);
|
||||
values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVersionCode);
|
||||
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_NAME, upstreamVersionName);
|
||||
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_CODE, upstreamVersionCode);
|
||||
values.put(AppProvider.DataColumns.CATEGORIES, Utils.CommaSeparatedList.str(categories));
|
||||
values.put(AppProvider.DataColumns.ANTI_FEATURES, Utils.CommaSeparatedList.str(antiFeatures));
|
||||
values.put(AppProvider.DataColumns.REQUIREMENTS, Utils.CommaSeparatedList.str(requirements));
|
||||
@ -424,8 +425,8 @@ public class App extends ValueObject implements Comparable<App> {
|
||||
*/
|
||||
public boolean hasUpdates() {
|
||||
boolean updates = false;
|
||||
if (suggestedVercode > 0) {
|
||||
updates = installedVersionCode > 0 && installedVersionCode < suggestedVercode;
|
||||
if (suggestedVersionCode > 0) {
|
||||
updates = installedVersionCode > 0 && installedVersionCode < suggestedVersionCode;
|
||||
}
|
||||
return updates;
|
||||
}
|
||||
@ -434,7 +435,7 @@ public class App extends ValueObject implements Comparable<App> {
|
||||
// to be notified about them
|
||||
public boolean canAndWantToUpdate() {
|
||||
boolean canUpdate = hasUpdates();
|
||||
boolean wantsUpdate = !ignoreAllUpdates && ignoreThisUpdate < suggestedVercode;
|
||||
boolean wantsUpdate = !ignoreAllUpdates && ignoreThisUpdate < suggestedVersionCode;
|
||||
return canUpdate && wantsUpdate && !isFiltered();
|
||||
}
|
||||
|
||||
@ -444,7 +445,7 @@ public class App extends ValueObject implements Comparable<App> {
|
||||
return new AppFilter().filter(this);
|
||||
}
|
||||
|
||||
public String getSuggestedVersion() {
|
||||
return suggestedVersion;
|
||||
public String getSuggestedVersionName() {
|
||||
return suggestedVersionName;
|
||||
}
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ public class AppProvider extends FDroidProvider {
|
||||
String LITECOIN_ADDR = "litecoinAddr";
|
||||
String FLATTR_ID = "flattrID";
|
||||
String SUGGESTED_VERSION_CODE = "suggestedVercode";
|
||||
String UPSTREAM_VERSION = "upstreamVersion";
|
||||
String UPSTREAM_VERSION_NAME = "upstreamVersion";
|
||||
String UPSTREAM_VERSION_CODE = "upstreamVercode";
|
||||
String ADDED = "added";
|
||||
String LAST_UPDATED = "lastUpdated";
|
||||
@ -204,7 +204,7 @@ public class AppProvider extends FDroidProvider {
|
||||
String ICON_URL_LARGE = "iconUrlLarge";
|
||||
|
||||
interface SuggestedApk {
|
||||
String VERSION = "suggestedApkVersion";
|
||||
String VERSION_NAME = "suggestedApkVersion";
|
||||
}
|
||||
|
||||
interface InstalledApp {
|
||||
@ -217,10 +217,10 @@ public class AppProvider extends FDroidProvider {
|
||||
_ID, IS_COMPATIBLE, PACKAGE_NAME, NAME, SUMMARY, ICON, DESCRIPTION,
|
||||
LICENSE, AUTHOR, EMAIL, WEB_URL, TRACKER_URL, SOURCE_URL,
|
||||
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,
|
||||
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.SIGNATURE,
|
||||
};
|
||||
@ -348,7 +348,7 @@ public class AppProvider extends FDroidProvider {
|
||||
@Override
|
||||
public void addField(String field) {
|
||||
switch (field) {
|
||||
case DataColumns.SuggestedApk.VERSION:
|
||||
case DataColumns.SuggestedApk.VERSION_NAME:
|
||||
addSuggestedApkVersionField();
|
||||
break;
|
||||
case DataColumns.InstalledApp.VERSION_NAME:
|
||||
@ -379,8 +379,8 @@ public class AppProvider extends FDroidProvider {
|
||||
|
||||
private void addSuggestedApkVersionField() {
|
||||
addSuggestedApkField(
|
||||
ApkProvider.DataColumns.VERSION,
|
||||
DataColumns.SuggestedApk.VERSION);
|
||||
ApkProvider.DataColumns.VERSION_NAME,
|
||||
DataColumns.SuggestedApk.VERSION_NAME);
|
||||
}
|
||||
|
||||
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.NAME, name);
|
||||
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.MAX_AGE, 0);
|
||||
values.put(RepoProvider.DataColumns.VERSION, version);
|
||||
@ -311,7 +311,7 @@ class DBHelper extends SQLiteOpenHelper {
|
||||
Repo repo = new Repo();
|
||||
repo.address = cursor.getString(0);
|
||||
repo.inuse = cursor.getInt(1) == 1;
|
||||
repo.pubkey = cursor.getString(2);
|
||||
repo.signingCertificate = cursor.getString(2);
|
||||
oldrepos.add(repo);
|
||||
cursor.moveToNext();
|
||||
}
|
||||
@ -325,7 +325,7 @@ class DBHelper extends SQLiteOpenHelper {
|
||||
values.put("address", repo.address);
|
||||
values.put("inuse", repo.inuse);
|
||||
values.put("priority", 10);
|
||||
values.put("pubkey", repo.pubkey);
|
||||
values.put("pubkey", repo.signingCertificate);
|
||||
values.put("lastetag", (String) null);
|
||||
db.insert(TABLE_REPO, null, values);
|
||||
}
|
||||
@ -388,7 +388,7 @@ class DBHelper extends SQLiteOpenHelper {
|
||||
while (!cursor.isAfterLast()) {
|
||||
Repo repo = new Repo();
|
||||
repo.address = cursor.getString(0);
|
||||
repo.pubkey = cursor.getString(1);
|
||||
repo.signingCertificate = cursor.getString(1);
|
||||
oldrepos.add(repo);
|
||||
cursor.moveToNext();
|
||||
}
|
||||
@ -397,7 +397,7 @@ class DBHelper extends SQLiteOpenHelper {
|
||||
}
|
||||
for (final Repo repo : oldrepos) {
|
||||
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});
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public class Repo extends ValueObject {
|
||||
public boolean inuse;
|
||||
public int priority;
|
||||
/** 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
|
||||
* 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:
|
||||
name = cursor.getString(i);
|
||||
break;
|
||||
case RepoProvider.DataColumns.PUBLIC_KEY:
|
||||
pubkey = cursor.getString(i);
|
||||
case RepoProvider.DataColumns.SIGNING_CERT:
|
||||
signingCertificate = cursor.getString(i);
|
||||
break;
|
||||
case RepoProvider.DataColumns.PRIORITY:
|
||||
priority = cursor.getInt(i);
|
||||
@ -112,13 +112,13 @@ public class Repo extends ValueObject {
|
||||
}
|
||||
|
||||
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
|
||||
// has not connected to it yet to download its pubkey
|
||||
// has not connected to it yet to download its signing certificate
|
||||
public boolean isSignedButUnverified() {
|
||||
return TextUtils.isEmpty(this.pubkey) && !TextUtils.isEmpty(this.fingerprint);
|
||||
return TextUtils.isEmpty(this.signingCertificate) && !TextUtils.isEmpty(this.fingerprint);
|
||||
}
|
||||
|
||||
public boolean hasBeenUpdated() {
|
||||
@ -191,8 +191,8 @@ public class Repo extends ValueObject {
|
||||
name = values.getAsString(RepoProvider.DataColumns.NAME);
|
||||
}
|
||||
|
||||
if (values.containsKey(RepoProvider.DataColumns.PUBLIC_KEY)) {
|
||||
pubkey = values.getAsString(RepoProvider.DataColumns.PUBLIC_KEY);
|
||||
if (values.containsKey(RepoProvider.DataColumns.SIGNING_CERT)) {
|
||||
signingCertificate = values.getAsString(RepoProvider.DataColumns.SIGNING_CERT);
|
||||
}
|
||||
|
||||
if (values.containsKey(RepoProvider.DataColumns.PRIORITY)) {
|
||||
|
@ -169,7 +169,7 @@ public class RepoPersister {
|
||||
for (Apk apk : packages) {
|
||||
boolean exists = false;
|
||||
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;
|
||||
break;
|
||||
}
|
||||
@ -256,7 +256,7 @@ public class RepoPersister {
|
||||
|
||||
if (packages.containsKey(existingApk.packageName)) {
|
||||
for (Apk newApk : packages.get(existingApk.packageName)) {
|
||||
if (newApk.vercode == existingApk.vercode) {
|
||||
if (newApk.versionCode == existingApk.versionCode) {
|
||||
shouldStay = true;
|
||||
break;
|
||||
}
|
||||
|
@ -129,8 +129,8 @@ public class RepoProvider extends FDroidProvider {
|
||||
* make sure it is correct. If the fingerprint is empty, then store
|
||||
* the calculated one.
|
||||
*/
|
||||
if (values.containsKey(DataColumns.PUBLIC_KEY)) {
|
||||
String publicKey = values.getAsString(DataColumns.PUBLIC_KEY);
|
||||
if (values.containsKey(DataColumns.SIGNING_CERT)) {
|
||||
String publicKey = values.getAsString(DataColumns.SIGNING_CERT);
|
||||
String calcedFingerprint = Utils.calcFingerprint(publicKey);
|
||||
if (values.containsKey(DataColumns.FINGERPRINT)) {
|
||||
String fingerprint = values.getAsString(DataColumns.FINGERPRINT);
|
||||
@ -216,7 +216,7 @@ public class RepoProvider extends FDroidProvider {
|
||||
String DESCRIPTION = "description";
|
||||
String IN_USE = "inuse";
|
||||
String PRIORITY = "priority";
|
||||
String PUBLIC_KEY = "pubkey";
|
||||
String SIGNING_CERT = "pubkey";
|
||||
String FINGERPRINT = "fingerprint";
|
||||
String MAX_AGE = "maxage";
|
||||
String LAST_ETAG = "lastetag";
|
||||
@ -227,7 +227,7 @@ public class RepoProvider extends FDroidProvider {
|
||||
String PASSWORD = "password";
|
||||
|
||||
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,
|
||||
USERNAME, PASSWORD,
|
||||
};
|
||||
|
@ -49,7 +49,7 @@ public class TempApkProvider extends ApkProvider {
|
||||
return getContentUri()
|
||||
.buildUpon()
|
||||
.appendPath(PATH_APK)
|
||||
.appendPath(Integer.toString(apk.vercode))
|
||||
.appendPath(Integer.toString(apk.versionCode))
|
||||
.appendPath(apk.packageName)
|
||||
.build();
|
||||
}
|
||||
|
@ -293,7 +293,7 @@ public final class LocalRepoManager {
|
||||
if (app.installedApk != null) {
|
||||
try {
|
||||
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) {
|
||||
Log.e(TAG, "Error getting app icon", e);
|
||||
}
|
||||
@ -438,8 +438,8 @@ public final class LocalRepoManager {
|
||||
tag("web", "web");
|
||||
tag("source", "source");
|
||||
tag("tracker", "tracker");
|
||||
tag("marketversion", app.installedApk.version);
|
||||
tag("marketvercode", app.installedApk.vercode);
|
||||
tag("marketversion", app.installedApk.versionName);
|
||||
tag("marketvercode", app.installedApk.versionCode);
|
||||
|
||||
tagPackage(app);
|
||||
|
||||
@ -449,8 +449,8 @@ public final class LocalRepoManager {
|
||||
private void tagPackage(App app) throws IOException {
|
||||
serializer.startTag("", "package");
|
||||
|
||||
tag("version", app.installedApk.version);
|
||||
tag("versioncode", app.installedApk.vercode);
|
||||
tag("version", app.installedApk.versionName);
|
||||
tag("versioncode", app.installedApk.versionCode);
|
||||
tag("apkname", app.installedApk.apkName);
|
||||
tagHash(app);
|
||||
tag("sig", app.installedApk.sig.toLowerCase(Locale.US));
|
||||
|
@ -113,19 +113,19 @@ public abstract class AppListAdapter extends CursorAdapter {
|
||||
|
||||
private String getVersionInfo(App app) {
|
||||
|
||||
if (app.suggestedVercode <= 0) {
|
||||
if (app.suggestedVersionCode <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!app.isInstalled()) {
|
||||
return app.getSuggestedVersion();
|
||||
return app.getSuggestedVersionName();
|
||||
}
|
||||
|
||||
final String installedVersionString = app.installedVersionName;
|
||||
|
||||
if (app.canAndWantToUpdate() && showStatusUpdate()) {
|
||||
return String.format(upgradeFromTo,
|
||||
installedVersionString, app.getSuggestedVersion());
|
||||
installedVersionString, app.getSuggestedVersionName());
|
||||
}
|
||||
|
||||
if (app.installedVersionCode > 0 && showStatusInstalled()) {
|
||||
|
@ -711,7 +711,7 @@ public class ManageReposActivity extends ActionBarActivity {
|
||||
final String[] projection = {
|
||||
RepoProvider.DataColumns._ID,
|
||||
RepoProvider.DataColumns.NAME,
|
||||
RepoProvider.DataColumns.PUBLIC_KEY,
|
||||
RepoProvider.DataColumns.SIGNING_CERT,
|
||||
RepoProvider.DataColumns.FINGERPRINT,
|
||||
RepoProvider.DataColumns.IN_USE,
|
||||
};
|
||||
|
@ -264,7 +264,7 @@ public class RepoDetailsActivity extends ActionBarActivity {
|
||||
String repoFingerprint;
|
||||
|
||||
// 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);
|
||||
repoFingerprintView.setTextColor(getResources().getColor(R.color.unsigned));
|
||||
repoFingerprintDescView.setVisibility(View.VISIBLE);
|
||||
|
@ -49,7 +49,7 @@ public abstract class AppListFragment extends ListFragment implements
|
||||
AppProvider.DataColumns.ICON_URL,
|
||||
AppProvider.DataColumns.InstalledApp.VERSION_CODE,
|
||||
AppProvider.DataColumns.InstalledApp.VERSION_NAME,
|
||||
AppProvider.DataColumns.SuggestedApk.VERSION,
|
||||
AppProvider.DataColumns.SuggestedApk.VERSION_NAME,
|
||||
AppProvider.DataColumns.SUGGESTED_VERSION_CODE,
|
||||
AppProvider.DataColumns.IGNORE_ALLUPDATES,
|
||||
AppProvider.DataColumns.IGNORE_THISUPDATE,
|
||||
|
@ -336,7 +336,7 @@ public class SwapAppsView extends ListView implements
|
||||
*/
|
||||
private Apk getApkToInstall() {
|
||||
if (apkToInstall == null) {
|
||||
apkToInstall = ApkProvider.Helper.find(getActivity(), app.packageName, app.suggestedVercode);
|
||||
apkToInstall = ApkProvider.Helper.find(getActivity(), app.packageName, app.suggestedVersionCode);
|
||||
}
|
||||
return apkToInstall;
|
||||
}
|
||||
|
@ -782,7 +782,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
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);
|
||||
downloadCompleteReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user