Merge "A2DP: Prevent NPE in getDevicesMatchingConnectionStates()"
diff --git a/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachine.java b/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachine.java
index d949952..7a5de62 100644
--- a/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachine.java
+++ b/src/com/android/bluetooth/a2dpsink/A2dpSinkStateMachine.java
@@ -622,10 +622,20 @@
             switch (state) {
                 case AUDIO_STATE_STARTED:
                     mStreaming.obtainMessage(A2dpSinkStreamHandler.SRC_STR_START).sendToTarget();
+                    if (mPlayingDevice == null) {
+                        mPlayingDevice = device;
+                        broadcastAudioState(device, BluetoothA2dpSink.STATE_NOT_PLAYING,
+                                BluetoothA2dpSink.STATE_PLAYING);
+                    }
                     break;
                 case AUDIO_STATE_REMOTE_SUSPEND:
                 case AUDIO_STATE_STOPPED:
                     mStreaming.obtainMessage(A2dpSinkStreamHandler.SRC_STR_STOP).sendToTarget();
+                    if (mPlayingDevice != null) {
+                        broadcastAudioState(device, BluetoothA2dpSink.STATE_PLAYING,
+                                BluetoothA2dpSink.STATE_NOT_PLAYING);
+                        mPlayingDevice = null;
+                    }
                     break;
                 default:
                     loge("Audio State Device: " + device + " bad state: " + state);
diff --git a/src/com/android/bluetooth/btservice/Config.java b/src/com/android/bluetooth/btservice/Config.java
index ae65863..db79486 100644
--- a/src/com/android/bluetooth/btservice/Config.java
+++ b/src/com/android/bluetooth/btservice/Config.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.provider.Settings;
+import android.util.FeatureFlagUtils;
 import android.util.Log;
 
 import com.android.bluetooth.R;
@@ -117,6 +118,13 @@
         ArrayList<Class> profiles = new ArrayList<>(PROFILE_SERVICES_AND_FLAGS.length);
         for (ProfileConfig config : PROFILE_SERVICES_AND_FLAGS) {
             boolean supported = resources.getBoolean(config.mSupported);
+
+            if (supported && (config.mClass == HearingAidService.class) && !FeatureFlagUtils
+                                .isEnabled(ctx, FeatureFlagUtils.HEARING_AID_SETTINGS)) {
+                Log.v(TAG, "Feature Flag disables support for HearingAidService");
+                supported = false;
+            }
+
             if (supported && !isProfileDisabled(ctx, config.mMask)) {
                 Log.v(TAG, "Adding " + config.mClass.getSimpleName());
                 profiles.add(config.mClass);
diff --git a/src/com/android/bluetooth/gatt/GattService.java b/src/com/android/bluetooth/gatt/GattService.java
index fd8551a..25c30d0 100644
--- a/src/com/android/bluetooth/gatt/GattService.java
+++ b/src/com/android/bluetooth/gatt/GattService.java
@@ -2457,7 +2457,7 @@
         int latency;
 
         // Link supervision timeout is measured in N * 10ms
-        int timeout = 2000; // 20s
+        int timeout = 500; // 5s
 
         switch (connectionPriority) {
             case BluetoothGatt.CONNECTION_PRIORITY_HIGH:
diff --git a/src/com/android/bluetooth/sap/SapService.java b/src/com/android/bluetooth/sap/SapService.java
index 66e0b19..00eeca7 100644
--- a/src/com/android/bluetooth/sap/SapService.java
+++ b/src/com/android/bluetooth/sap/SapService.java
@@ -539,7 +539,7 @@
     public boolean disconnect(BluetoothDevice device) {
         boolean result = false;
         synchronized (SapService.this) {
-            if (getRemoteDevice().equals(device)) {
+            if (mRemoteDevice != null && mRemoteDevice.equals(device)) {
                 switch (mState) {
                     case BluetoothSap.STATE_CONNECTED:
                         closeConnectionSocket();
diff --git a/tests/robotests/Android.mk b/tests/robotests/Android.mk
index 47fbc4a..73f7706 100644
--- a/tests/robotests/Android.mk
+++ b/tests/robotests/Android.mk
@@ -12,7 +12,7 @@
 
 LOCAL_JAVA_LIBRARIES := \
     junit \
-    platform-robolectric-3.6.1-prebuilt
+    platform-robolectric-3.6.2-prebuilt
 
 LOCAL_INSTRUMENTATION_FOR := Bluetooth
 LOCAL_MODULE := BluetoothRoboTests
@@ -37,4 +37,4 @@
 
 LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../src
 
-include prebuilts/misc/common/robolectric/3.6.1/run_robotests.mk
+include prebuilts/misc/common/robolectric/3.6.2/run_robotests.mk