am e23ae144: am fa74f7e0: am bba948dc: Merge "Delay AccountManagerService initialization" into jb-dev
* commit 'e23ae144cc1b6487a7c0e7a33d3016431c81850c':
Delay AccountManagerService initialization
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 079b9bd..22e454f 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -220,8 +220,6 @@
sThis.set(this);
- UserAccounts accounts = initUser(0);
-
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addDataScheme("package");
@@ -242,6 +240,11 @@
}, 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 618771f..20dd585 100644
--- a/core/java/android/accounts/IAccountAuthenticatorCache.java
+++ b/core/java/android/accounts/IAccountAuthenticatorCache.java
@@ -60,4 +60,9 @@
*/
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 f827c3d..1a07504 100644
--- a/core/java/android/content/ContentService.java
+++ b/core/java/android/content/ContentService.java
@@ -132,6 +132,9 @@
/*package*/ ContentService(Context context, boolean factoryTest) {
mContext = context;
mFactoryTest = factoryTest;
+ }
+
+ public void systemReady() {
getSyncManager();
}
@@ -524,7 +527,7 @@
}
}
- 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 b1fc788..d8f9204 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -251,7 +251,7 @@
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),
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index d766afd..cd00255 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -114,6 +114,8 @@
: Integer.parseInt(factoryTestStr);
final boolean headless = "1".equals(SystemProperties.get("ro.config.headless", "0"));
+ AccountManagerService accountManager = null;
+ ContentService contentService = null;
LightsService lights = null;
PowerManagerService power = null;
DisplayManagerService display = null;
@@ -195,14 +197,14 @@
// The AccountManager must come before the ContentService
try {
Slog.i(TAG, "Account Manager");
- ServiceManager.addService(Context.ACCOUNT_SERVICE,
- new AccountManagerService(context));
+ accountManager = new AccountManagerService(context);
+ ServiceManager.addService(Context.ACCOUNT_SERVICE, accountManager);
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Account Manager", e);
}
Slog.i(TAG, "Content Manager");
- ContentService.main(context,
+ contentService = ContentService.main(context,
factoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL);
Slog.i(TAG, "System Content Providers");
@@ -457,6 +459,20 @@
}
try {
+ if (accountManager != null)
+ accountManager.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Account Manager Service ready", e);
+ }
+
+ try {
+ if (contentService != null)
+ contentService.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Content Service ready", e);
+ }
+
+ try {
Slog.i(TAG, "Notification Manager");
notification = new NotificationManagerService(context, statusBar, lights);
ServiceManager.addService(Context.NOTIFICATION_SERVICE, notification);