Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7932cec4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clear preferences when package is removed."

parents b0c67a8e 2154caf2
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -84,6 +84,10 @@ public class LocalPreferences {
    @Retention(RetentionPolicy.SOURCE)
    public @interface PermissionStatus {}

    static void clearPackagePreferences(Context context, String packageName) {
        clearScopedAccessPreferences(context, packageName);
    }

    /**
     * Methods below are used to keep track of denied user requests on scoped directory access so
     * the dialog is not offered when user checked the 'Do not ask again' box
@@ -108,6 +112,16 @@ public class LocalPreferences {
      getPrefs(context).edit().putInt(key, status).apply();
    }

    private static void clearScopedAccessPreferences(Context context, String packageName) {
        final String keySubstring = "|" + packageName + "|";
        final SharedPreferences prefs = getPrefs(context);
        for (final String key : prefs.getAll().keySet()) {
            if (key.contains(keySubstring)) {
                prefs.edit().remove(key).apply();
            }
        }
    }

    private static String getScopedAccessDenialsKey(String packageName, String uuid,
            String directory) {
        final int userId = UserHandle.myUserId();
+9 −5
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import android.content.Intent;
import android.net.Uri;

/**
 * Clean up {@link RecentsProvider} when packages are removed.
 * Clean up {@link RecentsProvider} and {@link LocalPreferences} when packages are removed.
 */
public class PackageReceiver extends BroadcastReceiver {
    @Override
@@ -31,15 +31,19 @@ public class PackageReceiver extends BroadcastReceiver {
        final ContentResolver resolver = context.getContentResolver();

        final String action = intent.getAction();
        final Uri data = intent.getData();
        final String packageName = data == null ? null : data.getSchemeSpecificPart();

        if (Intent.ACTION_PACKAGE_FULLY_REMOVED.equals(action)) {
            resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE, null, null);

            if (packageName != null) {
                LocalPreferences.clearPackagePreferences(context, packageName);
            }
        } else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) {
            final Uri data = intent.getData();
            if (data != null) {
                final String packageName = data.getSchemeSpecificPart();
            if (packageName != null) {
                resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE_PACKAGE,
                        packageName, null);
                LocalPreferences.clearPackagePreferences(context, packageName);
            }
        }
    }