diff options
author | Fred Quintana <fredq@google.com> | 2009-12-02 20:33:59 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-12-02 20:33:59 -0800 |
commit | 0b957851c5bc3c95aa204a47e4a822921d5946b9 (patch) | |
tree | 05e7843ad49097d9afdf02d52de5d695a4436539 /core/java/android/accounts | |
parent | a5883d6aca074fdf54f27e562a469bd42e9a6c0a (diff) | |
parent | 74f7b139d0e380969268f44d5358db08e0325394 (diff) | |
download | frameworks_base-0b957851c5bc3c95aa204a47e4a822921d5946b9.zip frameworks_base-0b957851c5bc3c95aa204a47e4a822921d5946b9.tar.gz frameworks_base-0b957851c5bc3c95aa204a47e4a822921d5946b9.tar.bz2 |
am 74f7b139: am f307ec5d: Merge change Iafa92b8f into eclair-mr2
Merge commit '74f7b139d0e380969268f44d5358db08e0325394'
* commit '74f7b139d0e380969268f44d5358db08e0325394':
remove accounts for authenticators that are uninstalled
Diffstat (limited to 'core/java/android/accounts')
-rw-r--r-- | core/java/android/accounts/AccountManagerService.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index e6941e6..54e0375 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -227,6 +227,35 @@ public class AccountManagerService mSimWatcher = new SimWatcher(mContext); sThis.set(this); + + validateAccounts(); + } + + private void validateAccounts() { + boolean accountDeleted = false; + SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + Cursor cursor = db.query(TABLE_ACCOUNTS, + new String[]{ACCOUNTS_ID, ACCOUNTS_TYPE, ACCOUNTS_NAME}, + null, null, null, null, null); + try { + while (cursor.moveToNext()) { + final long accountId = cursor.getLong(0); + final String accountType = cursor.getString(1); + final String accountName = cursor.getString(2); + if (mAuthenticatorCache.getServiceInfo(AuthenticatorDescription.newKey(accountType)) + == null) { + Log.d(TAG, "deleting account " + accountName + " because type " + + accountType + " no longer has a registered authenticator"); + db.delete(TABLE_ACCOUNTS, ACCOUNTS_ID + "=" + accountId, null); + accountDeleted = true; + } + } + } finally { + cursor.close(); + if (accountDeleted) { + sendAccountsChangedBroadcast(); + } + } } public void onServiceChanged(AuthenticatorDescription desc, boolean removed) { |