diff options
| author | 2012-07-31 11:17:11 -0700 | |
|---|---|---|
| committer | 2012-07-31 11:17:11 -0700 | |
| commit | fa74f7e04fcad1258a1b85515547dba0466086d8 (patch) | |
| tree | 23c5f583a74ffcc839d9364d281ee1aa637dabed | |
| parent | bed43546760180f967f0ee0538afbf1f5ef0d649 (diff) | |
| parent | bba948dc9e95baab9e6fb728927aada4a00d93de (diff) | |
am bba948dc: Merge "Delay AccountManagerService initialization" into jb-dev
* commit 'bba948dc9e95baab9e6fb728927aada4a00d93de':
  Delay AccountManagerService initialization
5 files changed, 34 insertions, 7 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), diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index f300d74a37af..e55e7fee65b5 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -114,6 +114,8 @@ class ServerThread extends Thread {                  : 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;          BatteryService battery = null; @@ -190,14 +192,14 @@ class ServerThread extends Thread {              // 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"); @@ -466,6 +468,20 @@ class ServerThread extends Thread {              }              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);  |