diff options
| author | Fred Quintana <fredq@google.com> | 2011-02-25 10:44:38 -0800 |
|---|---|---|
| committer | Fred Quintana <fredq@google.com> | 2011-02-28 16:36:14 -0800 |
| commit | c1a4e5dc418d324f2fa2827d83002cc50e62c507 (patch) | |
| tree | 0356838d24aa71f61d363e3d89225840fa049705 /core/java/android | |
| parent | 5381b467d5f462123dcf15a892be46c99631e410 (diff) | |
| download | frameworks_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')
| -rw-r--r-- | core/java/android/accounts/AccountManagerService.java | 35 |
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(); |
