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

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

Merge "Clear preferences when package is removed." into nyc-andromeda-dev

parents 26819d7d df418a77
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);
            }
        }
    }