summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2011-02-28 18:09:58 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-02-28 18:09:58 -0800
commit082aa9cdc4b8d63cb797af8773227a8ee6393738 (patch)
treec0b55b91ff43d17265277550bd96cc9c854236d9 /core/java
parentbb579480494b78e5943408bde116850cdb2b61d3 (diff)
parentc1a4e5dc418d324f2fa2827d83002cc50e62c507 (diff)
downloadframeworks_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.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 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();