Join HandlerThread if BLE is not supported

Unfortunately, in order to make the Handler constructor happy,
HandlerThread does need to be started briefly (to return a Looper
object). However, is BLE is not supported, there is no need to leave the
thread running.

Test: TH
Change-Id: I47e455544aa40654676c4154a5e28a52d1c6c05b
diff --git a/service/src/com/android/server/L2capNetworkProvider.java b/service/src/com/android/server/L2capNetworkProvider.java
index e3becd6..d0b0603 100644
--- a/service/src/com/android/server/L2capNetworkProvider.java
+++ b/service/src/com/android/server/L2capNetworkProvider.java
@@ -95,9 +95,8 @@
     private final BlanketReservationOffer mBlanketOffer;
     private final Set<ReservedServerOffer> mReservedServerOffers = new ArraySet<>();
     private final ClientOffer mClientOffer;
-    // mBluetoothManager guaranteed non-null when read on handler thread after start() is called
-    @Nullable
-    private BluetoothManager mBluetoothManager;
+    private final BluetoothManager mBluetoothManager;
+    private final boolean mIsSupported;
 
     // Note: IFNAMSIZ is 16.
     private static final String TUN_IFNAME = "l2cap-tun";
@@ -681,6 +680,8 @@
         mProvider = mDeps.getNetworkProvider(context, mHandlerThread.getLooper());
         mBlanketOffer = new BlanketReservationOffer();
         mClientOffer = new ClientOffer();
+        mBluetoothManager = context.getSystemService(BluetoothManager.class);
+        mIsSupported = mContext.getPackageManager().hasSystemFeature(FEATURE_BLUETOOTH_LE);
     }
 
     /**
@@ -689,17 +690,19 @@
      * Called on CS Handler thread.
      */
     public void start() {
+        if (!mIsSupported) {
+            // In order to make mHandler final, the HandlerThread needs to be started before
+            // HandlerThread.getLooper() is called during the construction of the Handler.
+            mHandlerThread.quitSafely();
+            try {
+                mHandlerThread.join();
+            } catch (InterruptedException e) {
+                // join() interrupted. Do nothing.
+            }
+            return;
+        }
+
         mHandler.post(() -> {
-            final PackageManager pm = mContext.getPackageManager();
-            if (!pm.hasSystemFeature(FEATURE_BLUETOOTH_LE)) {
-                return;
-            }
-            mBluetoothManager = mContext.getSystemService(BluetoothManager.class);
-            if (mBluetoothManager == null) {
-                // Can this ever happen?
-                Log.wtf(TAG, "BluetoothManager not found");
-                return;
-            }
             mContext.getSystemService(ConnectivityManager.class).registerNetworkProvider(mProvider);
             mProvider.registerNetworkOffer(BlanketReservationOffer.SCORE,
                     BlanketReservationOffer.CAPABILITIES, mHandler::post, mBlanketOffer);