From e677d815d42b05fab865e540181de7ae9abb2999 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Tue, 27 Apr 2021 11:27:14 -0400 Subject: [PATCH 1/2] Sync installed app database with package manager on PACKAGE_CHANGED for shared libraries --- .../fdroid/receiver/PackageManagerReceiver.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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); } From b52c7ca39a485d552605028437dbebea4107152a Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Tue, 27 Apr 2021 11:30:55 -0400 Subject: [PATCH 2/2] Remove duplicate entries from installed packages list --- .../fdroid/data/InstalledAppProviderService.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) 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)) {