summaryrefslogtreecommitdiffstats
path: root/core/java/android/accounts
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2011-02-25 10:44:38 -0800
committerFred Quintana <fredq@google.com>2011-02-28 16:36:14 -0800
commitc1a4e5dc418d324f2fa2827d83002cc50e62c507 (patch)
tree0356838d24aa71f61d363e3d89225840fa049705 /core/java/android/accounts
parent5381b467d5f462123dcf15a892be46c99631e410 (diff)
downloadframeworks_base-c1a4e5dc418d324f2fa2827d83002cc50e62c507.zip
frameworks_base-c1a4e5dc418d324f2fa2827d83002cc50e62c507.tar.gz
frameworks_base-c1a4e5dc418d324f2fa2827d83002cc50e62c507.tar.bz2
Make the AccountManagerService clear old grants when the package
that the grants refer to is no longer installed. Bug: 3425856 Change-Id: I6ec057415c8f35be91c8434ff10e6cf5c1fc47bb
Diffstat (limited to 'core/java/android/accounts')
-rw-r--r--core/java/android/accounts/AccountManagerService.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 2e70a56..81be2aa 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -211,9 +211,44 @@ public class AccountManagerService
mSimWatcher = new SimWatcher(mContext);
sThis.set(this);
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ intentFilter.addDataScheme("package");
+ mContext.registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context1, Intent intent) {
+ purgeOldGrants();
+ }
+ }, intentFilter);
+ purgeOldGrants();
+
validateAccountsAndPopulateCache();
}
+ private void purgeOldGrants() {
+ synchronized (mCacheLock) {
+ final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+ final Cursor cursor = db.query(TABLE_GRANTS,
+ new String[]{GRANTS_GRANTEE_UID},
+ null, null, GRANTS_GRANTEE_UID, null, null);
+ try {
+ while (cursor.moveToNext()) {
+ final int uid = cursor.getInt(0);
+ final boolean packageExists = mPackageManager.getPackagesForUid(uid) != null;
+ if (packageExists) {
+ continue;
+ }
+ Log.d(TAG, "deleting grants for UID " + uid
+ + " because its package is no longer installed");
+ db.delete(TABLE_GRANTS, GRANTS_GRANTEE_UID + "=?",
+ new String[]{Integer.toString(uid)});
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+
private void validateAccountsAndPopulateCache() {
boolean accountDeleted = false;
SQLiteDatabase db = mOpenHelper.getWritableDatabase();