diff options
author | Fred Quintana <fredq@google.com> | 2011-02-28 18:09:58 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-02-28 18:09:58 -0800 |
commit | 082aa9cdc4b8d63cb797af8773227a8ee6393738 (patch) | |
tree | c0b55b91ff43d17265277550bd96cc9c854236d9 /core/java | |
parent | bb579480494b78e5943408bde116850cdb2b61d3 (diff) | |
parent | c1a4e5dc418d324f2fa2827d83002cc50e62c507 (diff) | |
download | frameworks_base-082aa9cdc4b8d63cb797af8773227a8ee6393738.zip frameworks_base-082aa9cdc4b8d63cb797af8773227a8ee6393738.tar.gz frameworks_base-082aa9cdc4b8d63cb797af8773227a8ee6393738.tar.bz2 |
Merge "Make the AccountManagerService clear old grants when the package that the grants refer to is no longer installed."
Diffstat (limited to 'core/java')
-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 c91cdca..a1c2867 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -209,9 +209,44 @@ public class AccountManagerService 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(); |