summaryrefslogtreecommitdiffstats
path: root/core/java/android/accounts
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2009-12-02 20:33:59 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-12-02 20:33:59 -0800
commit0b957851c5bc3c95aa204a47e4a822921d5946b9 (patch)
tree05e7843ad49097d9afdf02d52de5d695a4436539 /core/java/android/accounts
parenta5883d6aca074fdf54f27e562a469bd42e9a6c0a (diff)
parent74f7b139d0e380969268f44d5358db08e0325394 (diff)
downloadframeworks_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.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 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) {