Loading AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ <uses-permission android:name="android.permission.BIND_INCALL_SERVICE"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/> <uses-permission android:name="android.permission.BROADCAST_CALLLOG_INFO"/> <uses-permission android:name="android.permission.BROADCAST_PHONE_ACCOUNT_REGISTRATION"/> <uses-permission android:name="android.permission.CALL_PRIVILEGED"/> Loading src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.Context; import android.media.AudioManager; import android.media.AudioDeviceInfo; Loading Loading @@ -477,10 +478,9 @@ public class BluetoothDeviceManager { Log.w(this, "Couldn't set active device to %s", address); return false; } if (!mBluetoothHeadset.isAudioOn()) { return mBluetoothHeadset.connectAudio(); } return true; int scoConnectionRequest = mBluetoothHeadset.connectAudio(); return scoConnectionRequest == BluetoothStatusCodes.SUCCESS || scoConnectionRequest == BluetoothStatusCodes.ERROR_AUDIO_DEVICE_ALREADY_CONNECTED; } else { Log.w(this, "Attempting to turn on audio for a disconnected device"); return false; Loading src/com/android/server/telecom/bluetooth/BluetoothRouteManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,8 @@ public class BluetoothRouteManager extends StateMachine { hfpAudioOnDevice = device; break; } if (bluetoothHeadset.getAudioState(hfpAudioOnDevice) if (hfpAudioOnDevice != null && bluetoothHeadset.getAudioState(hfpAudioOnDevice) == BluetoothHeadset.STATE_AUDIO_DISCONNECTED) { hfpAudioOnDevice = null; } else { Loading tests/src/com/android/server/telecom/tests/BluetoothRouteManagerTest.java +5 −4 Original line number Diff line number Diff line Loading @@ -20,8 +20,9 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.ContentResolver; import android.os.Parcel; import android.telecom.Log; Loading Loading @@ -90,7 +91,7 @@ public class BluetoothRouteManagerTest extends TelecomTestCase { setupConnectedDevices(new BluetoothDevice[]{DEVICE1}, null, null, null, null, null); when(mTimeoutsAdapter.getRetryBluetoothConnectAudioBackoffMillis( nullable(ContentResolver.class))).thenReturn(0L); when(mBluetoothHeadset.connectAudio()).thenReturn(false); when(mBluetoothHeadset.connectAudio()).thenReturn(BluetoothStatusCodes.ERROR_UNKNOWN); executeRoutingAction(sm, BluetoothRouteManager.CONNECT_HFP, DEVICE1.getAddress()); // Wait 3 times: for the first connection attempt, the retry attempt, // the second retry, and once more to make sure there are only three attempts. Loading Loading @@ -152,7 +153,7 @@ public class BluetoothRouteManagerTest extends TelecomTestCase { null); when(mTimeoutsAdapter.getRetryBluetoothConnectAudioBackoffMillis( nullable(ContentResolver.class))).thenReturn(0L); when(mBluetoothHeadset.connectAudio()).thenReturn(false); when(mBluetoothHeadset.connectAudio()).thenReturn(BluetoothStatusCodes.ERROR_UNKNOWN); executeRoutingAction(sm, BluetoothRouteManager.CONNECT_HFP, DEVICE2.getAddress()); // Wait 3 times: the first connection attempt is accounted for in executeRoutingAction, // so wait twice for the retry attempt, again to make sure there are only three attempts, Loading Loading @@ -234,7 +235,7 @@ public class BluetoothRouteManagerTest extends TelecomTestCase { when(mDeviceManager.getBluetoothHearingAid()).thenReturn(mBluetoothHearingAid); when(mDeviceManager.getBluetoothAdapter()).thenReturn(mBluetoothAdapter); when(mDeviceManager.getLeAudioService()).thenReturn(mBluetoothLeAudio); when(mBluetoothHeadset.connectAudio()).thenReturn(true); when(mBluetoothHeadset.connectAudio()).thenReturn(BluetoothStatusCodes.SUCCESS); when(mBluetoothAdapter.setActiveDevice(nullable(BluetoothDevice.class), eq(BluetoothAdapter.ACTIVE_DEVICE_ALL))).thenReturn(true); when(mTimeoutsAdapter.getRetryBluetoothConnectAudioBackoffMillis( Loading tests/src/com/android/server/telecom/tests/BluetoothRouteTransitionTests.java +3 −2 Original line number Diff line number Diff line Loading @@ -20,8 +20,9 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.ContentResolver; import android.telecom.Log; import android.test.suitebuilder.annotation.SmallTest; Loading Loading @@ -301,7 +302,7 @@ public class BluetoothRouteTransitionTests extends TelecomTestCase { when(mBluetoothAdapter.getActiveDevices(eq(BluetoothProfile.HEADSET))) .thenReturn(Arrays.asList((BluetoothDevice) null)); sm.sendMessage(BluetoothRouteManager.BT_AUDIO_LOST, args); return true; return BluetoothStatusCodes.SUCCESS; }).when(mDeviceManager).disconnectAudio(); } Loading Loading
AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ <uses-permission android:name="android.permission.BIND_INCALL_SERVICE"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/> <uses-permission android:name="android.permission.BROADCAST_CALLLOG_INFO"/> <uses-permission android:name="android.permission.BROADCAST_PHONE_ACCOUNT_REGISTRATION"/> <uses-permission android:name="android.permission.CALL_PRIVILEGED"/> Loading
src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.Context; import android.media.AudioManager; import android.media.AudioDeviceInfo; Loading Loading @@ -477,10 +478,9 @@ public class BluetoothDeviceManager { Log.w(this, "Couldn't set active device to %s", address); return false; } if (!mBluetoothHeadset.isAudioOn()) { return mBluetoothHeadset.connectAudio(); } return true; int scoConnectionRequest = mBluetoothHeadset.connectAudio(); return scoConnectionRequest == BluetoothStatusCodes.SUCCESS || scoConnectionRequest == BluetoothStatusCodes.ERROR_AUDIO_DEVICE_ALREADY_CONNECTED; } else { Log.w(this, "Attempting to turn on audio for a disconnected device"); return false; Loading
src/com/android/server/telecom/bluetooth/BluetoothRouteManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,8 @@ public class BluetoothRouteManager extends StateMachine { hfpAudioOnDevice = device; break; } if (bluetoothHeadset.getAudioState(hfpAudioOnDevice) if (hfpAudioOnDevice != null && bluetoothHeadset.getAudioState(hfpAudioOnDevice) == BluetoothHeadset.STATE_AUDIO_DISCONNECTED) { hfpAudioOnDevice = null; } else { Loading
tests/src/com/android/server/telecom/tests/BluetoothRouteManagerTest.java +5 −4 Original line number Diff line number Diff line Loading @@ -20,8 +20,9 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.ContentResolver; import android.os.Parcel; import android.telecom.Log; Loading Loading @@ -90,7 +91,7 @@ public class BluetoothRouteManagerTest extends TelecomTestCase { setupConnectedDevices(new BluetoothDevice[]{DEVICE1}, null, null, null, null, null); when(mTimeoutsAdapter.getRetryBluetoothConnectAudioBackoffMillis( nullable(ContentResolver.class))).thenReturn(0L); when(mBluetoothHeadset.connectAudio()).thenReturn(false); when(mBluetoothHeadset.connectAudio()).thenReturn(BluetoothStatusCodes.ERROR_UNKNOWN); executeRoutingAction(sm, BluetoothRouteManager.CONNECT_HFP, DEVICE1.getAddress()); // Wait 3 times: for the first connection attempt, the retry attempt, // the second retry, and once more to make sure there are only three attempts. Loading Loading @@ -152,7 +153,7 @@ public class BluetoothRouteManagerTest extends TelecomTestCase { null); when(mTimeoutsAdapter.getRetryBluetoothConnectAudioBackoffMillis( nullable(ContentResolver.class))).thenReturn(0L); when(mBluetoothHeadset.connectAudio()).thenReturn(false); when(mBluetoothHeadset.connectAudio()).thenReturn(BluetoothStatusCodes.ERROR_UNKNOWN); executeRoutingAction(sm, BluetoothRouteManager.CONNECT_HFP, DEVICE2.getAddress()); // Wait 3 times: the first connection attempt is accounted for in executeRoutingAction, // so wait twice for the retry attempt, again to make sure there are only three attempts, Loading Loading @@ -234,7 +235,7 @@ public class BluetoothRouteManagerTest extends TelecomTestCase { when(mDeviceManager.getBluetoothHearingAid()).thenReturn(mBluetoothHearingAid); when(mDeviceManager.getBluetoothAdapter()).thenReturn(mBluetoothAdapter); when(mDeviceManager.getLeAudioService()).thenReturn(mBluetoothLeAudio); when(mBluetoothHeadset.connectAudio()).thenReturn(true); when(mBluetoothHeadset.connectAudio()).thenReturn(BluetoothStatusCodes.SUCCESS); when(mBluetoothAdapter.setActiveDevice(nullable(BluetoothDevice.class), eq(BluetoothAdapter.ACTIVE_DEVICE_ALL))).thenReturn(true); when(mTimeoutsAdapter.getRetryBluetoothConnectAudioBackoffMillis( Loading
tests/src/com/android/server/telecom/tests/BluetoothRouteTransitionTests.java +3 −2 Original line number Diff line number Diff line Loading @@ -20,8 +20,9 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothStatusCodes; import android.content.ContentResolver; import android.telecom.Log; import android.test.suitebuilder.annotation.SmallTest; Loading Loading @@ -301,7 +302,7 @@ public class BluetoothRouteTransitionTests extends TelecomTestCase { when(mBluetoothAdapter.getActiveDevices(eq(BluetoothProfile.HEADSET))) .thenReturn(Arrays.asList((BluetoothDevice) null)); sm.sendMessage(BluetoothRouteManager.BT_AUDIO_LOST, args); return true; return BluetoothStatusCodes.SUCCESS; }).when(mDeviceManager).disconnectAudio(); } Loading