• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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