From 1413c353422cc587d4884ed8c7f23926d0dd50ed Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 11 Apr 2018 11:34:09 +0200 Subject: [PATCH] use standard method for basic installed app queries Makes easy to track where these lookups are happening, and hopefully simplifies the code a bit. --- .../fdroid/fdroid/AppUpdateStatusService.java | 13 +++-------- .../java/org/fdroid/fdroid/RepoUpdater.java | 10 +-------- .../main/java/org/fdroid/fdroid/Utils.java | 22 ++++++++++++++++++- .../fdroid/fdroid/data/ObbUrlActivity.java | 9 ++------ 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusService.java b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusService.java index 3179c7a65..2fb81baff 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusService.java +++ b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusService.java @@ -56,7 +56,6 @@ public class AppUpdateStatusService extends IntentService { if (cacheDirList == null) { return; } - PackageManager packageManager = getPackageManager(); List apksReadyToInstall = new ArrayList<>(); for (String repoDirName : cacheDirList) { File repoDir = new File(cacheDir, repoDirName); @@ -67,12 +66,7 @@ public class AppUpdateStatusService extends IntentService { for (String apkFileName : apks) { Apk apk = processDownloadedApk(new File(repoDir, apkFileName)); if (apk != null) { - PackageInfo packageInfo = null; - try { - packageInfo = packageManager.getPackageInfo(apk.packageName, 0); - } catch (PackageManager.NameNotFoundException e) { - // ignored - } + PackageInfo packageInfo = Utils.getPackageInfo(this, apk.packageName); if (packageInfo == null || packageInfo.versionCode != apk.versionCode) { Utils.debugLog(TAG, "Marking downloaded apk " + apk.apkName + " as ReadyToInstall"); apksReadyToInstall.add(apk); @@ -134,8 +128,8 @@ public class AppUpdateStatusService extends IntentService { return null; } - try { - PackageInfo info = getPackageManager().getPackageInfo(downloadedApk.packageName, 0); + PackageInfo info = Utils.getPackageInfo(this, downloadedApk.packageName); + if (info != null) { File pathToInstalled = InstalledAppProviderService.getPathToInstalledApk(info); if (pathToInstalled != null && pathToInstalled.canRead() && pathToInstalled.length() == downloadedApk.size && // Check size before hash for performance. @@ -145,7 +139,6 @@ public class AppUpdateStatusService extends IntentService { AppUpdateStatusManager.getInstance(this).markAsNoLongerPendingInstall(downloadedApk.getUrl()); return null; } - } catch (PackageManager.NameNotFoundException ignored) { } Utils.debugLog(TAG, downloadedApk.packageName + ':' + downloadedApk.versionCode diff --git a/app/src/main/java/org/fdroid/fdroid/RepoUpdater.java b/app/src/main/java/org/fdroid/fdroid/RepoUpdater.java index 6e8654d89..0e82b16d2 100644 --- a/app/src/main/java/org/fdroid/fdroid/RepoUpdater.java +++ b/app/src/main/java/org/fdroid/fdroid/RepoUpdater.java @@ -26,7 +26,6 @@ import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.Log; @@ -450,16 +449,9 @@ public class RepoUpdater { * per repo basis. */ void processRepoPushRequests() { - PackageManager pm = context.getPackageManager(); - for (RepoPushRequest repoPushRequest : repoPushRequestList) { String packageName = repoPushRequest.packageName; - PackageInfo packageInfo = null; - try { - packageInfo = pm.getPackageInfo(packageName, 0); - } catch (PackageManager.NameNotFoundException e) { - // ignored - } + PackageInfo packageInfo = Utils.getPackageInfo(context, packageName); if (RepoPushRequest.INSTALL.equals(repoPushRequest.request)) { ContentResolver cr = context.getContentResolver(); diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java index 703b169d7..51eb9e3b5 100644 --- a/app/src/main/java/org/fdroid/fdroid/Utils.java +++ b/app/src/main/java/org/fdroid/fdroid/Utils.java @@ -19,6 +19,7 @@ package org.fdroid.fdroid; import android.content.Context; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Resources; import android.database.Cursor; @@ -668,7 +669,12 @@ public final class Utils { } } - // Try to get the version name of the client. Return null on failure. + /** + * Try to get the {@link PackageInfo#versionName} of the + * client. + * + * @return null on failure + */ public static String getVersionName(Context context) { String versionName = null; try { @@ -680,6 +686,20 @@ public final class Utils { return versionName; } + /** + * Try to get the {@link PackageInfo} for the {@code packageName} provided. + * + * @return null on failure + */ + public static PackageInfo getPackageInfo(Context context, String packageName) { + try { + return context.getPackageManager().getPackageInfo(packageName, 0); + } catch (PackageManager.NameNotFoundException e) { + debugLog(TAG, "Could not get PackageInfo: ", e); + } + return null; + } + /** * Useful for debugging during development, so that arbitrary queries can be made, and their * results inspected in the debugger. diff --git a/app/src/main/java/org/fdroid/fdroid/data/ObbUrlActivity.java b/app/src/main/java/org/fdroid/fdroid/data/ObbUrlActivity.java index 920483473..fed9105a3 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/ObbUrlActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/data/ObbUrlActivity.java @@ -4,10 +4,8 @@ import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; - import org.fdroid.fdroid.Utils; /** @@ -38,12 +36,9 @@ public class ObbUrlActivity extends Activity { String packageName = componentName.getPackageName(); Apk apk = null; - try { - PackageManager pm = getPackageManager(); - PackageInfo packageInfo = pm.getPackageInfo(packageName, 0); + PackageInfo packageInfo = Utils.getPackageInfo(this, packageName); + if (packageInfo != null) { apk = ApkProvider.Helper.findApkFromAnyRepo(this, packageName, packageInfo.versionCode); - } catch (PackageManager.NameNotFoundException e) { - Utils.debugLog(TAG, e.getLocalizedMessage()); } if (apk == null) {