From ebd5b589f62629bfdcf447b0b48a8d79526f0326 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Sun, 10 Mar 2024 11:32:45 +0100 Subject: [PATCH] Fix uninstalled apps not removed from app filter Closes #417 --- .../emanuelef/remote_capture/PCAPdroid.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java b/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java index f98cef00..40ce5e36 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java +++ b/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java @@ -25,6 +25,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; @@ -36,6 +37,8 @@ import com.emanuelef.remote_capture.model.MatchList; import com.emanuelef.remote_capture.model.Prefs; import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Set; import cat.ereza.customactivityoncrash.config.CaocConfig; @@ -116,11 +119,15 @@ public class PCAPdroid extends Application { String packageName = intent.getData().getSchemeSpecificPart(); Log.d(TAG, "ACTION_PACKAGE_REMOVED [update=" + isUpdate + "]: " + packageName); - if(!isUpdate) + if(!isUpdate) { checkUidMapping(packageName); + removeUninstalledAppsFromAppFilter(); + } } } }, filter); + + removeUninstalledAppsFromAppFilter(); } public static @NonNull PCAPdroid getInstance() { @@ -195,6 +202,29 @@ public class PCAPdroid extends Application { } } + private void removeUninstalledAppsFromAppFilter() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + Set filter = Prefs.getAppFilter(prefs); + ArrayList to_remove = new ArrayList<>(); + PackageManager pm = getPackageManager(); + + for (String package_name: filter) { + try { + Utils.getPackageInfo(pm, package_name, 0); + } catch (PackageManager.NameNotFoundException e) { + Log.i(TAG, "Package " + package_name + " uninstalled, removing from app filter"); + to_remove.add(package_name); + } + } + + if (!to_remove.isEmpty()) { + filter.removeAll(to_remove); + prefs.edit() + .putStringSet(Prefs.PREF_APP_FILTER, filter) + .apply(); + } + } + public MatchList getFirewallWhitelist() { if(mFirewallWhitelist == null) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);