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) {