Loading android/app/src/com/android/bluetooth/tbs/TbsGeneric.java +20 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.util.Log; import com.android.bluetooth.btservice.ServiceFactory; import com.android.bluetooth.le_audio.ContentControlIdKeeper; import com.android.bluetooth.le_audio.LeAudioService; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -735,7 +736,7 @@ public class TbsGeneric { mLastIndexAssigned = requestId; } setActiveLeDevice(device); return TbsGatt.CALL_CONTROL_POINT_RESULT_SUCCESS; } Loading Loading @@ -794,6 +795,7 @@ public class TbsGeneric { Request request = new Request(device, callId, opcode, callIndex); try { if (opcode == TbsGatt.CALL_CONTROL_POINT_OPCODE_ACCEPT) { setActiveLeDevice(device); bearer.callback.onAcceptCall(requestId, new ParcelUuid(callId)); } else if (opcode == TbsGatt.CALL_CONTROL_POINT_OPCODE_TERMINATE) { bearer.callback.onTerminateCall(requestId, new ParcelUuid(callId)); Loading Loading @@ -1023,6 +1025,11 @@ public class TbsGeneric { return true; } @VisibleForTesting void setLeAudioServiceForTesting(LeAudioService leAudioService) { mLeAudioService = leAudioService; } private synchronized void notifyCclc() { if (DBG) { Log.d(TAG, "notifyCclc"); Loading Loading @@ -1056,6 +1063,18 @@ public class TbsGeneric { mTbsGatt.setBearerUriSchemesSupportedList(mUriSchemes); } private void setActiveLeDevice(BluetoothDevice device) { if (device == null) { Log.w(TAG, "setActiveLeDevice: ignore null device"); return; } if (!isLeAudioServiceAvailable()) { Log.w(TAG, "mLeAudioService not available"); return; } mLeAudioService.setActiveDevice(device); } private static boolean isCallStateTransitionValid(int callState, int requestedOpcode) { switch (requestedOpcode) { case TbsGatt.CALL_CONTROL_POINT_OPCODE_ACCEPT: Loading android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java +12 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentat import com.android.bluetooth.TestUtils; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.le_audio.LeAudioService; import org.junit.After; import org.junit.Before; Loading Loading @@ -282,6 +283,9 @@ public class TbsGenericTest { Integer ccid = prepareTestBearer(); reset(mTbsGatt); LeAudioService leAudioService = mock(LeAudioService.class); mTbsGeneric.setLeAudioServiceForTesting(leAudioService); // Prepare the incoming call UUID callUuid = UUID.randomUUID(); List<BluetoothLeCall> tbsCalls = new ArrayList<>(); Loading Loading @@ -310,6 +314,8 @@ public class TbsGenericTest { throw e.rethrowFromSystemServer(); } assertThat(callUuidCaptor.getValue().getUuid()).isEqualTo(callUuid); // Active device should be changed verify(leAudioService).setActiveDevice(mCurrentDevice); // Respond with requestComplete... mTbsGeneric.requestResult(ccid, requestIdCaptor.getValue(), BluetoothLeCallControl.RESULT_SUCCESS); Loading Loading @@ -462,6 +468,9 @@ public class TbsGenericTest { Integer ccid = prepareTestBearer(); reset(mTbsGatt); LeAudioService leAudioService = mock(LeAudioService.class); mTbsGeneric.setLeAudioServiceForTesting(leAudioService); // Act as if peer originates a call via Gtbs String uri = "xmpp:123456789"; mTbsGattCallback.getValue().onCallControlPointRequest(mCurrentDevice, Loading @@ -476,6 +485,9 @@ public class TbsGenericTest { throw e.rethrowFromSystemServer(); } // Active device should be changed verify(leAudioService).setActiveDevice(mCurrentDevice); // Respond with requestComplete... mTbsGeneric.requestResult(ccid, requestIdCaptor.getValue(), BluetoothLeCallControl.RESULT_SUCCESS); mTbsGeneric.callAdded(ccid, Loading Loading
android/app/src/com/android/bluetooth/tbs/TbsGeneric.java +20 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.util.Log; import com.android.bluetooth.btservice.ServiceFactory; import com.android.bluetooth.le_audio.ContentControlIdKeeper; import com.android.bluetooth.le_audio.LeAudioService; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -735,7 +736,7 @@ public class TbsGeneric { mLastIndexAssigned = requestId; } setActiveLeDevice(device); return TbsGatt.CALL_CONTROL_POINT_RESULT_SUCCESS; } Loading Loading @@ -794,6 +795,7 @@ public class TbsGeneric { Request request = new Request(device, callId, opcode, callIndex); try { if (opcode == TbsGatt.CALL_CONTROL_POINT_OPCODE_ACCEPT) { setActiveLeDevice(device); bearer.callback.onAcceptCall(requestId, new ParcelUuid(callId)); } else if (opcode == TbsGatt.CALL_CONTROL_POINT_OPCODE_TERMINATE) { bearer.callback.onTerminateCall(requestId, new ParcelUuid(callId)); Loading Loading @@ -1023,6 +1025,11 @@ public class TbsGeneric { return true; } @VisibleForTesting void setLeAudioServiceForTesting(LeAudioService leAudioService) { mLeAudioService = leAudioService; } private synchronized void notifyCclc() { if (DBG) { Log.d(TAG, "notifyCclc"); Loading Loading @@ -1056,6 +1063,18 @@ public class TbsGeneric { mTbsGatt.setBearerUriSchemesSupportedList(mUriSchemes); } private void setActiveLeDevice(BluetoothDevice device) { if (device == null) { Log.w(TAG, "setActiveLeDevice: ignore null device"); return; } if (!isLeAudioServiceAvailable()) { Log.w(TAG, "mLeAudioService not available"); return; } mLeAudioService.setActiveDevice(device); } private static boolean isCallStateTransitionValid(int callState, int requestedOpcode) { switch (requestedOpcode) { case TbsGatt.CALL_CONTROL_POINT_OPCODE_ACCEPT: Loading
android/app/tests/unit/src/com/android/bluetooth/tbs/TbsGenericTest.java +12 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentat import com.android.bluetooth.TestUtils; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.le_audio.LeAudioService; import org.junit.After; import org.junit.Before; Loading Loading @@ -282,6 +283,9 @@ public class TbsGenericTest { Integer ccid = prepareTestBearer(); reset(mTbsGatt); LeAudioService leAudioService = mock(LeAudioService.class); mTbsGeneric.setLeAudioServiceForTesting(leAudioService); // Prepare the incoming call UUID callUuid = UUID.randomUUID(); List<BluetoothLeCall> tbsCalls = new ArrayList<>(); Loading Loading @@ -310,6 +314,8 @@ public class TbsGenericTest { throw e.rethrowFromSystemServer(); } assertThat(callUuidCaptor.getValue().getUuid()).isEqualTo(callUuid); // Active device should be changed verify(leAudioService).setActiveDevice(mCurrentDevice); // Respond with requestComplete... mTbsGeneric.requestResult(ccid, requestIdCaptor.getValue(), BluetoothLeCallControl.RESULT_SUCCESS); Loading Loading @@ -462,6 +468,9 @@ public class TbsGenericTest { Integer ccid = prepareTestBearer(); reset(mTbsGatt); LeAudioService leAudioService = mock(LeAudioService.class); mTbsGeneric.setLeAudioServiceForTesting(leAudioService); // Act as if peer originates a call via Gtbs String uri = "xmpp:123456789"; mTbsGattCallback.getValue().onCallControlPointRequest(mCurrentDevice, Loading @@ -476,6 +485,9 @@ public class TbsGenericTest { throw e.rethrowFromSystemServer(); } // Active device should be changed verify(leAudioService).setActiveDevice(mCurrentDevice); // Respond with requestComplete... mTbsGeneric.requestResult(ccid, requestIdCaptor.getValue(), BluetoothLeCallControl.RESULT_SUCCESS); mTbsGeneric.callAdded(ccid, Loading