diff options
author | Fred Quintana <fredq@google.com> | 2009-12-01 16:27:03 -0800 |
---|---|---|
committer | Fred Quintana <fredq@google.com> | 2009-12-02 11:29:44 -0800 |
commit | afa92b8f3d8f85fe2dde309f8f778926396539ea (patch) | |
tree | 28a7e22d5ab50bfbee42bc90bc471857ba023980 /core/java/android/accounts/AccountManagerService.java | |
parent | 42c4c589003c029309c823e8f06ed00b3cdb21de (diff) | |
download | frameworks_base-afa92b8f3d8f85fe2dde309f8f778926396539ea.zip frameworks_base-afa92b8f3d8f85fe2dde309f8f778926396539ea.tar.gz frameworks_base-afa92b8f3d8f85fe2dde309f8f778926396539ea.tar.bz2 |
remove accounts for authenticators that are uninstalled
Diffstat (limited to 'core/java/android/accounts/AccountManagerService.java')
-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 1a8d9b6..de01153 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -225,6 +225,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) { |