From 1dbf5704b6884d15a179656c3fb1dc2d0f7214b1 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 7 Jun 2017 22:07:01 +1000 Subject: [PATCH] Don't remove ourselves from the installed app cache. If F-Droid was actually removed, then we wouldn't even have an installed app cache (we aren't even on the device any more). As such, ignore all requests to remove F-Droid because it complicates the installed apk cache. Specifically, there is a race condition between the "compare apk cache to package manager" and the "package removed receiver", where the later was overriding the former. --- .../fdroid/fdroid/data/InstalledAppProviderService.java | 1 + .../org/fdroid/fdroid/receiver/PackageManagerReceiver.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java index 35602ba1e..870fdb20e 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java +++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java @@ -164,6 +164,7 @@ public class InstalledAppProviderService extends IntentService { * @see cachedInfo = InstalledAppProvider.Helper.all(context); List packageInfoList = context.getPackageManager() diff --git a/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java b/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java index d9c44b19c..3bda33bf4 100644 --- a/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java +++ b/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java @@ -3,6 +3,7 @@ package org.fdroid.fdroid.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.text.TextUtils; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.InstalledAppProviderService; @@ -26,7 +27,11 @@ public class PackageManagerReceiver extends BroadcastReceiver { if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { InstalledAppProviderService.insert(context, intent.getData()); } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { - InstalledAppProviderService.delete(context, intent.getData()); + if (TextUtils.equals(context.getPackageName(), intent.getData().getSchemeSpecificPart())) { + Utils.debugLog(TAG, "Ignoring request to remove ourselves from cache."); + } else { + InstalledAppProviderService.delete(context, intent.getData()); + } } else { Utils.debugLog(TAG, "unsupported action: " + action + " " + intent); }