Allow for automatic routing on HF AG to be disabled.

Bug: 25485578
Change-Id: Iefe06f9df811311040f154ddf8f578893b275ef4
diff --git a/src/com/android/bluetooth/hfp/HeadsetService.java b/src/com/android/bluetooth/hfp/HeadsetService.java
index f6153cb..cda51fc 100755
--- a/src/com/android/bluetooth/hfp/HeadsetService.java
+++ b/src/com/android/bluetooth/hfp/HeadsetService.java
@@ -243,6 +243,21 @@
             return service.disconnectAudio();
         }
 
+        public void setAudioRouteAllowed(boolean allowed) {
+            HeadsetService service = getService();
+            if (service == null) return;
+            service.setAudioRouteAllowed(allowed);
+        }
+
+        public boolean getAudioRouteAllowed() {
+            HeadsetService service = getService();
+            if (service != null) {
+                return service.getAudioRouteAllowed();
+            }
+
+            return false;
+        }
+
         public boolean startScoUsingVirtualVoiceCall(BluetoothDevice device) {
             HeadsetService service = getService();
             if (service == null) return false;
@@ -448,6 +463,14 @@
         return mStateMachine.getAudioState(device);
     }
 
+    public void setAudioRouteAllowed(boolean allowed) {
+        mStateMachine.setAudioRouteAllowed(allowed);
+    }
+
+    public boolean getAudioRouteAllowed() {
+        return mStateMachine.getAudioRouteAllowed();
+    }
+
     boolean connectAudio() {
         // TODO(BT) BLUETOOTH or BLUETOOTH_ADMIN permission
         enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
diff --git a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
index 0cf5f33..fc55bae 100644
--- a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
+++ b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
@@ -162,6 +162,9 @@
     private IBluetoothHeadsetPhone mPhoneProxy;
     private boolean mNativeAvailable;
 
+    // Indicates whether audio can be routed to the device.
+    private boolean mAudioRouteAllowed = true;
+
     // mCurrentDevice is the device connected before the state changes
     // mTargetDevice is the device to be connected
     // mIncomingDevice is the device connecting to us, valid only in Pending state
@@ -2153,6 +2156,14 @@
         return false;
     }
 
+    public void setAudioRouteAllowed(boolean allowed) {
+        mAudioRouteAllowed = allowed;
+    }
+
+    public boolean getAudioRouteAllowed() {
+        return mAudioRouteAllowed;
+    }
+
     int getAudioState(BluetoothDevice device) {
         synchronized(this) {
             if (mConnectedDevicesList.size() == 0) {
@@ -3292,7 +3303,7 @@
     // Accept incoming SCO only when there is active call, VR activated,
     // active VOIP call
     private boolean isScoAcceptable() {
-        return (mVoiceRecognitionStarted || isInCall());
+        return mAudioRouteAllowed && (mVoiceRecognitionStarted || isInCall());
     }
 
     boolean isConnected() {