summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryce Lee <brycelee@google.com>2015-10-29 07:15:39 +0000
committerandroid-build-merger <android-build-merger@google.com>2015-10-29 07:15:39 +0000
commitc3da0f7bb39fc5d234a360bc6a1dd6c1d8382ee2 (patch)
tree7c19b3646af70b938c7bcb445b11c711589064ad
parent4af80a65ffe6570bdd9d86dd5b3a6e7e66211ff1 (diff)
parent22bb39444356637fbcabd4acf04f2fdb9e3da177 (diff)
downloadandroid_packages_apps_Bluetooth-c3da0f7bb39fc5d234a360bc6a1dd6c1d8382ee2.tar.gz
android_packages_apps_Bluetooth-c3da0f7bb39fc5d234a360bc6a1dd6c1d8382ee2.tar.bz2
android_packages_apps_Bluetooth-c3da0f7bb39fc5d234a360bc6a1dd6c1d8382ee2.zip
Implement setting/getting whether audio can be routed to the HFP HF device.
am: 22bb394443 * commit '22bb39444356637fbcabd4acf04f2fdb9e3da177': Implement setting/getting whether audio can be routed to the HFP HF device.
-rw-r--r--res/values/config.xml2
-rw-r--r--src/com/android/bluetooth/hfpclient/HeadsetClientService.java26
-rw-r--r--src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java20
3 files changed, 48 insertions, 0 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 79fe9ce62..42ab4b98a 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -41,4 +41,6 @@
<integer name="gatt_high_priority_max_interval">12</integer>
<integer name="gatt_low_power_min_interval">80</integer>
<integer name="gatt_low_power_max_interval">100</integer>
+
+ <bool name="headset_client_initial_audio_route_allowed">true</bool>
</resources>
diff --git a/src/com/android/bluetooth/hfpclient/HeadsetClientService.java b/src/com/android/bluetooth/hfpclient/HeadsetClientService.java
index d7eb12d91..b0e026bf9 100644
--- a/src/com/android/bluetooth/hfpclient/HeadsetClientService.java
+++ b/src/com/android/bluetooth/hfpclient/HeadsetClientService.java
@@ -253,6 +253,24 @@ public class HeadsetClientService extends ProfileService {
}
@Override
+ public void setAudioRouteAllowed(boolean allowed) {
+ HeadsetClientService service = getService();
+ if (service != null) {
+ service.setAudioRouteAllowed(allowed);
+ }
+ }
+
+ @Override
+ public boolean getAudioRouteAllowed() {
+ HeadsetClientService service = getService();
+ if (service != null) {
+ return service.getAudioRouteAllowed();
+ }
+
+ return false;
+ }
+
+ @Override
public boolean connectAudio() {
HeadsetClientService service = getService();
if (service == null) {
@@ -543,6 +561,14 @@ public class HeadsetClientService extends ProfileService {
return mStateMachine.getAudioState(device);
}
+ public void setAudioRouteAllowed(boolean allowed) {
+ mStateMachine.setAudioRouteAllowed(allowed);
+ }
+
+ public boolean getAudioRouteAllowed() {
+ return mStateMachine.getAudioRouteAllowed();
+ }
+
boolean connectAudio() {
enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission");
if (!mStateMachine.isConnected()) {
diff --git a/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java b/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java
index f9cadabe9..9ae7ba3c8 100644
--- a/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java
+++ b/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java
@@ -68,6 +68,8 @@ import java.util.List;
import java.util.Queue;
import java.util.Set;
+import com.android.bluetooth.R;
+
final class HeadsetClientStateMachine extends StateMachine {
private static final String TAG = "HeadsetClientStateMachine";
private static final boolean DBG = false;
@@ -142,6 +144,8 @@ final class HeadsetClientStateMachine extends StateMachine {
private final AudioManager mAudioManager;
private int mAudioState;
+ // Indicates whether audio can be routed to the device.
+ private boolean mAudioRouteAllowed;
private boolean mAudioWbs;
private final BluetoothAdapter mAdapter;
private boolean mNativeAvailable;
@@ -1210,6 +1214,9 @@ final class HeadsetClientStateMachine extends StateMachine {
mAudioState = BluetoothHeadsetClient.STATE_AUDIO_DISCONNECTED;
mAudioWbs = false;
+ mAudioRouteAllowed = context.getResources().getBoolean(
+ R.bool.headset_client_initial_audio_route_allowed);
+
mIndicatorNetworkState = HeadsetClientHalConstants.NETWORK_STATE_NOT_AVAILABLE;
mIndicatorNetworkType = HeadsetClientHalConstants.SERVICE_TYPE_HOME;
mIndicatorNetworkSignal = 0;
@@ -2016,6 +2023,11 @@ final class HeadsetClientStateMachine extends StateMachine {
mAudioWbs = true;
// fall through
case HeadsetClientHalConstants.AUDIO_STATE_CONNECTED:
+ if (!mAudioRouteAllowed) {
+ sendMessage(HeadsetClientStateMachine.DISCONNECT_AUDIO);
+ break;
+ }
+
mAudioState = BluetoothHeadsetClient.STATE_AUDIO_CONNECTED;
// request audio focus for call
int newAudioMode = AudioManager.MODE_IN_CALL;
@@ -2365,6 +2377,14 @@ final class HeadsetClientStateMachine extends StateMachine {
return (getCurrentState() == mAudioOn);
}
+ public void setAudioRouteAllowed(boolean allowed) {
+ mAudioRouteAllowed = allowed;
+ }
+
+ public boolean getAudioRouteAllowed() {
+ return mAudioRouteAllowed;
+ }
+
synchronized int getAudioState(BluetoothDevice device) {
if (mCurrentDevice == null || !mCurrentDevice.equals(device)) {
return BluetoothHeadsetClient.STATE_AUDIO_DISCONNECTED;