diff options
author | 2025-03-11 09:02:26 -0700 | |
---|---|---|
committer | 2025-03-11 09:02:26 -0700 | |
commit | 4d8e9053ace5cbcfcbd586124cecc7d3f086d85b (patch) | |
tree | d18d715ab6a4b0994ee9b1e3fe08939608912b22 | |
parent | 50f268e1a0a8fdae21ff7b1568f5698325178ed4 (diff) | |
parent | 27919bcc2ae6f8982bf5f1aac15669b4480a3354 (diff) |
Merge "Add tests for HearingDevicePhoneCallNotificationController when OnCommunicationDeviceChanged" into main
2 files changed, 55 insertions, 0 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java b/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java index 805d7f820c8d..94cef418b6c8 100644 --- a/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/HearingDevicePhoneCallNotificationController.java @@ -165,6 +165,9 @@ public class HearingDevicePhoneCallNotificationController { if (state == TelephonyManager.CALL_STATE_OFFHOOK) { if (com.android.server.accessibility.Flags.hearingInputChangeWhenCommDevice()) { AudioDeviceInfo commDevice = mAudioManager.getCommunicationDevice(); + if (commDevice == null) { + return; + } mHearingDevice = getSupportedInputHearingDeviceInfo(List.of(commDevice)); if (mHearingDevice != null) { showNotificationIfNeeded(); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/HearingDevicePhoneCallNotificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/HearingDevicePhoneCallNotificationControllerTest.java index 63c572af37b2..3565244d90b3 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/HearingDevicePhoneCallNotificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/HearingDevicePhoneCallNotificationControllerTest.java @@ -36,6 +36,8 @@ import android.content.Context; import android.media.AudioDeviceInfo; import android.media.AudioDevicePort; import android.media.AudioManager; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; @@ -67,6 +69,8 @@ import java.util.concurrent.Executor; public class HearingDevicePhoneCallNotificationControllerTest { @Rule public MockitoRule mockito = MockitoJUnit.rule(); + @Rule + public SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private static final String TEST_ADDRESS = "55:66:77:88:99:AA"; @@ -118,6 +122,7 @@ public class HearingDevicePhoneCallNotificationControllerTest { AudioManager.DEVICE_OUT_BLE_HEADSET); when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn( new AudioDeviceInfo[]{hapDeviceInfo}); + when(mAudioManager.getCommunicationDevice()).thenReturn(hapDeviceInfo); when(mAudioManager.getAvailableCommunicationDevices()).thenReturn(List.of(hapDeviceInfo)); mTestCallStateListener.onCallStateChanged(TelephonyManager.CALL_STATE_OFFHOOK); @@ -132,6 +137,7 @@ public class HearingDevicePhoneCallNotificationControllerTest { AudioManager.DEVICE_OUT_BLUETOOTH_A2DP); when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn( new AudioDeviceInfo[]{a2dpDeviceInfo}); + when(mAudioManager.getCommunicationDevice()).thenReturn(a2dpDeviceInfo); when(mAudioManager.getAvailableCommunicationDevices()).thenReturn(List.of(a2dpDeviceInfo)); mTestCallStateListener.onCallStateChanged(TelephonyManager.CALL_STATE_OFFHOOK); @@ -146,6 +152,7 @@ public class HearingDevicePhoneCallNotificationControllerTest { AudioManager.DEVICE_OUT_BLE_HEADSET); when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn( new AudioDeviceInfo[]{hapDeviceInfo}); + when(mAudioManager.getCommunicationDevice()).thenReturn(hapDeviceInfo); when(mAudioManager.getAvailableCommunicationDevices()).thenReturn(List.of(hapDeviceInfo)); mTestCallStateListener.onCallStateChanged(TelephonyManager.CALL_STATE_OFFHOOK); @@ -155,6 +162,51 @@ public class HearingDevicePhoneCallNotificationControllerTest { eq(SystemMessageProto.SystemMessage.NOTE_HEARING_DEVICE_INPUT_SWITCH)); } + @Test + @EnableFlags(Flags.FLAG_HEARING_INPUT_CHANGE_WHEN_COMM_DEVICE) + public void onCallStateChanged_nonHearingDevice_offHookThenIdle_callAddAndRemoveListener() { + final ArgumentCaptor<AudioManager.OnCommunicationDeviceChangedListener> listenerCaptor = + ArgumentCaptor.forClass(AudioManager.OnCommunicationDeviceChangedListener.class); + AudioDeviceInfo a2dpDeviceInfo = createAudioDeviceInfo(TEST_ADDRESS, + AudioManager.DEVICE_OUT_BLUETOOTH_A2DP); + when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn( + new AudioDeviceInfo[]{a2dpDeviceInfo}); + when(mAudioManager.getCommunicationDevice()).thenReturn(a2dpDeviceInfo); + + mTestCallStateListener.onCallStateChanged(TelephonyManager.CALL_STATE_OFFHOOK); + mTestCallStateListener.onCallStateChanged(TelephonyManager.CALL_STATE_IDLE); + + verify(mAudioManager).addOnCommunicationDeviceChangedListener(any(Executor.class), + listenerCaptor.capture()); + verify(mAudioManager).removeOnCommunicationDeviceChangedListener( + eq(listenerCaptor.getValue())); + } + + + @Test + @EnableFlags(Flags.FLAG_HEARING_INPUT_CHANGE_WHEN_COMM_DEVICE) + public void onCallStateChanged_hearingDeviceFromCommunicationDeviceChanged_showNotification() { + final ArgumentCaptor<AudioManager.OnCommunicationDeviceChangedListener> listenerCaptor = + ArgumentCaptor.forClass(AudioManager.OnCommunicationDeviceChangedListener.class); + AudioDeviceInfo hapDeviceInfo = createAudioDeviceInfo(TEST_ADDRESS, + AudioManager.DEVICE_OUT_BLE_HEADSET); + AudioDeviceInfo a2dpDeviceInfo = createAudioDeviceInfo(TEST_ADDRESS, + AudioManager.DEVICE_OUT_BLUETOOTH_A2DP); + when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn( + new AudioDeviceInfo[]{a2dpDeviceInfo}); + when(mAudioManager.getCommunicationDevice()).thenReturn(a2dpDeviceInfo); + + mTestCallStateListener.onCallStateChanged(TelephonyManager.CALL_STATE_OFFHOOK); + verify(mAudioManager).addOnCommunicationDeviceChangedListener(any(Executor.class), + listenerCaptor.capture()); + when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn( + new AudioDeviceInfo[]{hapDeviceInfo}); + listenerCaptor.getValue().onCommunicationDeviceChanged(hapDeviceInfo); + + verify(mNotificationManager).notify( + eq(SystemMessageProto.SystemMessage.NOTE_HEARING_DEVICE_INPUT_SWITCH), any()); + } + private AudioDeviceInfo createAudioDeviceInfo(String address, int type) { AudioDevicePort audioDevicePort = mock(AudioDevicePort.class); doReturn(type).when(audioDevicePort).type(); |