diff options
| author | Kenny Root <kroot@google.com> | 2012-07-30 12:58:03 -0700 |
|---|---|---|
| committer | Kenny Root <kroot@google.com> | 2012-07-30 16:28:44 -0700 |
| commit | 26ff6626fc4ee0ae46f01ad309b366921da589fe (patch) | |
| tree | 5b2469ff5463e1a7f9175943074877b6dfdb9e49 /core/java/android | |
| parent | 47db02bad8fed67025669c41ef0c0dd9cafe7ed2 (diff) | |
Delay AccountManagerService initialization
Since applications can have Account providers, they need to be delayed
until after PackageManagerService says everything is mounted.
Otherwise the accounts associated with that provider will be removed
immediately when startup happens.
Bug: 6820670
Change-Id: Iba81765260421649f706624d0605a40ebc1347b1
Diffstat (limited to 'core/java/android')
4 files changed, 15 insertions, 4 deletions
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index 079b9bd28476..22e454f9dc2f 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -220,8 +220,6 @@ public class AccountManagerService sThis.set(this); - UserAccounts accounts = initUser(0); - IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); intentFilter.addDataScheme("package"); @@ -242,6 +240,11 @@ public class AccountManagerService }, userFilter); } + public void systemReady() { + mAuthenticatorCache.generateServicesMap(); + initUser(0); + } + private UserAccounts initUser(int userId) { synchronized (mUsers) { UserAccounts accounts = mUsers.get(userId); diff --git a/core/java/android/accounts/IAccountAuthenticatorCache.java b/core/java/android/accounts/IAccountAuthenticatorCache.java index 618771f35415..20dd585a45a2 100644 --- a/core/java/android/accounts/IAccountAuthenticatorCache.java +++ b/core/java/android/accounts/IAccountAuthenticatorCache.java @@ -60,4 +60,9 @@ public interface IAccountAuthenticatorCache { */ void setListener(RegisteredServicesCacheListener<AuthenticatorDescription> listener, Handler handler); + + /** + * Refreshes the authenticator cache. + */ + void generateServicesMap(); }
\ No newline at end of file diff --git a/core/java/android/content/ContentService.java b/core/java/android/content/ContentService.java index f827c3de43c3..1a07504f2fbe 100644 --- a/core/java/android/content/ContentService.java +++ b/core/java/android/content/ContentService.java @@ -132,6 +132,9 @@ public final class ContentService extends IContentService.Stub { /*package*/ ContentService(Context context, boolean factoryTest) { mContext = context; mFactoryTest = factoryTest; + } + + public void systemReady() { getSyncManager(); } @@ -524,7 +527,7 @@ public final class ContentService extends IContentService.Stub { } } - public static IContentService main(Context context, boolean factoryTest) { + public static ContentService main(Context context, boolean factoryTest) { ContentService service = new ContentService(context, factoryTest); ServiceManager.addService(ContentResolver.CONTENT_SERVICE_NAME, service); return service; diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java index b1fc788c16a8..d8f920478aa6 100644 --- a/core/java/android/content/pm/RegisteredServicesCache.java +++ b/core/java/android/content/pm/RegisteredServicesCache.java @@ -251,7 +251,7 @@ public abstract class RegisteredServicesCache<V> { return false; } - void generateServicesMap() { + public void generateServicesMap() { PackageManager pm = mContext.getPackageManager(); ArrayList<ServiceInfo<V>> serviceInfos = new ArrayList<ServiceInfo<V>>(); List<ResolveInfo> resolveInfos = pm.queryIntentServices(new Intent(mInterfaceName), |
