summaryrefslogtreecommitdiffstats
path: root/core/java/android/accounts
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2009-12-01 16:27:03 -0800
committerFred Quintana <fredq@google.com>2009-12-02 11:29:44 -0800
commitafa92b8f3d8f85fe2dde309f8f778926396539ea (patch)
tree28a7e22d5ab50bfbee42bc90bc471857ba023980 /core/java/android/accounts
parent42c4c589003c029309c823e8f06ed00b3cdb21de (diff)
downloadframeworks_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')
-rw-r--r--core/java/android/accounts/AccountManagerService.java29
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) {