OSDN Git Service

Allow the Bluetooth MAC address to be updated asynchronously (1/3)
authorStanley Tng <stng@google.com>
Tue, 18 Apr 2017 05:33:21 +0000 (22:33 -0700)
committerAndre Eisenbach <eisenbach@google.com>
Fri, 21 Apr 2017 22:20:31 +0000 (22:20 +0000)
There are intermittent issues where either the returned Bluetooth
MAC address to Java framework is uninitialized or this address update
arrives too late. This fix will do 2 things:
(1) Returns error when MAC address is unavailable in the native code.
(2) Updates the MAC address later by adding a new broadcast event.

Test: Check address for these cases: factory reset, system reboot, and
Bluetooth re-enable.
Bug: 36709382

Change-Id: I6b71100c2c03c6f365f0dbc27d4e37c734145e30
(cherry picked from commit 6d5da5e7ffb69614706ca030bfe194a493b24e99)

src/com/android/bluetooth/btservice/AdapterProperties.java

index dbb5bb3..a38dbd3 100644 (file)
@@ -571,7 +571,13 @@ class AdapterProperties {
                         break;
                     case AbstractionLayer.BT_PROPERTY_BDADDR:
                         mAddress = val;
-                        debugLog("Address is:" + Utils.getAddressStringFromByte(mAddress));
+                        String address = Utils.getAddressStringFromByte(mAddress);
+                        debugLog("Address is:" + address);
+                        intent = new Intent(BluetoothAdapter.ACTION_BLUETOOTH_ADDRESS_CHANGED);
+                        intent.putExtra(BluetoothAdapter.EXTRA_BLUETOOTH_ADDRESS, address);
+                        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+                        mService.sendBroadcastAsUser(
+                                intent, UserHandle.ALL, mService.BLUETOOTH_PERM);
                         break;
                     case AbstractionLayer.BT_PROPERTY_CLASS_OF_DEVICE:
                         mBluetoothClass = Utils.byteArrayToInt(val, 0);