Loading android/app/src/com/android/bluetooth/hfp/HeadsetPhoneState.java +9 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Handler; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SignalStrengthUpdateRequest; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; Loading Loading @@ -70,6 +71,7 @@ public class HeadsetPhoneState { private final HashMap<BluetoothDevice, Integer> mDeviceEventMap = new HashMap<>(); private PhoneStateListener mPhoneStateListener; private final OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; private SignalStrengthUpdateRequest mSignalStrengthUpdateRequest; HeadsetPhoneState(HeadsetService headsetService) { Objects.requireNonNull(headsetService, "headsetService is null"); Loading @@ -85,6 +87,9 @@ public class HeadsetPhoneState { mOnSubscriptionsChangedListener = new HeadsetPhoneStateOnSubscriptionChangedListener(); mSubscriptionManager.addOnSubscriptionsChangedListener(command -> mHandler.post(command), mOnSubscriptionsChangedListener); mSignalStrengthUpdateRequest = new SignalStrengthUpdateRequest.Builder() .setSystemThresholdReportingRequestedWhileIdle(true) .build(); } /** Loading Loading @@ -156,6 +161,9 @@ public class HeadsetPhoneState { Log.i(TAG, "startListenForPhoneState(), subId=" + subId + ", enabled_events=" + events); mPhoneStateListener = new HeadsetPhoneStateListener(command -> mHandler.post(command)); mTelephonyManager.listen(mPhoneStateListener, events); if ((events & PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) != 0) { mTelephonyManager.setSignalStrengthUpdateRequest(mSignalStrengthUpdateRequest); } } private void stopListenForPhoneState() { Loading @@ -167,6 +175,7 @@ public class HeadsetPhoneState { + getTelephonyEventsToListen()); mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); mPhoneStateListener = null; mTelephonyManager.clearSignalStrengthUpdateRequest(mSignalStrengthUpdateRequest); } int getCindService() { Loading android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java +1 −1 Original line number Diff line number Diff line Loading @@ -2064,7 +2064,7 @@ public class HeadsetStateMachine extends StateMachine { events |= PhoneStateListener.LISTEN_SERVICE_STATE; } if (mAgIndicatorEnableState != null && mAgIndicatorEnableState.signal) { events |= PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH; events |= PhoneStateListener.LISTEN_SIGNAL_STRENGTHS; } mSystemInterface.getHeadsetPhoneState().listenForPhoneState(mDevice, events); } Loading android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java +12 −12 Original line number Diff line number Diff line Loading @@ -137,9 +137,9 @@ public class HeadsetPhoneStateTest { public void testListenForPhoneState_ServiceAndSignalStrength() { BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); } /** Loading @@ -150,9 +150,9 @@ public class HeadsetPhoneStateTest { public void testListenForPhoneState_ServiceAndSignalStrengthUpdateTurnOffSignalStrengh() { BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE)); Loading @@ -165,9 +165,9 @@ public class HeadsetPhoneStateTest { public void testListenForPhoneState_ServiceAndSignalStrengthUpdateTurnOffAll() { BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); } Loading @@ -183,12 +183,12 @@ public class HeadsetPhoneStateTest { BluetoothDevice device2 = TestUtils.getTestDevice(mAdapter, 2); // Enabling updates from first device should trigger subscription mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); // Enabling updates from second device should not trigger the same subscription mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); // Disabling updates from first device should not cancel subscription mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE); // Disabling updates from second device should cancel subscription Loading @@ -211,15 +211,15 @@ public class HeadsetPhoneStateTest { verifyNoMoreInteractions(mTelephonyManager); // Partially enabling updates from second device should trigger partial subscription mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); // Partially disabling updates from first device should not cancel all subscription mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE); verify(mTelephonyManager, times(2)).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); verify(mTelephonyManager).listen( any(), eq(PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); any(), eq(PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); // Partially disabling updates from second device should cancel subscription mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_NONE); verify(mTelephonyManager, times(3)).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); Loading android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -896,7 +896,7 @@ public class HeadsetStateMachineTest { public void testAtBiaEvent_initialSubscriptionWithUpdates() { setUpConnectedState(); verify(mPhoneState).listenForPhoneState(mTestDevice, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); mHeadsetStateMachine.sendMessage(HeadsetStateMachine.STACK_EVENT, new HeadsetStackEvent(HeadsetStackEvent.EVENT_TYPE_BIA, new HeadsetAgIndicatorEnableState(true, true, false, false), mTestDevice)); Loading @@ -906,7 +906,7 @@ public class HeadsetStateMachineTest { new HeadsetStackEvent(HeadsetStackEvent.EVENT_TYPE_BIA, new HeadsetAgIndicatorEnableState(false, true, true, false), mTestDevice)); verify(mPhoneState, timeout(ASYNC_CALL_TIMEOUT_MILLIS)).listenForPhoneState(mTestDevice, PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); mHeadsetStateMachine.sendMessage(HeadsetStateMachine.STACK_EVENT, new HeadsetStackEvent(HeadsetStackEvent.EVENT_TYPE_BIA, new HeadsetAgIndicatorEnableState(false, true, false, false), mTestDevice)); Loading Loading
android/app/src/com/android/bluetooth/hfp/HeadsetPhoneState.java +9 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Handler; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SignalStrengthUpdateRequest; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; Loading Loading @@ -70,6 +71,7 @@ public class HeadsetPhoneState { private final HashMap<BluetoothDevice, Integer> mDeviceEventMap = new HashMap<>(); private PhoneStateListener mPhoneStateListener; private final OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; private SignalStrengthUpdateRequest mSignalStrengthUpdateRequest; HeadsetPhoneState(HeadsetService headsetService) { Objects.requireNonNull(headsetService, "headsetService is null"); Loading @@ -85,6 +87,9 @@ public class HeadsetPhoneState { mOnSubscriptionsChangedListener = new HeadsetPhoneStateOnSubscriptionChangedListener(); mSubscriptionManager.addOnSubscriptionsChangedListener(command -> mHandler.post(command), mOnSubscriptionsChangedListener); mSignalStrengthUpdateRequest = new SignalStrengthUpdateRequest.Builder() .setSystemThresholdReportingRequestedWhileIdle(true) .build(); } /** Loading Loading @@ -156,6 +161,9 @@ public class HeadsetPhoneState { Log.i(TAG, "startListenForPhoneState(), subId=" + subId + ", enabled_events=" + events); mPhoneStateListener = new HeadsetPhoneStateListener(command -> mHandler.post(command)); mTelephonyManager.listen(mPhoneStateListener, events); if ((events & PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) != 0) { mTelephonyManager.setSignalStrengthUpdateRequest(mSignalStrengthUpdateRequest); } } private void stopListenForPhoneState() { Loading @@ -167,6 +175,7 @@ public class HeadsetPhoneState { + getTelephonyEventsToListen()); mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); mPhoneStateListener = null; mTelephonyManager.clearSignalStrengthUpdateRequest(mSignalStrengthUpdateRequest); } int getCindService() { Loading
android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java +1 −1 Original line number Diff line number Diff line Loading @@ -2064,7 +2064,7 @@ public class HeadsetStateMachine extends StateMachine { events |= PhoneStateListener.LISTEN_SERVICE_STATE; } if (mAgIndicatorEnableState != null && mAgIndicatorEnableState.signal) { events |= PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH; events |= PhoneStateListener.LISTEN_SIGNAL_STRENGTHS; } mSystemInterface.getHeadsetPhoneState().listenForPhoneState(mDevice, events); } Loading
android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetPhoneStateTest.java +12 −12 Original line number Diff line number Diff line Loading @@ -137,9 +137,9 @@ public class HeadsetPhoneStateTest { public void testListenForPhoneState_ServiceAndSignalStrength() { BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); } /** Loading @@ -150,9 +150,9 @@ public class HeadsetPhoneStateTest { public void testListenForPhoneState_ServiceAndSignalStrengthUpdateTurnOffSignalStrengh() { BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE)); Loading @@ -165,9 +165,9 @@ public class HeadsetPhoneStateTest { public void testListenForPhoneState_ServiceAndSignalStrengthUpdateTurnOffAll() { BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); } Loading @@ -183,12 +183,12 @@ public class HeadsetPhoneStateTest { BluetoothDevice device2 = TestUtils.getTestDevice(mAdapter, 2); // Enabling updates from first device should trigger subscription mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); // Enabling updates from second device should not trigger the same subscription mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); // Disabling updates from first device should not cancel subscription mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE); // Disabling updates from second device should cancel subscription Loading @@ -211,15 +211,15 @@ public class HeadsetPhoneStateTest { verifyNoMoreInteractions(mTelephonyManager); // Partially enabling updates from second device should trigger partial subscription mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); // Partially disabling updates from first device should not cancel all subscription mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE); verify(mTelephonyManager, times(2)).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); verify(mTelephonyManager).listen( any(), eq(PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH)); any(), eq(PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)); // Partially disabling updates from second device should cancel subscription mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_NONE); verify(mTelephonyManager, times(3)).listen(any(), eq(PhoneStateListener.LISTEN_NONE)); Loading
android/app/tests/unit/src/com/android/bluetooth/hfp/HeadsetStateMachineTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -896,7 +896,7 @@ public class HeadsetStateMachineTest { public void testAtBiaEvent_initialSubscriptionWithUpdates() { setUpConnectedState(); verify(mPhoneState).listenForPhoneState(mTestDevice, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); mHeadsetStateMachine.sendMessage(HeadsetStateMachine.STACK_EVENT, new HeadsetStackEvent(HeadsetStackEvent.EVENT_TYPE_BIA, new HeadsetAgIndicatorEnableState(true, true, false, false), mTestDevice)); Loading @@ -906,7 +906,7 @@ public class HeadsetStateMachineTest { new HeadsetStackEvent(HeadsetStackEvent.EVENT_TYPE_BIA, new HeadsetAgIndicatorEnableState(false, true, true, false), mTestDevice)); verify(mPhoneState, timeout(ASYNC_CALL_TIMEOUT_MILLIS)).listenForPhoneState(mTestDevice, PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH); PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); mHeadsetStateMachine.sendMessage(HeadsetStateMachine.STACK_EVENT, new HeadsetStackEvent(HeadsetStackEvent.EVENT_TYPE_BIA, new HeadsetAgIndicatorEnableState(false, true, false, false), mTestDevice)); Loading