diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index fa3df1da59351..fd605604a8f12 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -1032,6 +1032,18 @@ public final class BluetoothDevice implements Parcelable { return mAddress; } + /** + * Returns the anonymized hardware address of this BluetoothDevice. The first three octets + * will be suppressed for anonymization. + *
For example, "XX:XX:XX:AA:BB:CC". + * + * @return Anonymized bluetooth hardware address as string + * @hide + */ + public String getAnonymizedAddress() { + return "XX:XX:XX" + getAddress().substring(8); + } + /** * Get the friendly Bluetooth name of the remote device. * diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java index b4c41b274dbe4..5e8f1ef0db855 100644 --- a/services/core/java/com/android/server/audio/BtHelper.java +++ b/services/core/java/com/android/server/audio/BtHelper.java @@ -632,21 +632,28 @@ public class BtHelper { return result; } + // Return `(null)` if given BluetoothDevice is null. Otherwise, return the anonymized address. + private String getAnonymizedAddress(BluetoothDevice btDevice) { + return btDevice == null ? "(null)" : btDevice.getAnonymizedAddress(); + } + // @GuardedBy("AudioDeviceBroker.mSetModeLock") //@GuardedBy("AudioDeviceBroker.mDeviceStateLock") @GuardedBy("BtHelper.this") private void setBtScoActiveDevice(BluetoothDevice btDevice) { - Log.i(TAG, "setBtScoActiveDevice: " + mBluetoothHeadsetDevice + " -> " + btDevice); + Log.i(TAG, "setBtScoActiveDevice: " + getAnonymizedAddress(mBluetoothHeadsetDevice) + + " -> " + getAnonymizedAddress(btDevice)); final BluetoothDevice previousActiveDevice = mBluetoothHeadsetDevice; if (Objects.equals(btDevice, previousActiveDevice)) { return; } if (!handleBtScoActiveDeviceChange(previousActiveDevice, false)) { Log.w(TAG, "setBtScoActiveDevice() failed to remove previous device " - + previousActiveDevice); + + getAnonymizedAddress(previousActiveDevice)); } if (!handleBtScoActiveDeviceChange(btDevice, true)) { - Log.e(TAG, "setBtScoActiveDevice() failed to add new device " + btDevice); + Log.e(TAG, "setBtScoActiveDevice() failed to add new device " + + getAnonymizedAddress(btDevice)); // set mBluetoothHeadsetDevice to null when failing to add new device btDevice = null; } @@ -826,7 +833,8 @@ public class BtHelper { mBluetoothHeadsetDevice, mScoAudioMode)) { mScoAudioState = SCO_STATE_ACTIVE_INTERNAL; } else { - Log.w(TAG, "requestScoState: connect to " + mBluetoothHeadsetDevice + Log.w(TAG, "requestScoState: connect to " + + getAnonymizedAddress(mBluetoothHeadsetDevice) + " failed, mScoAudioMode=" + mScoAudioMode); broadcastScoConnectionState( AudioManager.SCO_AUDIO_STATE_DISCONNECTED);