Move L2capNetworkProvider#start() onto Handler thread

To prevent having to use locking or memory synchronization mechanisms
later on.

Test: TH
Change-Id: I7b966621012030ab78e7a7e21e49ddc5df37df75
diff --git a/service/src/com/android/server/L2capNetworkProvider.java b/service/src/com/android/server/L2capNetworkProvider.java
index 01590ff..7440c0a 100644
--- a/service/src/com/android/server/L2capNetworkProvider.java
+++ b/service/src/com/android/server/L2capNetworkProvider.java
@@ -242,11 +242,13 @@
      * Called on CS Handler thread.
      */
     public void start() {
-        final PackageManager pm = mContext.getPackageManager();
-        if (pm.hasSystemFeature(FEATURE_BLUETOOTH_LE)) {
-            mContext.getSystemService(ConnectivityManager.class).registerNetworkProvider(mProvider);
-            mProvider.registerNetworkOffer(BlanketReservationOffer.SCORE,
-                    BlanketReservationOffer.CAPABILITIES, mHandler::post, mBlanketOffer);
-        }
+        mHandler.post(() -> {
+            final PackageManager pm = mContext.getPackageManager();
+            if (pm.hasSystemFeature(FEATURE_BLUETOOTH_LE)) {
+                mContext.getSystemService(ConnectivityManager.class).registerNetworkProvider(mProvider);
+                mProvider.registerNetworkOffer(BlanketReservationOffer.SCORE,
+                        BlanketReservationOffer.CAPABILITIES, mHandler::post, mBlanketOffer);
+            }
+        });
     }
 }
diff --git a/tests/unit/java/com/android/server/L2capNetworkProviderTest.kt b/tests/unit/java/com/android/server/L2capNetworkProviderTest.kt
index 56bbd31..2fd3d4f 100644
--- a/tests/unit/java/com/android/server/L2capNetworkProviderTest.kt
+++ b/tests/unit/java/com/android/server/L2capNetworkProviderTest.kt
@@ -35,6 +35,7 @@
 import android.os.HandlerThread
 import com.android.testutils.DevSdkIgnoreRule
 import com.android.testutils.DevSdkIgnoreRunner
+import com.android.testutils.waitForIdle
 import kotlin.test.assertTrue
 import org.junit.After
 import org.junit.Before
@@ -53,6 +54,7 @@
 import org.mockito.MockitoAnnotations
 
 private const val TAG = "L2capNetworkProviderTest"
+private const val TIMEOUT_MS = 1000
 
 private val RESERVATION_CAPS = NetworkCapabilities.Builder.withoutDefaultCapabilities()
     .addTransportType(TRANSPORT_BLUETOOTH)
@@ -96,6 +98,7 @@
     @Test
     fun testNetworkProvider_registeredWhenSupported() {
         L2capNetworkProvider(deps, context).start()
+        handlerThread.waitForIdle(TIMEOUT_MS)
         verify(cm).registerNetworkProvider(eq(provider))
         verify(provider).registerNetworkOffer(any(), any(), any(), any())
     }
@@ -104,12 +107,14 @@
     fun testNetworkProvider_notRegisteredWhenNotSupported() {
         doReturn(false).`when`(pm).hasSystemFeature(FEATURE_BLUETOOTH_LE)
         L2capNetworkProvider(deps, context).start()
+        handlerThread.waitForIdle(TIMEOUT_MS)
         verify(cm, never()).registerNetworkProvider(eq(provider))
     }
 
     fun doTestBlanketOfferIgnoresRequest(request: NetworkRequest) {
         clearInvocations(provider)
         L2capNetworkProvider(deps, context).start()
+        handlerThread.waitForIdle(TIMEOUT_MS)
 
         val blanketOfferCaptor = ArgumentCaptor.forClass(NetworkOfferCallback::class.java)
         verify(provider).registerNetworkOffer(any(), any(), any(), blanketOfferCaptor.capture())
@@ -124,6 +129,7 @@
     ) {
         clearInvocations(provider)
         L2capNetworkProvider(deps, context).start()
+        handlerThread.waitForIdle(TIMEOUT_MS)
 
         val blanketOfferCaptor = ArgumentCaptor.forClass(NetworkOfferCallback::class.java)
         verify(provider).registerNetworkOffer(any(), any(), any(), blanketOfferCaptor.capture())