[Thread] start / initialize Thread service early
We need to do initialization work and start OT daemon when
system_server boots. But the initialize() is called at the phase
PHASE_BOOT_COMPLETED which is too late as Apps (e.g. Google Play
Services) can be started before this phase.
This commit changes to start the Thread service earlier at the phase
PHASE_SYSTEM_SERVICES_READY. Other services such as Wi-Fi, Bluetooth,
Ethernet and Nearby all starts / initializes at this phase.
This commit resolves comment aosp/2737373/comment/d65b9446_8a08117c
Bug: 318787467
Test: atest CtsThreadNetworkTestCases
Change-Id: I7b7b8551b9114cbf07f995b64316c7b420d868b6
diff --git a/thread/service/java/com/android/server/thread/ThreadNetworkService.java b/thread/service/java/com/android/server/thread/ThreadNetworkService.java
index a3cf278..53f2d4f 100644
--- a/thread/service/java/com/android/server/thread/ThreadNetworkService.java
+++ b/thread/service/java/com/android/server/thread/ThreadNetworkService.java
@@ -48,17 +48,20 @@
}
/**
- * Called by the service initializer.
+ * Called by {@link com.android.server.ConnectivityServiceInitializer}.
*
* @see com.android.server.SystemService#onBootPhase
*/
public void onBootPhase(int phase) {
- if (phase == SystemService.PHASE_BOOT_COMPLETED) {
+ if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
mControllerService = ThreadNetworkControllerService.newInstance(mContext);
mControllerService.initialize();
+ } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
+ // Country code initialization is delayed to the BOOT_COMPLETED phase because it will
+ // call into Wi-Fi and Telephony service whose country code module is ready after
+ // PHASE_ACTIVITY_MANAGER_READY and PHASE_THIRD_PARTY_APPS_CAN_START
mCountryCode = ThreadNetworkCountryCode.newInstance(mContext, mControllerService);
mCountryCode.initialize();
-
mShellCommand = new ThreadNetworkShellCommand(mCountryCode);
}
}