summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorBryce Lee <brycelee@google.com>2015-11-16 08:55:52 -0800
committerBryce Lee <brycelee@google.com>2015-11-16 08:55:52 -0800
commit0db53d90a028b138a68ebc5f7e30fe776e789b5d (patch)
treeceaa4cfcc9b21dca407cc892fce30d8db101314c /core
parente6538dcc06c2547ac8a58c265e6b586fc9652ef3 (diff)
downloadframeworks_base-0db53d90a028b138a68ebc5f7e30fe776e789b5d.zip
frameworks_base-0db53d90a028b138a68ebc5f7e30fe776e789b5d.tar.gz
frameworks_base-0db53d90a028b138a68ebc5f7e30fe776e789b5d.tar.bz2
Add Bluetooth headset API to allow disabling audio route.
This functionality is required by devices which have multiple profiles using the SCO channel. For example, a device that is both a HFP AG and HF. In this case, we must explicitly notify the profiles when they can acquire the channel as they are not aware of each other. A similar change was previously added to the Bluetooth Headset Client profile. Bug: 25485578 Change-Id: Ia60cfdd33c2c3c3f185464b24056f8ccb976056d
Diffstat (limited to 'core')
-rw-r--r--core/java/android/bluetooth/BluetoothHeadset.java42
-rwxr-xr-xcore/java/android/bluetooth/IBluetoothHeadset.aidl2
2 files changed, 44 insertions, 0 deletions
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 25d9aa9..09a15de 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -685,6 +685,48 @@ public final class BluetoothHeadset implements BluetoothProfile {
}
/**
+ * Sets whether audio routing is allowed. When set to {@code false}, the AG will not route any
+ * audio to the HF unless explicitly told to.
+ * This method should be used in cases where the SCO channel is shared between multiple profiles
+ * and must be delegated by a source knowledgeable
+ * Note: This is an internal function and shouldn't be exposed
+ *
+ * @param allowed {@code true} if the profile can reroute audio, {@code false} otherwise.
+ *
+ * @hide
+ */
+ public void setAudioRouteAllowed(boolean allowed) {
+ if (VDBG) log("setAudioRouteAllowed");
+ if (mService != null && isEnabled()) {
+ try {
+ mService.setAudioRouteAllowed(allowed);
+ } catch (RemoteException e) {Log.e(TAG, e.toString());}
+ } else {
+ Log.w(TAG, "Proxy not attached to service");
+ if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
+ }
+ }
+
+ /**
+ * Returns whether audio routing is allowed. see {@link #setAudioRouteAllowed(boolean)}.
+ * Note: This is an internal function and shouldn't be exposed
+ *
+ * @hide
+ */
+ public boolean getAudioRouteAllowed() {
+ if (VDBG) log("getAudioRouteAllowed");
+ if (mService != null && isEnabled()) {
+ try {
+ return mService.getAudioRouteAllowed();
+ } catch (RemoteException e) {Log.e(TAG, e.toString());}
+ } else {
+ Log.w(TAG, "Proxy not attached to service");
+ if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
+ }
+ return false;
+ }
+
+ /**
* Check if Bluetooth SCO audio is connected.
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
diff --git a/core/java/android/bluetooth/IBluetoothHeadset.aidl b/core/java/android/bluetooth/IBluetoothHeadset.aidl
index 0e23fad..0bb4088 100755
--- a/core/java/android/bluetooth/IBluetoothHeadset.aidl
+++ b/core/java/android/bluetooth/IBluetoothHeadset.aidl
@@ -50,6 +50,8 @@ interface IBluetoothHeadset {
boolean isAudioOn();
boolean connectAudio();
boolean disconnectAudio();
+ void setAudioRouteAllowed(boolean allowed);
+ boolean getAudioRouteAllowed();
boolean startScoUsingVirtualVoiceCall(in BluetoothDevice device);
boolean stopScoUsingVirtualVoiceCall(in BluetoothDevice device);
void phoneStateChanged(int numActive, int numHeld, int callState, String number, int type);