From c1a6f545cf602e939fb0969164cfdde1911f0f04 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 6 May 2014 15:26:53 -0400 Subject: [PATCH] move getMinSdkVersion() from LocalRepoManager to Utils This will probably be useful elsewhere. --- src/org/fdroid/fdroid/Utils.java | 33 +++++++++++++++++++ .../fdroid/localrepo/LocalRepoManager.java | 31 ++--------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/org/fdroid/fdroid/Utils.java b/src/org/fdroid/fdroid/Utils.java index 1fada5b56..f071579a5 100644 --- a/src/org/fdroid/fdroid/Utils.java +++ b/src/org/fdroid/fdroid/Utils.java @@ -19,6 +19,9 @@ package org.fdroid.fdroid; import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.AssetManager; +import android.content.res.XmlResourceParser; import android.net.Uri; import android.os.Build; import android.text.TextUtils; @@ -28,6 +31,8 @@ import android.util.Log; import com.nostra13.universalimageloader.utils.StorageUtils; import org.fdroid.fdroid.data.Repo; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; import java.io.*; import java.math.BigInteger; @@ -201,6 +206,34 @@ public final class Utils { return androidVersionNames[sdkLevel]; } + /* PackageManager doesn't give us minSdkVersion, so we have to parse it */ + public static int getMinSdkVersion(Context context, String packageName) { + try { + AssetManager am = context.createPackageContext(packageName, 0).getAssets(); + XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml"); + int eventType = xml.getEventType(); + while (eventType != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG) { + if (xml.getName().equals("uses-sdk")) { + for (int j = 0; j < xml.getAttributeCount(); j++) { + if (xml.getAttributeName(j).equals("minSdkVersion")) { + return Integer.parseInt(xml.getAttributeValue(j)); + } + } + } + } + eventType = xml.nextToken(); + } + } catch (NameNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (XmlPullParserException e) { + e.printStackTrace(); + } + return 8; // some kind of hopeful default + } + public static int countSubstringOccurrence(File file, String substring) throws IOException { int count = 0; FileReader input = null; diff --git a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java index 4fcda1e95..90086e07b 100644 --- a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java +++ b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java @@ -188,6 +188,7 @@ public class LocalRepoManager { @TargetApi(9) public App addApp(Context context, String packageName) { + // TODO this should become a constructor, i.e. public App(PackageManager pm, String id) ApplicationInfo appInfo; PackageInfo packageInfo; try { @@ -223,7 +224,7 @@ public class LocalRepoManager { apk.hashType = "sha256"; apk.hash = Utils.getBinaryHash(apkFile, apk.hashType); apk.added = app.added; - apk.minSdkVersion = getMinSdkVersion(context, packageName); + apk.minSdkVersion = Utils.getMinSdkVersion(context, packageName); apk.id = app.id; apk.installedFile = apkFile; if (packageInfo.requestedPermissions == null) @@ -311,34 +312,6 @@ public class LocalRepoManager { return app; } - /* PackageManager doesn't give us minSdkVersion, so we have to parse it */ - public int getMinSdkVersion(Context context, String packageName) { - try { - AssetManager am = context.createPackageContext(packageName, 0).getAssets(); - XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml"); - int eventType = xml.getEventType(); - while (eventType != XmlPullParser.END_DOCUMENT) { - if (eventType == XmlPullParser.START_TAG) { - if (xml.getName().equals("uses-sdk")) { - for (int j = 0; j < xml.getAttributeCount(); j++) { - if (xml.getAttributeName(j).equals("minSdkVersion")) { - return Integer.parseInt(xml.getAttributeValue(j)); - } - } - } - } - eventType = xml.nextToken(); - } - } catch (NameNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (XmlPullParserException e) { - e.printStackTrace(); - } - return 8; // some kind of hopeful default - } - public void removeApp(String packageName) { apps.remove(packageName); }