summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Felipe Leme <felipeal@google.com> 2016-08-17 10:36:03 -0700
committer Steve McKay <smckay@google.com> 2016-08-17 22:09:42 +0000
commitdf418a77cf7c7ab910f356b3c05105d47e3f1f46 (patch)
treeb2ea95d2e18ea24f1ef957337d53185444335a1e
parentcfbc7abe50bea3cb314c88776d609757c42f04cf (diff)
Clear preferences when package is removed.
BUG: 30900628 Change-Id: I989b8b49e32ae9b729963ac1921cd1e921555ebe (cherry picked from commit 2154caf2f80fa87df84813b8e344f85094a454fd)
-rw-r--r--src/com/android/documentsui/LocalPreferences.java14
-rw-r--r--src/com/android/documentsui/PackageReceiver.java14
2 files changed, 23 insertions, 5 deletions
diff --git a/src/com/android/documentsui/LocalPreferences.java b/src/com/android/documentsui/LocalPreferences.java
index d2e9885ed..32d008206 100644
--- a/src/com/android/documentsui/LocalPreferences.java
+++ b/src/com/android/documentsui/LocalPreferences.java
@@ -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();
diff --git a/src/com/android/documentsui/PackageReceiver.java b/src/com/android/documentsui/PackageReceiver.java
index aef63afcb..b5c7c8774 100644
--- a/src/com/android/documentsui/PackageReceiver.java
+++ b/src/com/android/documentsui/PackageReceiver.java
@@ -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);
}
}
}