BluetoothManager: Continue when BLE not supported

Bluetooth should turn on completely (without GATT) when the chip
does not support Bluetooth Low Energy.

Bug: 77495521
Test: Remove vendor/etc/permissions/android.hardware.bluetooth_le.xml
      Reboot
      Toggle Bluetooth
Change-Id: I9314ee473b4a5a158196bab3037b1452247ba466
(cherry picked from commit 5123ebd75647d3e67487de69cd0381f325a0adc9)
This commit is contained in:
Myles Watson
2018-05-11 08:47:24 -07:00
parent bef42cd87f
commit 304ebf2784

View File

@@ -757,26 +757,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
/**
* Action taken when GattService is turned on
* Call IBluetooth.onLeServiceUp() to continue if Bluetooth should be on.
*/
private void onBluetoothGattServiceUp() {
private void continueFromBleOnState() {
if (DBG) {
Slog.d(TAG, "BluetoothGatt Service is Up");
Slog.d(TAG, "continueFromBleOnState()");
}
try {
mBluetoothLock.readLock().lock();
if (mBluetooth == null) {
if (DBG) {
Slog.w(TAG, "onBluetoothServiceUp: mBluetooth is null!");
}
return;
}
int st = mBluetooth.getState();
if (st != BluetoothAdapter.STATE_BLE_ON) {
if (DBG) {
Slog.v(TAG, "onBluetoothServiceUp: state isn't BLE_ON: "
+ BluetoothAdapter.nameForState(st));
}
Slog.e(TAG, "onBluetoothServiceUp: mBluetooth is null!");
return;
}
if (isBluetoothPersistedStateOnBluetooth() || !isBleAppPresent()) {
@@ -1632,7 +1622,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
if (msg.arg1 == SERVICE_IBLUETOOTHGATT) {
mBluetoothGatt =
IBluetoothGatt.Stub.asInterface(Binder.allowBlocking(service));
onBluetoothGattServiceUp();
continueFromBleOnState();
break;
} // else must be SERVICE_IBLUETOOTH
@@ -2049,21 +2039,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
if (DBG) {
Slog.d(TAG, "Bluetooth is in LE only mode");
}
if (mBluetoothGatt != null) {
if (DBG) {
Slog.d(TAG, "Calling BluetoothGattServiceUp");
}
onBluetoothGattServiceUp();
if (mBluetoothGatt != null || !mContext.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
continueFromBleOnState();
} else {
if (DBG) {
Slog.d(TAG, "Binding Bluetooth GATT service");
}
if (mContext.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Intent i = new Intent(IBluetoothGatt.class.getName());
doBind(i, mConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT,
UserHandle.CURRENT);
}
Intent i = new Intent(IBluetoothGatt.class.getName());
doBind(i, mConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT,
UserHandle.CURRENT);
}
sendBleStateChanged(prevState, newState);
//Don't broadcase this as std intent