Broadcast UUIDS on BT state transition to ON

Use case: Phone and media connection is not happening
after BT reset during swapping between the HeadSet.

Precondition:
1. WIFI should be on and connected with AP.

Steps:
1. Pair and connect from DUT to PLT legend device.
2. Make an Mobile originated (MO) call.
3. Pair and connect from DUT to sony carkit.
4. Swap connection between PLT legend and sony carkit.
5. During swapping turn OFF BT from DUT.
6. Turn ON DUT and wait for auto connection from DUT.
7. Repeat step from 4-6 10 times.

Failure: Failed to connect with HS.

Root cause: Broadcarst UUIDS on receiving the on event
from lower layers even though the state is not
transitioned to ON.

Fix: Broadcast UUIDS on BT state is transitioned to ON
to avoid timing issues related UUIDS.

Change-Id: Ibdbaecd60cf36c599700b1ca353481b8149efa90
diff --git a/src/com/android/bluetooth/btservice/AdapterService.java b/src/com/android/bluetooth/btservice/AdapterService.java
index cb2a5cc..3ff2980 100644
--- a/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/src/com/android/bluetooth/btservice/AdapterService.java
@@ -1527,6 +1527,16 @@
          }
     }
 
+    public void updateUuids() {
+        debugLog( "updateUuids() - Updating UUIDs for bonded devices");
+        BluetoothDevice[] bondedDevices = getBondedDevices();
+        if (bondedDevices == null) return;
+
+        for (BluetoothDevice device : bondedDevices) {
+            mRemoteDevices.updateUuids(device);
+        }
+    }
+
      private void autoConnectHeadset(){
         HeadsetService  hsService = HeadsetService.getHeadsetService();
 
diff --git a/src/com/android/bluetooth/btservice/AdapterState.java b/src/com/android/bluetooth/btservice/AdapterState.java
index 6bfdf9e..8e4790f 100644
--- a/src/com/android/bluetooth/btservice/AdapterState.java
+++ b/src/com/android/bluetooth/btservice/AdapterState.java
@@ -232,6 +232,7 @@
                 errorLog("Entered OnState after cleanup");
                 return;
             }
+            adapterService.updateUuids();
             adapterService.autoConnect();
         }
 
diff --git a/src/com/android/bluetooth/btservice/RemoteDevices.java b/src/com/android/bluetooth/btservice/RemoteDevices.java
index d583398..3ae2455 100644
--- a/src/com/android/bluetooth/btservice/RemoteDevices.java
+++ b/src/com/android/bluetooth/btservice/RemoteDevices.java
@@ -282,7 +282,8 @@
                         case AbstractionLayer.BT_PROPERTY_UUIDS:
                             int numUuids = val.length/AbstractionLayer.BT_UUID_SIZE;
                             device.mUuids = Utils.byteArrayToUuid(val);
-                            sendUuidIntent(bdDevice);
+                            if (mAdapterService.getState() == BluetoothAdapter.STATE_ON)
+                                sendUuidIntent(bdDevice);
                             break;
                         case AbstractionLayer.BT_PROPERTY_TYPE_OF_DEVICE:
                             // The device type from hal layer, defined in bluetooth.h,
@@ -364,7 +365,6 @@
     }
 
 
-
     void fetchUuids(BluetoothDevice device) {
         if (mSdpTracker.contains(device)) return;
         mSdpTracker.add(device);
@@ -376,6 +376,12 @@
         mAdapterService.getRemoteServicesNative(Utils.getBytesFromAddress(device.getAddress()));
     }
 
+    void updateUuids(BluetoothDevice device) {
+        Message message = mHandler.obtainMessage(MESSAGE_UUID_INTENT);
+        message.obj = device;
+        mHandler.sendMessage(message);
+    }
+
     private final Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {