New getAppsBasic to avoid retrieving unnecessary data
This commit is contained in:
parent
07a161c0a9
commit
96f358d94c
@ -192,7 +192,7 @@ public class DB {
|
||||
public Apk getCurrentVersion() {
|
||||
|
||||
// Try and return the real current version first...
|
||||
if (curVersion != null && curVercode > 0) {
|
||||
if (curVercode > 0) {
|
||||
for (Apk apk : apks) {
|
||||
if (apk.vercode == curVercode)
|
||||
return apk;
|
||||
@ -558,7 +558,7 @@ public class DB {
|
||||
// Get the number of apps that have updates available. This can be a
|
||||
// time consuming operation.
|
||||
public int getNumUpdates() {
|
||||
List<App> apps = getApps(true);
|
||||
List<App> apps = getAppsBasic(true);
|
||||
int count = 0;
|
||||
for (App app : apps) {
|
||||
if (app.hasUpdates)
|
||||
@ -866,6 +866,100 @@ public class DB {
|
||||
return apps;
|
||||
}
|
||||
|
||||
public List<App> getAppsBasic(boolean getinstalledinfo) {
|
||||
|
||||
// If we're going to need it, get info in what's currently installed
|
||||
Map<String, PackageInfo> systemApks = null;
|
||||
if (getinstalledinfo) {
|
||||
Log.d("FDroid", "Reading installed packages");
|
||||
systemApks = new HashMap<String, PackageInfo>();
|
||||
List<PackageInfo> installedPackages = mContext.getPackageManager()
|
||||
.getInstalledPackages(0);
|
||||
for (PackageInfo appInfo : installedPackages) {
|
||||
systemApks.put(appInfo.packageName, appInfo);
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, App> apps = new HashMap<String, App>();
|
||||
Cursor c = null;
|
||||
long startTime = System.currentTimeMillis();
|
||||
try {
|
||||
|
||||
String cols[] = new String[] { "id", "curVercode" };
|
||||
c = db.query(TABLE_APP, cols, null, null, null, null, null);
|
||||
c.moveToFirst();
|
||||
while (!c.isAfterLast()) {
|
||||
|
||||
App app = new App();
|
||||
app.id = c.getString(0);
|
||||
app.curVercode = c.getInt(1);
|
||||
app.hasUpdates = false;
|
||||
|
||||
if (getinstalledinfo && systemApks.containsKey(app.id)) {
|
||||
PackageInfo sysapk = systemApks.get(app.id);
|
||||
app.installedVerCode = sysapk.versionCode;
|
||||
} else {
|
||||
app.installedVerCode = 0;
|
||||
}
|
||||
|
||||
apps.put(app.id, app);
|
||||
c.moveToNext();
|
||||
}
|
||||
c.close();
|
||||
c = null;
|
||||
|
||||
Log.d("FDroid", "Read basic app data from database " + " (took "
|
||||
+ (System.currentTimeMillis() - startTime) + " ms)");
|
||||
|
||||
cols = new String[] { "id", "vercode", "repo" };
|
||||
c = db.query(TABLE_APK, cols, null, null, null, null,
|
||||
"vercode desc");
|
||||
c.moveToFirst();
|
||||
while (!c.isAfterLast()) {
|
||||
Apk apk = new Apk();
|
||||
apk.id = c.getString(0);
|
||||
apk.vercode = c.getInt(1);
|
||||
apk.repo = c.getInt(2);
|
||||
apps.get(apk.id).apks.add(apk);
|
||||
c.moveToNext();
|
||||
}
|
||||
c.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e("FDroid", "Exception during database reading:\n"
|
||||
+ Log.getStackTraceString(e));
|
||||
} finally {
|
||||
if (c != null) {
|
||||
c.close();
|
||||
}
|
||||
|
||||
Log.d("FDroid", "Read basic app and apk data from database " +
|
||||
" (took " + (System.currentTimeMillis() - startTime) +
|
||||
" ms)");
|
||||
}
|
||||
|
||||
List<App> result = new ArrayList<App>(apps.values());
|
||||
Collections.sort(result);
|
||||
|
||||
// Fill in the hasUpdates fields if we have the necessary information...
|
||||
if (getinstalledinfo) {
|
||||
|
||||
// We'll say an application has updates if it's installed AND the
|
||||
// version is older than the current one
|
||||
for (App app : result) {
|
||||
Apk curver = app.getCurrentVersion();
|
||||
if (curver != null
|
||||
&& app.installedVersion != null
|
||||
&& app.installedVerCode < curver.vercode) {
|
||||
app.hasUpdates = true;
|
||||
app.updateVersion = curver.version;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<String> doSearch(String query) {
|
||||
|
||||
List<String> ids = new ArrayList<String>();
|
||||
|
Loading…
x
Reference in New Issue
Block a user