Loading src/com/android/bluetooth/btservice/AdapterService.java +16 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProtoEnums; import android.bluetooth.IBluetooth; import android.bluetooth.IBluetoothCallback; import android.bluetooth.IBluetoothMetadataListener; Loading Loading @@ -2178,6 +2179,11 @@ public class AdapterService extends Service { return false; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_PIN_REPLIED, accept ? 0 : BluetoothDevice.UNBOND_REASON_AUTH_REJECTED); byte[] addr = Utils.getBytesFromAddress(device.getAddress()); return pinReplyNative(addr, accept, len, pinCode); } Loading @@ -2189,6 +2195,11 @@ public class AdapterService extends Service { return false; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_SSP_REPLIED, accept ? 0 : BluetoothDevice.UNBOND_REASON_AUTH_REJECTED); byte[] addr = Utils.getBytesFromAddress(device.getAddress()); return sspReplyNative(addr, AbstractionLayer.BT_SSP_VARIANT_PASSKEY_ENTRY, accept, Utils.byteArrayToInt(passkey)); Loading @@ -2202,6 +2213,11 @@ public class AdapterService extends Service { return false; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_SSP_REPLIED, accept ? 0 : BluetoothDevice.UNBOND_REASON_AUTH_REJECTED); byte[] addr = Utils.getBytesFromAddress(device.getAddress()); return sspReplyNative(addr, AbstractionLayer.BT_SSP_VARIANT_PASSKEY_CONFIRMATION, accept, 0); Loading src/com/android/bluetooth/btservice/BondStateMachine.java +35 −2 Original line number Diff line number Diff line Loading @@ -20,11 +20,13 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProtoEnums; import android.bluetooth.OobData; import android.content.Intent; import android.os.Message; import android.os.UserHandle; import android.util.Log; import android.util.StatsLog; import com.android.bluetooth.Utils; import com.android.bluetooth.a2dp.A2dpService; Loading @@ -38,6 +40,7 @@ import com.android.internal.util.State; import com.android.internal.util.StateMachine; import java.util.ArrayList; import java.util.Objects; /** * This state machine handles Bluetooth Adapter State. Loading Loading @@ -194,6 +197,11 @@ final class BondStateMachine extends StateMachine { case BONDING_STATE_CHANGE: int newState = msg.arg1; int reason = getUnbondReasonFromHALCode(msg.arg2); // Bond is explicitly removed if we are in pending command state if (newState == BluetoothDevice.BOND_NONE && reason == BluetoothDevice.BOND_SUCCESS) { reason = BluetoothDevice.UNBOND_REASON_REMOVED; } sendIntent(dev, newState, reason); if (newState != BluetoothDevice.BOND_BONDING) { /* this is either none/bonded, remove and transition */ Loading Loading @@ -305,8 +313,18 @@ final class BondStateMachine extends StateMachine { } else { result = mAdapterService.createBondNative(addr, transport); } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(dev), transport, dev.getType(), BluetoothDevice.BOND_BONDING, oobData == null ? BluetoothProtoEnums.BOND_SUB_STATE_UNKNOWN : BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_OOB_DATA_PROVIDED, BluetoothProtoEnums.UNBOND_REASON_UNKNOWN); if (!result) { StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(dev), transport, dev.getType(), BluetoothDevice.BOND_NONE, BluetoothProtoEnums.BOND_SUB_STATE_UNKNOWN, BluetoothDevice.UNBOND_REASON_REPEATED_ATTEMPTS); // Using UNBOND_REASON_REMOVED for legacy reason sendIntent(dev, BluetoothDevice.BOND_NONE, BluetoothDevice.UNBOND_REASON_REMOVED); return false; } else if (transition) { Loading Loading @@ -339,6 +357,9 @@ final class BondStateMachine extends StateMachine { if (oldState == newState) { return; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(device), 0, device.getType(), newState, BluetoothProtoEnums.BOND_SUB_STATE_UNKNOWN, reason); mAdapterProperties.onBondStateChanged(device, newState); Intent intent = new Intent(BluetoothDevice.ACTION_BOND_STATE_CHANGED); Loading Loading @@ -419,9 +440,14 @@ final class BondStateMachine extends StateMachine { if (device == null) { warnLog("Device is not known for:" + Utils.getAddressStringFromByte(address)); mRemoteDevices.addDeviceProperties(address); device = mRemoteDevices.getDevice(address); device = Objects.requireNonNull(mRemoteDevices.getDevice(address)); } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_SSP_REQUESTED, 0); Message msg = obtainMessage(SSP_REQUEST); msg.obj = device; if (displayPasskey) { Loading @@ -437,7 +463,14 @@ final class BondStateMachine extends StateMachine { BluetoothDevice bdDevice = mRemoteDevices.getDevice(address); if (bdDevice == null) { mRemoteDevices.addDeviceProperties(address); bdDevice = Objects.requireNonNull(mRemoteDevices.getDevice(address)); } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(bdDevice), 0, bdDevice.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_PIN_REQUESTED, 0); infoLog("pinRequestCallback: " + address + " name:" + name + " cod:" + cod); Message msg = obtainMessage(PIN_REQUEST); Loading Loading
src/com/android/bluetooth/btservice/AdapterService.java +16 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProtoEnums; import android.bluetooth.IBluetooth; import android.bluetooth.IBluetoothCallback; import android.bluetooth.IBluetoothMetadataListener; Loading Loading @@ -2178,6 +2179,11 @@ public class AdapterService extends Service { return false; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_PIN_REPLIED, accept ? 0 : BluetoothDevice.UNBOND_REASON_AUTH_REJECTED); byte[] addr = Utils.getBytesFromAddress(device.getAddress()); return pinReplyNative(addr, accept, len, pinCode); } Loading @@ -2189,6 +2195,11 @@ public class AdapterService extends Service { return false; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_SSP_REPLIED, accept ? 0 : BluetoothDevice.UNBOND_REASON_AUTH_REJECTED); byte[] addr = Utils.getBytesFromAddress(device.getAddress()); return sspReplyNative(addr, AbstractionLayer.BT_SSP_VARIANT_PASSKEY_ENTRY, accept, Utils.byteArrayToInt(passkey)); Loading @@ -2202,6 +2213,11 @@ public class AdapterService extends Service { return false; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_SSP_REPLIED, accept ? 0 : BluetoothDevice.UNBOND_REASON_AUTH_REJECTED); byte[] addr = Utils.getBytesFromAddress(device.getAddress()); return sspReplyNative(addr, AbstractionLayer.BT_SSP_VARIANT_PASSKEY_CONFIRMATION, accept, 0); Loading
src/com/android/bluetooth/btservice/BondStateMachine.java +35 −2 Original line number Diff line number Diff line Loading @@ -20,11 +20,13 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProtoEnums; import android.bluetooth.OobData; import android.content.Intent; import android.os.Message; import android.os.UserHandle; import android.util.Log; import android.util.StatsLog; import com.android.bluetooth.Utils; import com.android.bluetooth.a2dp.A2dpService; Loading @@ -38,6 +40,7 @@ import com.android.internal.util.State; import com.android.internal.util.StateMachine; import java.util.ArrayList; import java.util.Objects; /** * This state machine handles Bluetooth Adapter State. Loading Loading @@ -194,6 +197,11 @@ final class BondStateMachine extends StateMachine { case BONDING_STATE_CHANGE: int newState = msg.arg1; int reason = getUnbondReasonFromHALCode(msg.arg2); // Bond is explicitly removed if we are in pending command state if (newState == BluetoothDevice.BOND_NONE && reason == BluetoothDevice.BOND_SUCCESS) { reason = BluetoothDevice.UNBOND_REASON_REMOVED; } sendIntent(dev, newState, reason); if (newState != BluetoothDevice.BOND_BONDING) { /* this is either none/bonded, remove and transition */ Loading Loading @@ -305,8 +313,18 @@ final class BondStateMachine extends StateMachine { } else { result = mAdapterService.createBondNative(addr, transport); } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(dev), transport, dev.getType(), BluetoothDevice.BOND_BONDING, oobData == null ? BluetoothProtoEnums.BOND_SUB_STATE_UNKNOWN : BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_OOB_DATA_PROVIDED, BluetoothProtoEnums.UNBOND_REASON_UNKNOWN); if (!result) { StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(dev), transport, dev.getType(), BluetoothDevice.BOND_NONE, BluetoothProtoEnums.BOND_SUB_STATE_UNKNOWN, BluetoothDevice.UNBOND_REASON_REPEATED_ATTEMPTS); // Using UNBOND_REASON_REMOVED for legacy reason sendIntent(dev, BluetoothDevice.BOND_NONE, BluetoothDevice.UNBOND_REASON_REMOVED); return false; } else if (transition) { Loading Loading @@ -339,6 +357,9 @@ final class BondStateMachine extends StateMachine { if (oldState == newState) { return; } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(device), 0, device.getType(), newState, BluetoothProtoEnums.BOND_SUB_STATE_UNKNOWN, reason); mAdapterProperties.onBondStateChanged(device, newState); Intent intent = new Intent(BluetoothDevice.ACTION_BOND_STATE_CHANGED); Loading Loading @@ -419,9 +440,14 @@ final class BondStateMachine extends StateMachine { if (device == null) { warnLog("Device is not known for:" + Utils.getAddressStringFromByte(address)); mRemoteDevices.addDeviceProperties(address); device = mRemoteDevices.getDevice(address); device = Objects.requireNonNull(mRemoteDevices.getDevice(address)); } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(device), 0, device.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_SSP_REQUESTED, 0); Message msg = obtainMessage(SSP_REQUEST); msg.obj = device; if (displayPasskey) { Loading @@ -437,7 +463,14 @@ final class BondStateMachine extends StateMachine { BluetoothDevice bdDevice = mRemoteDevices.getDevice(address); if (bdDevice == null) { mRemoteDevices.addDeviceProperties(address); bdDevice = Objects.requireNonNull(mRemoteDevices.getDevice(address)); } StatsLog.write(StatsLog.BLUETOOTH_BOND_STATE_CHANGED, mAdapterService.obfuscateAddress(bdDevice), 0, bdDevice.getType(), BluetoothDevice.BOND_BONDING, BluetoothProtoEnums.BOND_SUB_STATE_LOCAL_PIN_REQUESTED, 0); infoLog("pinRequestCallback: " + address + " name:" + name + " cod:" + cod); Message msg = obtainMessage(PIN_REQUEST); Loading