Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 574b1e69 authored by Stanley Tng's avatar Stanley Tng Committed by Tyler Freeman
Browse files

DO NOT MERGE ANYWHERE Allow the Bluetooth MAC address to be updated asynchronously (2/3)

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

Merged-In: I09720193e38fdf9139e1bb146f8e1847e2b65b1a
(cherry picked from commit 723ee54c)

Change-Id: Ifae3adf6e2aad1f0811c03d3114d1bd0452e7c23
parent 2e05346f
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -447,6 +447,30 @@ public final class BluetoothAdapter {
    public static final String ACTION_BLE_STATE_CHANGED =
        "android.bluetooth.adapter.action.BLE_STATE_CHANGED";

    /**
     * Intent used to broadcast the change in the Bluetooth address
     * of the local Bluetooth adapter.
     * <p>Always contains the extra field {@link
     * #EXTRA_BLUETOOTH_ADDRESS} containing the Bluetooth address.
     *
     * Note: only system level processes are allowed to send this
     * defined broadcast.
     *
     * @hide
     */
    public static final String ACTION_BLUETOOTH_ADDRESS_CHANGED =
        "android.bluetooth.adapter.action.BLUETOOTH_ADDRESS_CHANGED";

    /**
     * Used as a String extra field in {@link
     * #ACTION_BLUETOOTH_ADDRESS_CHANGED} intent to store the local
     * Bluetooth address.
     *
     * @hide
     */
    public static final String EXTRA_BLUETOOTH_ADDRESS =
          "android.bluetooth.adapter.extra.BLUETOOTH_ADDRESS";

    /**
     * Broadcast Action: The notifys Bluetooth ACL connected event. This will be
     * by BLE Always on enabled application to know the ACL_CONNECTED event
+11 −0
Original line number Diff line number Diff line
@@ -187,6 +187,14 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
                if (newName != null) {
                    storeNameAndAddress(newName, null);
                }
            } else if (BluetoothAdapter.ACTION_BLUETOOTH_ADDRESS_CHANGED.equals(action)) {
                String newAddress = intent.getStringExtra(BluetoothAdapter.EXTRA_BLUETOOTH_ADDRESS);
                if (newAddress != null) {
                    if (DBG) Slog.d(TAG, "Bluetooth Adapter address changed to " + newAddress);
                    storeNameAndAddress(null, newAddress);
                } else {
                    if (DBG) Slog.e(TAG, "No Bluetooth Adapter address parameter found");
                }
            } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
                synchronized(mReceiver) {
                    if (isBluetoothPersistedStateOn()) {
@@ -275,6 +283,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
        registerForAirplaneMode(filter);
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        mContext.registerReceiver(mReceiver, filter);
        filter = new IntentFilter(BluetoothAdapter.ACTION_BLUETOOTH_ADDRESS_CHANGED);
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        mContext.registerReceiver(mReceiver, filter);
        loadStoredNameAndAddress();
        if (isBluetoothPersistedStateOn()) {
            if (DBG) Slog.d(TAG, "Startup: Bluetooth persisted state is ON.");