Revert "Join HandlerThread if BLE is not supported"
context.getSystemService() cannot be called until boot phase
PHASE_SYSTEM_SERVICES_READY. Given that L2capNetworkProvider is
initialized inside ConnectivityService's constructor, this will not
work.
This reverts commit 7a5ba567eaca2a2087092d9c2db5e68f63494cfb.
Test: TH
Change-Id: Ife30ce17d62eb408eea6d7625bd7e2f402963b0d
diff --git a/service/src/com/android/server/L2capNetworkProvider.java b/service/src/com/android/server/L2capNetworkProvider.java
index d0b0603..e3becd6 100644
--- a/service/src/com/android/server/L2capNetworkProvider.java
+++ b/service/src/com/android/server/L2capNetworkProvider.java
@@ -95,8 +95,9 @@
private final BlanketReservationOffer mBlanketOffer;
private final Set<ReservedServerOffer> mReservedServerOffers = new ArraySet<>();
private final ClientOffer mClientOffer;
- private final BluetoothManager mBluetoothManager;
- private final boolean mIsSupported;
+ // mBluetoothManager guaranteed non-null when read on handler thread after start() is called
+ @Nullable
+ private BluetoothManager mBluetoothManager;
// Note: IFNAMSIZ is 16.
private static final String TUN_IFNAME = "l2cap-tun";
@@ -680,8 +681,6 @@
mProvider = mDeps.getNetworkProvider(context, mHandlerThread.getLooper());
mBlanketOffer = new BlanketReservationOffer();
mClientOffer = new ClientOffer();
- mBluetoothManager = context.getSystemService(BluetoothManager.class);
- mIsSupported = mContext.getPackageManager().hasSystemFeature(FEATURE_BLUETOOTH_LE);
}
/**
@@ -690,19 +689,17 @@
* 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);