summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author jiabin <jiabin@google.com> 2019-04-25 13:35:56 -0700
committer jiabin <jiabin@google.com> 2019-04-25 15:11:42 -0700
commitcbf33b2f527235dfd944285ca007e4c8f9961f90 (patch)
tree56a18a70c9c3d9f732ae6bcb45980677bc312ba5
parent9a205d9b12399fb3248e12f52593d572647255a4 (diff)
ScoClient only increases count when requestScoState succeed.
Bug: 123408281 Test: Manually Change-Id: I4183b941c1fbfa573fdb6c6258f4012616c4c64a
-rw-r--r--services/core/java/com/android/server/audio/BtHelper.java26
1 files changed, 18 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java
index 068c3d8a1264..934c7bfe3392 100644
--- a/services/core/java/com/android/server/audio/BtHelper.java
+++ b/services/core/java/com/android/server/audio/BtHelper.java
@@ -678,7 +678,11 @@ public class BtHelper {
// @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
@GuardedBy("BtHelper.this")
void incCount(int scoAudioMode) {
- requestScoState(BluetoothHeadset.STATE_AUDIO_CONNECTED, scoAudioMode);
+ if (!requestScoState(BluetoothHeadset.STATE_AUDIO_CONNECTED, scoAudioMode)) {
+ Log.e(TAG, "Request sco connected with scoAudioMode("
+ + scoAudioMode + ") failed");
+ return;
+ }
if (mStartcount == 0) {
try {
mCb.linkToDeath(this, 0);
@@ -706,7 +710,9 @@ public class BtHelper {
Log.w(TAG, "decCount() going to 0 but not registered to binder");
}
}
- requestScoState(BluetoothHeadset.STATE_AUDIO_DISCONNECTED, 0);
+ if (!requestScoState(BluetoothHeadset.STATE_AUDIO_DISCONNECTED, 0)) {
+ Log.w(TAG, "Request sco disconnected with scoAudioMode(0) failed");
+ }
}
}
@@ -751,13 +757,13 @@ public class BtHelper {
// @GuardedBy("AudioDeviceBroker.mSetModeLock")
//@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
@GuardedBy("BtHelper.this")
- private void requestScoState(int state, int scoAudioMode) {
+ private boolean requestScoState(int state, int scoAudioMode) {
checkScoAudioState();
int clientCount = totalCount();
if (clientCount != 0) {
Log.i(TAG, "requestScoState: state=" + state + ", scoAudioMode=" + scoAudioMode
+ ", clientCount=" + clientCount);
- return;
+ return true;
}
if (state == BluetoothHeadset.STATE_AUDIO_CONNECTED) {
// Make sure that the state transitions to CONNECTING even if we cannot initiate
@@ -770,7 +776,7 @@ public class BtHelper {
Log.w(TAG, "requestScoState: audio mode is not NORMAL and modeOwnerPid "
+ modeOwnerPid + " != creatorPid " + mCreatorPid);
broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
- return;
+ return false;
}
switch (mScoAudioState) {
case SCO_STATE_INACTIVE:
@@ -796,6 +802,7 @@ public class BtHelper {
+ " connection, mScoAudioMode=" + mScoAudioMode);
broadcastScoConnectionState(
AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
+ return false;
}
break;
}
@@ -804,7 +811,7 @@ public class BtHelper {
+ " mScoAudioMode=" + mScoAudioMode);
broadcastScoConnectionState(
AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
- break;
+ return false;
}
if (connectBluetoothScoAudioHelper(mBluetoothHeadset,
mBluetoothHeadsetDevice, mScoAudioMode)) {
@@ -814,6 +821,7 @@ public class BtHelper {
+ " failed, mScoAudioMode=" + mScoAudioMode);
broadcastScoConnectionState(
AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
+ return false;
}
break;
case SCO_STATE_DEACTIVATING:
@@ -827,7 +835,7 @@ public class BtHelper {
Log.w(TAG, "requestScoState: failed to connect in state "
+ mScoAudioState + ", scoAudioMode=" + scoAudioMode);
broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
- break;
+ return false;
}
} else if (state == BluetoothHeadset.STATE_AUDIO_DISCONNECTED) {
@@ -842,6 +850,7 @@ public class BtHelper {
mScoAudioState = SCO_STATE_INACTIVE;
broadcastScoConnectionState(
AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
+ return false;
}
break;
}
@@ -868,9 +877,10 @@ public class BtHelper {
Log.w(TAG, "requestScoState: failed to disconnect in state "
+ mScoAudioState + ", scoAudioMode=" + scoAudioMode);
broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
- break;
+ return false;
}
}
+ return true;
}
}