From 7620f1ae498e01bf2df58eaa1b9b20ef1eb47fa1 Mon Sep 17 00:00:00 2001 From: Fred Quintana Date: Tue, 16 Mar 2010 15:58:44 -0700 Subject: [PATCH] Clean the settings for the account/authority when trying to sync an adapter that is not installed. Change-Id: Id4a804615b9546155948797f9dd9a0f03fbe4b2f http://b/issue?id=2520175 --- core/java/android/content/SyncManager.java | 4 +++- .../java/android/content/SyncStorageEngine.java | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index 840a7142451b3..df48f0428c91d 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -1610,7 +1610,9 @@ public class SyncManager implements OnAccountsUpdateListener { RegisteredServicesCache.ServiceInfo syncAdapterInfo = mSyncAdapters.getServiceInfo(syncAdapterType); if (syncAdapterInfo == null) { - Log.d(TAG, "can't find a sync adapter for " + syncAdapterType); + Log.d(TAG, "can't find a sync adapter for " + syncAdapterType + + ", removing settings for it"); + mSyncStorageEngine.removeAuthority(op.account, op.authority); runStateIdle(); return; } diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java index 0ec24530e7f69..03e606fb4305f 100644 --- a/core/java/android/content/SyncStorageEngine.java +++ b/core/java/android/content/SyncStorageEngine.java @@ -643,6 +643,12 @@ public class SyncStorageEngine extends Handler { } } + public void removeAuthority(Account account, String authority) { + synchronized (mAuthorities) { + removeAuthorityLocked(account, authority); + } + } + public AuthorityInfo getAuthority(int authorityId) { synchronized (mAuthorities) { return mAuthorities.get(authorityId); @@ -1272,6 +1278,15 @@ public class SyncStorageEngine extends Handler { return authority; } + private void removeAuthorityLocked(Account account, String authorityName) { + AccountInfo accountInfo = mAccounts.get(account); + if (accountInfo != null) { + if (accountInfo.authorities.remove(authorityName) != null) { + writeAccountInfoLocked(); + } + } + } + public SyncStatusInfo getOrCreateSyncStatus(AuthorityInfo authority) { synchronized (mAuthorities) { return getOrCreateSyncStatusLocked(authority.ident); @@ -1533,7 +1548,7 @@ public class SyncStorageEngine extends Handler { out.attribute(null, "authority", authority.authority); if (!authority.enabled) { out.attribute(null, "enabled", "false"); - } + } if (authority.syncable < 0) { out.attribute(null, "syncable", "unknown"); } else if (authority.syncable == 0) {