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() {
|
public Apk getCurrentVersion() {
|
||||||
|
|
||||||
// Try and return the real current version first...
|
// Try and return the real current version first...
|
||||||
if (curVersion != null && curVercode > 0) {
|
if (curVercode > 0) {
|
||||||
for (Apk apk : apks) {
|
for (Apk apk : apks) {
|
||||||
if (apk.vercode == curVercode)
|
if (apk.vercode == curVercode)
|
||||||
return apk;
|
return apk;
|
||||||
@ -558,7 +558,7 @@ public class DB {
|
|||||||
// Get the number of apps that have updates available. This can be a
|
// Get the number of apps that have updates available. This can be a
|
||||||
// time consuming operation.
|
// time consuming operation.
|
||||||
public int getNumUpdates() {
|
public int getNumUpdates() {
|
||||||
List<App> apps = getApps(true);
|
List<App> apps = getAppsBasic(true);
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (App app : apps) {
|
for (App app : apps) {
|
||||||
if (app.hasUpdates)
|
if (app.hasUpdates)
|
||||||
@ -866,6 +866,100 @@ public class DB {
|
|||||||
return apps;
|
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) {
|
public List<String> doSearch(String query) {
|
||||||
|
|
||||||
List<String> ids = new ArrayList<String>();
|
List<String> ids = new ArrayList<String>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user