diff --git a/src/org/fdroid/fdroid/data/App.java b/src/org/fdroid/fdroid/data/App.java index de1e52043..38d900572 100644 --- a/src/org/fdroid/fdroid/data/App.java +++ b/src/org/fdroid/fdroid/data/App.java @@ -96,7 +96,7 @@ public class App extends ValueObject implements Comparable<App> { public int installedVersionCode; public ApplicationInfo appInfo; - public List<Apk> apks; + public Apk installedApk; // might be null if not installed @Override public int compareTo(App app) { @@ -216,7 +216,6 @@ public class App extends ValueObject implements Comparable<App> { this.name = (String) appInfo.loadLabel(pm); this.appInfo = appInfo; - this.apks = new ArrayList<Apk>(); File apkFile = new File(appInfo.publicSourceDir); Apk apk = new Apk(); @@ -298,7 +297,7 @@ public class App extends ValueObject implements Comparable<App> { } apk.sig = Utils.hashBytes(fdroidSig, "md5"); - this.apks.add(apk); + this.installedApk = apk; } public boolean isValid() { @@ -306,14 +305,13 @@ public class App extends ValueObject implements Comparable<App> { || TextUtils.isEmpty(this.id)) return false; - if (this.apks == null || this.apks.size() != 1) + if (this.installedApk == null) return false; - Apk apk = this.apks.get(0); - if (TextUtils.isEmpty(apk.sig)) + if (TextUtils.isEmpty(this.installedApk.sig)) return false; - File apkFile = apk.installedFile; + File apkFile = this.installedApk.installedFile; if (apkFile == null || !apkFile.canRead()) return false; diff --git a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java index 4adb625a3..317377f04 100644 --- a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java +++ b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java @@ -166,11 +166,10 @@ public class LocalRepoManager { for (String packageName : appsToCopy) { App app = apps.get(packageName); - for (Apk apk : app.apks) { - File outFile = new File(repoDir, apk.apkName); - if (!Utils.symlinkOrCopyFile(apk.installedFile, outFile)) { - throw new IllegalStateException("Unable to copy APK"); - } + File outFile = new File(repoDir, app.installedApk.apkName); + if (app.installedApk == null + || !Utils.symlinkOrCopyFile(app.installedApk.installedFile, outFile)) { + throw new IllegalStateException("Unable to copy APK"); } } } @@ -211,12 +210,9 @@ public class LocalRepoManager { } public void copyIconsToRepo() { - for (App app : apps.values()) { - if (app.apks.size() > 0) { - Apk apk = app.apks.get(0); - copyIconToRepo(app.appInfo.loadIcon(pm), app.id, apk.vercode); - } - } + for (App app : apps.values()) + if (app.installedApk != null) + copyIconToRepo(app.appInfo.loadIcon(pm), app.id, app.installedApk.vercode); } /** @@ -281,8 +277,6 @@ public class LocalRepoManager { SimpleDateFormat dateToStr = new SimpleDateFormat("yyyy-MM-dd", Locale.US); for (Entry<String, App> entry : apps.entrySet()) { - String latestVersion = "0"; - String latestVerCode = "0"; App app = entry.getValue(); Element application = doc.createElement("application"); application.setAttribute("id", app.id); @@ -338,75 +332,69 @@ public class LocalRepoManager { application.appendChild(tracker); Element marketVersion = doc.createElement("marketversion"); + marketVersion.setTextContent(app.installedApk.version); application.appendChild(marketVersion); Element marketVerCode = doc.createElement("marketvercode"); + marketVerCode.setTextContent(String.valueOf(app.installedApk.vercode)); application.appendChild(marketVerCode); - for (Apk apk : app.apks) { - Element packageNode = doc.createElement("package"); + Element packageNode = doc.createElement("package"); - Element version = doc.createElement("version"); - latestVersion = apk.version; - version.setTextContent(apk.version); - packageNode.appendChild(version); + Element version = doc.createElement("version"); + version.setTextContent(app.installedApk.version); + packageNode.appendChild(version); - // F-Droid unfortunately calls versionCode versioncode... - Element versioncode = doc.createElement("versioncode"); - latestVerCode = String.valueOf(apk.vercode); - versioncode.setTextContent(latestVerCode); - packageNode.appendChild(versioncode); + // F-Droid unfortunately calls versionCode versioncode... + Element versioncode = doc.createElement("versioncode"); + versioncode.setTextContent(String.valueOf(app.installedApk.vercode)); + packageNode.appendChild(versioncode); - Element apkname = doc.createElement("apkname"); - apkname.setTextContent(apk.apkName); - packageNode.appendChild(apkname); + Element apkname = doc.createElement("apkname"); + apkname.setTextContent(app.installedApk.apkName); + packageNode.appendChild(apkname); - Element hash = doc.createElement("hash"); - hash.setAttribute("type", apk.hashType); - hash.setTextContent(apk.hash.toLowerCase(Locale.US)); - packageNode.appendChild(hash); + Element hash = doc.createElement("hash"); + hash.setAttribute("type", app.installedApk.hashType); + hash.setTextContent(app.installedApk.hash.toLowerCase(Locale.US)); + packageNode.appendChild(hash); - Element sig = doc.createElement("sig"); - sig.setTextContent(apk.sig.toLowerCase(Locale.US)); - packageNode.appendChild(sig); + Element sig = doc.createElement("sig"); + sig.setTextContent(app.installedApk.sig.toLowerCase(Locale.US)); + packageNode.appendChild(sig); - Element size = doc.createElement("size"); - size.setTextContent(String.valueOf(apk.installedFile.length())); - packageNode.appendChild(size); + Element size = doc.createElement("size"); + size.setTextContent(String.valueOf(app.installedApk.installedFile.length())); + packageNode.appendChild(size); - Element sdkver = doc.createElement("sdkver"); - sdkver.setTextContent(String.valueOf(apk.minSdkVersion)); - packageNode.appendChild(sdkver); + Element sdkver = doc.createElement("sdkver"); + sdkver.setTextContent(String.valueOf(app.installedApk.minSdkVersion)); + packageNode.appendChild(sdkver); - Element apkAdded = doc.createElement("added"); - apkAdded.setTextContent(dateToStr.format(apk.added)); - packageNode.appendChild(apkAdded); + Element apkAdded = doc.createElement("added"); + apkAdded.setTextContent(dateToStr.format(app.installedApk.added)); + packageNode.appendChild(apkAdded); - Element features = doc.createElement("features"); - if (apk.features != null) - features.setTextContent(Utils.CommaSeparatedList.str(apk.features)); - packageNode.appendChild(features); + Element features = doc.createElement("features"); + if (app.installedApk.features != null) + features.setTextContent(Utils.CommaSeparatedList.str(app.installedApk.features)); + packageNode.appendChild(features); - Element permissions = doc.createElement("permissions"); - if (apk.permissions != null) { - StringBuilder buff = new StringBuilder(); + Element permissions = doc.createElement("permissions"); + if (app.installedApk.permissions != null) { + StringBuilder buff = new StringBuilder(); - for (String permission : apk.permissions) { - buff.append(permission.replace("android.permission.", "")); - buff.append(","); - } - String out = buff.toString(); - if (!TextUtils.isEmpty(out)) - permissions.setTextContent(out.substring(0, out.length() - 1)); + for (String permission : app.installedApk.permissions) { + buff.append(permission.replace("android.permission.", "")); + buff.append(","); } - packageNode.appendChild(permissions); - - application.appendChild(packageNode); + String out = buff.toString(); + if (!TextUtils.isEmpty(out)) + permissions.setTextContent(out.substring(0, out.length() - 1)); } + packageNode.appendChild(permissions); - // now mark the latest version in the feed for this particular app - marketVersion.setTextContent(latestVersion); - marketVerCode.setTextContent(latestVerCode); + application.appendChild(packageNode); } TransformerFactory transformerFactory = TransformerFactory.newInstance();