1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.car.audio; 18 19 import static android.media.AudioDeviceInfo.TYPE_BLUETOOTH_A2DP; 20 import static android.media.AudioDeviceInfo.TYPE_BUILTIN_MIC; 21 import static android.media.AudioDeviceInfo.TYPE_BUS; 22 import static android.media.AudioDeviceInfo.TYPE_FM_TUNER; 23 24 import static com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport.BOILERPLATE_CODE; 25 26 import static org.mockito.Mockito.mock; 27 import static org.mockito.Mockito.when; 28 29 import android.media.AudioDeviceInfo; 30 31 import com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport; 32 33 import java.util.List; 34 35 @ExcludeFromCodeCoverageGeneratedReport(reason = BOILERPLATE_CODE) 36 class CarAudioDeviceInfoTestUtils { 37 38 static final String MEDIA_TEST_DEVICE = "media_bus_device"; 39 static final String OEM_TEST_DEVICE = "oem_bus_device"; 40 static final String MIRROR_TEST_DEVICE = "mirror_bus_device"; 41 static final String NAVIGATION_TEST_DEVICE = "navigation_bus_device"; 42 static final String CALL_TEST_DEVICE = "call_bus_device"; 43 static final String NOTIFICATION_TEST_DEVICE = "notification_bus_device"; 44 static final String VOICE_TEST_DEVICE = "voice_bus_device"; 45 static final String RING_TEST_DEVICE = "ring_bus_device"; 46 static final String ALARM_TEST_DEVICE = "alarm_bus_device"; 47 static final String SYSTEM_BUS_DEVICE = "system_bus_device"; 48 static final String SECONDARY_TEST_DEVICE_CONFIG_0 = "secondary_zone_bus_100"; 49 static final String SECONDARY_TEST_DEVICE_CONFIG_1_0 = "secondary_zone_bus_200"; 50 static final String SECONDARY_TEST_DEVICE_CONFIG_1_1 = "secondary_zone_bus_201"; 51 static final String TEST_BT_DEVICE = "08:67:53:09"; 52 static final String TERTIARY_TEST_DEVICE_1 = "tertiary_zone_bus_100"; 53 static final String TERTIARY_TEST_DEVICE_2 = "tertiary_zone_bus_200"; 54 static final String QUATERNARY_TEST_DEVICE_1 = "quaternary_zone_bus_1"; 55 static final String TEST_REAR_ROW_3_DEVICE = "rear_row_three_zone_bus_1"; 56 static final String TEST_SPEAKER_DEVICE = "speaker"; 57 58 static final String ADDRESS_DOES_NOT_EXIST_DEVICE = "bus1000_does_not_exist"; 59 60 static final String PRIMARY_ZONE_MICROPHONE_DEVICE = "Built-In Mic"; 61 static final String PRIMARY_ZONE_FM_TUNER_DEVICE = "fm_tuner"; 62 static final String SECONDARY_ZONE_BACK_MICROPHONE_DEVICE = "Built-In Back Mic"; 63 static final String SECONDARY_ZONE_BUS_1000_INPUT_DEVICE = "bus_1000_input"; 64 65 final AudioDeviceInfo mMediaOutputDevice; 66 final AudioDeviceInfo mNotificationOutputBus; 67 final AudioDeviceInfo mNavOutputDevice; 68 final AudioDeviceInfo mVoiceOutputBus; 69 final AudioDeviceInfo mSecondaryConfig1Group0Device; 70 final AudioDeviceInfo mSecondaryConfig1Group1Device; 71 final AudioDeviceInfo mBTAudioDeviceInfo; 72 final AudioDeviceInfo mSecondaryConfigOutputDevice; 73 74 private final List<AudioDeviceInfo> mAudioOutputDeviceInfos; 75 private final List<AudioDeviceInfo> mAudioInputDeviceInfos; 76 CarAudioDeviceInfoTestUtils()77 CarAudioDeviceInfoTestUtils() { 78 mMediaOutputDevice = new AudioDeviceInfoBuilder() 79 .setAudioGains(new GainBuilder().build()) 80 .setAddressName(MEDIA_TEST_DEVICE) 81 .build(); 82 mNotificationOutputBus = new AudioDeviceInfoBuilder() 83 .setAudioGains(new GainBuilder().build()) 84 .setAddressName(NOTIFICATION_TEST_DEVICE) 85 .build(); 86 mNavOutputDevice = new AudioDeviceInfoBuilder() 87 .setAudioGains(new GainBuilder().build()) 88 .setAddressName(NAVIGATION_TEST_DEVICE) 89 .build(); 90 mVoiceOutputBus = new AudioDeviceInfoBuilder() 91 .setAudioGains(new GainBuilder().build()) 92 .setAddressName(VOICE_TEST_DEVICE) 93 .build(); 94 mBTAudioDeviceInfo = new AudioDeviceInfoBuilder() 95 .setAudioGains(new GainBuilder().build()) 96 .setAddressName(TEST_BT_DEVICE) 97 .setType(TYPE_BLUETOOTH_A2DP) 98 .build(); 99 AudioDeviceInfo callOutputDevice = new AudioDeviceInfoBuilder() 100 .setAudioGains(new GainBuilder().build()) 101 .setAddressName(CALL_TEST_DEVICE) 102 .build(); 103 AudioDeviceInfo systemOutputDevice = new AudioDeviceInfoBuilder() 104 .setAudioGains(new GainBuilder().build()) 105 .setAddressName(SYSTEM_BUS_DEVICE) 106 .build(); 107 AudioDeviceInfo ringOutputDevice = new AudioDeviceInfoBuilder() 108 .setAudioGains(new GainBuilder().build()) 109 .setAddressName(RING_TEST_DEVICE) 110 .build(); 111 AudioDeviceInfo alarmOutputDevice = new AudioDeviceInfoBuilder() 112 .setAudioGains(new GainBuilder().build()) 113 .setAddressName(ALARM_TEST_DEVICE) 114 .build(); 115 mSecondaryConfigOutputDevice = new AudioDeviceInfoBuilder() 116 .setAudioGains(new GainBuilder().build()) 117 .setAddressName(SECONDARY_TEST_DEVICE_CONFIG_0) 118 .build(); 119 mSecondaryConfig1Group0Device = new AudioDeviceInfoBuilder() 120 .setAudioGains(new GainBuilder().build()) 121 .setAddressName(SECONDARY_TEST_DEVICE_CONFIG_1_0) 122 .build(); 123 mSecondaryConfig1Group1Device = new AudioDeviceInfoBuilder() 124 .setAudioGains(new GainBuilder().build()) 125 .setAddressName(SECONDARY_TEST_DEVICE_CONFIG_1_1) 126 .build(); 127 AudioDeviceInfo speakerDevice = new AudioDeviceInfoBuilder() 128 .setAudioGains(new GainBuilder().build()) 129 .setAddressName(TEST_SPEAKER_DEVICE).build(); 130 131 mAudioOutputDeviceInfos = List.of( 132 mBTAudioDeviceInfo, 133 mMediaOutputDevice, 134 mNavOutputDevice, 135 callOutputDevice, 136 systemOutputDevice, 137 mNotificationOutputBus, 138 mVoiceOutputBus, 139 ringOutputDevice, 140 alarmOutputDevice, 141 mSecondaryConfig1Group0Device, 142 mSecondaryConfig1Group1Device, 143 mSecondaryConfigOutputDevice, 144 speakerDevice, 145 new AudioDeviceInfoBuilder() 146 .setAudioGains(new GainBuilder().build()) 147 .setAddressName(TERTIARY_TEST_DEVICE_1) 148 .build(), 149 new AudioDeviceInfoBuilder() 150 .setAudioGains(new GainBuilder().build()) 151 .setAddressName(TERTIARY_TEST_DEVICE_2) 152 .build(), 153 new AudioDeviceInfoBuilder() 154 .setAudioGains(new GainBuilder().build()) 155 .setAddressName(QUATERNARY_TEST_DEVICE_1) 156 .build(), 157 new AudioDeviceInfoBuilder() 158 .setAudioGains(new GainBuilder().build()) 159 .setAddressName(OEM_TEST_DEVICE) 160 .build(), 161 new AudioDeviceInfoBuilder() 162 .setAudioGains(new GainBuilder().build()) 163 .setAddressName(MIRROR_TEST_DEVICE).build(), 164 new AudioDeviceInfoBuilder() 165 .setAudioGains(new GainBuilder().build()) 166 .setAddressName(TEST_REAR_ROW_3_DEVICE).build() 167 ); 168 mAudioInputDeviceInfos = List.of( 169 generateInputAudioDeviceInfo(PRIMARY_ZONE_MICROPHONE_DEVICE, TYPE_BUILTIN_MIC), 170 generateInputAudioDeviceInfo(PRIMARY_ZONE_FM_TUNER_DEVICE, TYPE_FM_TUNER), 171 generateInputAudioDeviceInfo(SECONDARY_ZONE_BACK_MICROPHONE_DEVICE, TYPE_BUS), 172 generateInputAudioDeviceInfo(SECONDARY_ZONE_BUS_1000_INPUT_DEVICE, TYPE_BUILTIN_MIC) 173 ); 174 } 175 generateOutputDeviceInfos()176 AudioDeviceInfo[] generateOutputDeviceInfos() { 177 return mAudioOutputDeviceInfos.toArray(new AudioDeviceInfo[0]); 178 } 179 generateInputDeviceInfos()180 AudioDeviceInfo[] generateInputDeviceInfos() { 181 return mAudioInputDeviceInfos.toArray(new AudioDeviceInfo[0]); 182 } 183 generateCarAudioDeviceInfo(String address)184 static CarAudioDeviceInfo generateCarAudioDeviceInfo(String address) { 185 CarAudioDeviceInfo cadiMock = mock(CarAudioDeviceInfo.class); 186 when(cadiMock.getStepValue()).thenReturn(1); 187 when(cadiMock.getDefaultGain()).thenReturn(2); 188 when(cadiMock.getMaxGain()).thenReturn(5); 189 when(cadiMock.getMinGain()).thenReturn(0); 190 when(cadiMock.getAddress()).thenReturn(address); 191 return cadiMock; 192 } 193 generateInputAudioDeviceInfo(String address, int type)194 static AudioDeviceInfo generateInputAudioDeviceInfo(String address, int type) { 195 AudioDeviceInfo inputMock = mock(AudioDeviceInfo.class); 196 when(inputMock.getAddress()).thenReturn(address); 197 when(inputMock.getType()).thenReturn(type); 198 when(inputMock.isSource()).thenReturn(true); 199 when(inputMock.isSink()).thenReturn(false); 200 when(inputMock.getInternalType()).thenReturn( 201 AudioDeviceInfo.convertDeviceTypeToInternalInputDevice(type)); 202 return inputMock; 203 } 204 } 205