Loading android/app/src/com/android/bluetooth/hfp/HeadsetService.java +11 −1 Original line number Diff line number Diff line Loading @@ -252,10 +252,15 @@ public class HeadsetService extends ProfileService { if (service != null) { return service.getAudioRouteAllowed(); } return false; } public void setForceScoAudio(boolean forced) { HeadsetService service = getService(); if (service == null) return; service.setForceScoAudio(forced); } public boolean startScoUsingVirtualVoiceCall(BluetoothDevice device) { HeadsetService service = getService(); if (service == null) return false; Loading Loading @@ -469,6 +474,11 @@ public class HeadsetService extends ProfileService { return mStateMachine.getAudioRouteAllowed(); } public void setForceScoAudio(boolean forced) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); mStateMachine.setForceScoAudio(forced); } boolean connectAudio() { // TODO(BT) BLUETOOTH or BLUETOOTH_ADMIN permission enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); Loading android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java +8 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,9 @@ final class HeadsetStateMachine extends StateMachine { // Indicates whether audio can be routed to the device. private boolean mAudioRouteAllowed = true; // Indicates whether SCO audio needs to be forced to open regardless ANY OTHER restrictions private boolean mForceScoAudio = false; // Indicate whether service level connection has been established for this device private boolean mSlcConnected = false; Loading Loading @@ -2116,6 +2119,10 @@ final class HeadsetStateMachine extends StateMachine { return mAudioRouteAllowed; } public void setForceScoAudio(boolean forced) { mForceScoAudio = forced; } int getAudioState(BluetoothDevice device) { synchronized (this) { if (mConnectedDevicesList.size() == 0) { Loading Loading @@ -3274,6 +3281,7 @@ final class HeadsetStateMachine extends StateMachine { // Accept incoming SCO only when there is in-band ringing, incoming call, // active call, VR activated, active VOIP call private boolean isScoAcceptable() { if (mForceScoAudio) return true; return mAudioRouteAllowed && (mVoiceRecognitionStarted || isInCall() || (BluetoothHeadset.isInbandRingingSupported(mService) && isRinging())); Loading Loading
android/app/src/com/android/bluetooth/hfp/HeadsetService.java +11 −1 Original line number Diff line number Diff line Loading @@ -252,10 +252,15 @@ public class HeadsetService extends ProfileService { if (service != null) { return service.getAudioRouteAllowed(); } return false; } public void setForceScoAudio(boolean forced) { HeadsetService service = getService(); if (service == null) return; service.setForceScoAudio(forced); } public boolean startScoUsingVirtualVoiceCall(BluetoothDevice device) { HeadsetService service = getService(); if (service == null) return false; Loading Loading @@ -469,6 +474,11 @@ public class HeadsetService extends ProfileService { return mStateMachine.getAudioRouteAllowed(); } public void setForceScoAudio(boolean forced) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); mStateMachine.setForceScoAudio(forced); } boolean connectAudio() { // TODO(BT) BLUETOOTH or BLUETOOTH_ADMIN permission enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); Loading
android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java +8 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,9 @@ final class HeadsetStateMachine extends StateMachine { // Indicates whether audio can be routed to the device. private boolean mAudioRouteAllowed = true; // Indicates whether SCO audio needs to be forced to open regardless ANY OTHER restrictions private boolean mForceScoAudio = false; // Indicate whether service level connection has been established for this device private boolean mSlcConnected = false; Loading Loading @@ -2116,6 +2119,10 @@ final class HeadsetStateMachine extends StateMachine { return mAudioRouteAllowed; } public void setForceScoAudio(boolean forced) { mForceScoAudio = forced; } int getAudioState(BluetoothDevice device) { synchronized (this) { if (mConnectedDevicesList.size() == 0) { Loading Loading @@ -3274,6 +3281,7 @@ final class HeadsetStateMachine extends StateMachine { // Accept incoming SCO only when there is in-band ringing, incoming call, // active call, VR activated, active VOIP call private boolean isScoAcceptable() { if (mForceScoAudio) return true; return mAudioRouteAllowed && (mVoiceRecognitionStarted || isInCall() || (BluetoothHeadset.isInbandRingingSupported(mService) && isRinging())); Loading