mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-06-18 04:39:45 -04:00
InstalledAppProvider: store APK hash and last update time
The APK hash is useful for comparing whether something is exactly the same file as something else. For example, to compare whether the installed APK matches something that f-droid.org hosts. The "last update time" is a fast way to check whether the information is current.
This commit is contained in:
@@ -38,6 +38,7 @@ public class MockInstallablePackageManager extends MockPackageManager {
|
||||
p.versionCode = version;
|
||||
p.versionName = versionName;
|
||||
p.applicationInfo = new MockApplicationInfo(p);
|
||||
p.lastUpdateTime = System.currentTimeMillis();
|
||||
info.add(p);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.fdroid.fdroid.data;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
|
||||
import mock.MockContextSwappableComponents;
|
||||
import mock.MockInstallablePackageManager;
|
||||
@@ -81,6 +83,39 @@ public class InstalledAppProviderTest extends FDroidProviderTest<InstalledAppPro
|
||||
|
||||
}
|
||||
|
||||
public void testLastUpdateTime() {
|
||||
String packageName = "com.example.app";
|
||||
|
||||
insertInstalledApp(packageName, 10, "1.0");
|
||||
assertResultCount(1, InstalledAppProvider.getContentUri());
|
||||
assertIsInstalledVersionInDb(packageName, 10, "1.0");
|
||||
|
||||
Uri uri = InstalledAppProvider.getAppUri(packageName);
|
||||
|
||||
String[] projection = {
|
||||
InstalledAppProvider.DataColumns.PACKAGE_NAME,
|
||||
InstalledAppProvider.DataColumns.LAST_UPDATE_TIME,
|
||||
};
|
||||
|
||||
Cursor cursor = getMockContentResolver().query(uri, projection, null, null, null);
|
||||
assertNotNull(cursor);
|
||||
assertEquals("App \"" + packageName + "\" not installed", 1, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
assertEquals(packageName, cursor.getString(cursor.getColumnIndex(InstalledAppProvider.DataColumns.PACKAGE_NAME)));
|
||||
long lastUpdateTime = cursor.getLong(cursor.getColumnIndex(InstalledAppProvider.DataColumns.LAST_UPDATE_TIME));
|
||||
assertTrue(lastUpdateTime > 0);
|
||||
assertTrue(lastUpdateTime < System.currentTimeMillis());
|
||||
cursor.close();
|
||||
|
||||
insertInstalledApp(packageName, 11, "1.1");
|
||||
cursor = getMockContentResolver().query(uri, projection, null, null, null);
|
||||
assertNotNull(cursor);
|
||||
assertEquals("App \"" + packageName + "\" not installed", 1, cursor.getCount());
|
||||
cursor.moveToFirst();
|
||||
assertTrue(lastUpdateTime < cursor.getLong(cursor.getColumnIndex(InstalledAppProvider.DataColumns.LAST_UPDATE_TIME)));
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
public void testDelete() {
|
||||
|
||||
insertInstalledApp("com.example.app1", 10, "1.0");
|
||||
@@ -156,6 +191,9 @@ public class InstalledAppProviderTest extends FDroidProviderTest<InstalledAppPro
|
||||
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, versionCode);
|
||||
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, versionNumber);
|
||||
values.put(InstalledAppProvider.DataColumns.SIGNATURE, "");
|
||||
values.put(InstalledAppProvider.DataColumns.LAST_UPDATE_TIME, System.currentTimeMillis());
|
||||
values.put(InstalledAppProvider.DataColumns.HASH_TYPE, "sha256");
|
||||
values.put(InstalledAppProvider.DataColumns.HASH, "cafecafecafecafecafecafecafecafecafecafecafecafecafecafecafecafe");
|
||||
return values;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user