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 8f60f111d..ffcbd2a11 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java +++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java @@ -23,10 +23,9 @@ import org.fdroid.fdroid.privileged.IPrivilegedService; import java.io.File; import java.io.FilenameFilter; -import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.TreeSet; import java.util.concurrent.TimeUnit; import androidx.annotation.NonNull; @@ -221,13 +220,9 @@ public class InstalledAppProviderService extends JobIntentService { packageInfoList = context.getPackageManager().getInstalledPackages(PackageManager.GET_SIGNATURES); } Map cachedInfo = InstalledAppProvider.Helper.lastUpdateTimes(context); - Collections.sort(packageInfoList, new Comparator() { - @Override - public int compare(PackageInfo o1, PackageInfo o2) { - return o1.packageName.compareTo(o2.packageName); - } - }); - for (PackageInfo packageInfo : packageInfoList) { + TreeSet packageInfoSet = new TreeSet<>((o1, o2) -> o1.packageName.compareTo(o2.packageName)); + packageInfoSet.addAll(packageInfoList); + for (PackageInfo packageInfo : packageInfoSet) { if (cachedInfo.containsKey(packageInfo.packageName)) { if (packageInfo.lastUpdateTime < 1262300400000L // 2010-01-01 00:00 || packageInfo.lastUpdateTime > cachedInfo.get(packageInfo.packageName)) { 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 b528f38d5..a91ca5780 100644 --- a/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java +++ b/app/src/main/java/org/fdroid/fdroid/receiver/PackageManagerReceiver.java @@ -3,10 +3,12 @@ package org.fdroid.fdroid.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.text.TextUtils; import android.util.Log; import org.fdroid.fdroid.data.InstalledAppProviderService; +import org.fdroid.fdroid.installer.PrivilegedInstaller; /** * Receive {@link Intent#ACTION_PACKAGE_ADDED} and {@link Intent#ACTION_PACKAGE_REMOVED} @@ -32,6 +34,15 @@ public class PackageManagerReceiver extends BroadcastReceiver { } else { InstalledAppProviderService.delete(context, intent.getData()); } + } else if (Intent.ACTION_PACKAGE_CHANGED.equals(action) && Build.VERSION.SDK_INT >= 29 && + PrivilegedInstaller.isExtensionInstalledCorrectly(context) == + PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES) { + String[] allowList = new String[]{"org.chromium.chrome"}; + for (String allowed : allowList) { + if (allowed.equals(intent.getData().getSchemeSpecificPart())) { + InstalledAppProviderService.compareToPackageManager(context); + } + } } else { Log.i(TAG, "unsupported action: " + action + " " + intent); }