1 /* 2 * Copyright (C) 2022 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.cts.verifier; 18 19 import com.android.compatibility.common.util.ApiTest; 20 import com.android.compatibility.common.util.CddTest; 21 import com.android.interactive.annotations.Interactive; 22 import com.android.interactive.annotations.SupportMultiDisplayMode; 23 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner; 24 25 import org.junit.Test; 26 import org.junit.runner.RunWith; 27 28 @RunWith(DeviceJUnit4ClassRunner.class) 29 public final class AudioTest extends CtsVerifierTest { 30 31 @Interactive 32 @Test 33 @SupportMultiDisplayMode 34 // MultiDisplayMode RingerModeTest()35 public void RingerModeTest() throws Exception { 36 excludeFeatures("android.software.leanback", "android.hardware.type.automotive"); 37 38 runTest(".audio.RingerModeActivity"); 39 } 40 41 @Interactive 42 @Test 43 @SupportMultiDisplayMode 44 // MultiDisplayMode 45 @CddTest(requirements = "7.8.2.1/C-1-1,C-1-2,C-1-3,C-1-4,C-2-1") AnalogHeadsetAudioTest()46 public void AnalogHeadsetAudioTest() throws Exception { 47 runTest(".audio.AnalogHeadsetAudioActivity"); 48 } 49 50 @Interactive 51 @Test 52 @SupportMultiDisplayMode 53 // MultiDisplayMode 54 @ApiTest( 55 apis = { 56 "android.media.audiofx.AcousticEchoCanceler#isAvailable", 57 "android.media.audiofx.AcousticEchoCanceler#create", 58 "android.media.audiofx.AcousticEchoCanceler#release", 59 "android.media.audiofx.AcousticEchoCanceler#getEnabled" 60 }) AudioAECTest()61 public void AudioAECTest() throws Exception { 62 requireFeatures("android.hardware.microphone", "android.hardware.audio.output"); 63 64 runTest(".audio.AudioAEC"); 65 } 66 67 @Interactive 68 @Test 69 @SupportMultiDisplayMode 70 // MultiDisplayMode 71 @ApiTest( 72 apis = { 73 "android.media.AudioDescriptor#getStandard", 74 "android.media.AudioDescriptor#getDescriptor" 75 }) AudioDescriptorTest()76 public void AudioDescriptorTest() throws Exception { 77 runTest(".audio.AudioDescriptorActivity"); 78 } 79 80 @Interactive 81 @Test 82 @SupportMultiDisplayMode 83 // MultiDisplayMode 84 // @NonApiTest(exemptionReasons = METRIC, 85 // justification = "this test is currently informational only") AudioFrequencyLineTest()86 public void AudioFrequencyLineTest() throws Exception { 87 requireFeatures("android.hardware.microphone", "android.hardware.audio.output"); 88 89 runTest(".audio.AudioFrequencyLineActivity"); 90 } 91 92 @Interactive 93 @Test 94 @SupportMultiDisplayMode 95 // MultiDisplayMode 96 // @NonApiTest(exemptionReasons = METRIC, 97 // justification = "this test is currently informational only") AudioFrequencyMicTest()98 public void AudioFrequencyMicTest() throws Exception { 99 requireFeatures( 100 "android.hardware.microphone", 101 "android.hardware.audio.output", 102 "android.hardware.usb.host"); 103 104 runTest(".audio.AudioFrequencyMicActivity"); 105 } 106 107 @Interactive 108 @Test 109 @SupportMultiDisplayMode 110 // MultiDisplayMode 111 // @NonApiTest(exemptionReasons = METRIC, 112 // justification = "this test is currently informational only") AudioFrequencySpeakerTest()113 public void AudioFrequencySpeakerTest() throws Exception { 114 requireFeatures("android.hardware.audio.output", "android.hardware.usb.host"); 115 116 runTest(".audio.AudioFrequencySpeakerActivity"); 117 } 118 119 @Interactive 120 @Test 121 @SupportMultiDisplayMode 122 // MultiDisplayMode 123 @CddTest(requirements = "5.11/C-1-1,C-1-2,C-1-3,C-1-4,C-1-5") AudioFrequencyUnprocessedTest()124 public void AudioFrequencyUnprocessedTest() throws Exception { 125 requireFeatures("android.hardware.microphone", "android.hardware.usb.host"); 126 127 runTest(".audio.AudioFrequencyUnprocessedActivity"); 128 } 129 130 @Interactive 131 @Test 132 @SupportMultiDisplayMode 133 // MultiDisplayMode 134 // @NonApiTest(exemptionReasons = METRIC, 135 // justification = "this test is currently informational only") AudioFrequencyVoiceRecognitionTest()136 public void AudioFrequencyVoiceRecognitionTest() throws Exception { 137 requireFeatures("android.hardware.microphone", "android.hardware.usb.host"); 138 139 runTest(".audio.AudioFrequencyVoiceRecognitionActivity"); 140 } 141 142 @Interactive 143 @Test 144 @SupportMultiDisplayMode 145 // MultiDisplayMode 146 @CddTest(requirements = "5.6/C-3-2") AudioInColdStartLatencyTest()147 public void AudioInColdStartLatencyTest() throws Exception { 148 excludeFeatures("android.hardware.type.watch", "android.hardware.type.television"); 149 150 runTest(".audio.AudioInColdStartLatencyActivity"); 151 } 152 153 @Interactive 154 @Test 155 @SupportMultiDisplayMode 156 // MultiDisplayMode 157 @ApiTest( 158 apis = { 159 "android.media.AudioManager#registerAudioDeviceCallback", 160 "android.media.AudioDeviceCallback#onAudioDevicesAdded", 161 "android.media.AudioDeviceCallback#onAudioDevicesRemoved" 162 }) AudioInputDeviceNotificationsTest()163 public void AudioInputDeviceNotificationsTest() throws Exception { 164 requireFeatures("android.hardware.microphone"); 165 excludeFeatures("android.software.leanback"); 166 167 runTest(".audio.AudioInputDeviceNotificationsActivity"); 168 } 169 170 @Interactive 171 @Test 172 @SupportMultiDisplayMode 173 // MultiDisplayMode 174 @ApiTest( 175 apis = { 176 "android.media.AudioRecord#addOnRoutingChangedListener", 177 "android.media.AudioRecord.OnRoutingChangedListener#onRoutingChanged" 178 }) AudioInputRoutingNotificationsTest()179 public void AudioInputRoutingNotificationsTest() throws Exception { 180 requireFeatures("android.hardware.microphone"); 181 excludeFeatures("android.software.leanback"); 182 183 runTest(".audio.AudioInputRoutingNotificationsActivity"); 184 } 185 186 @Interactive 187 @Test 188 @SupportMultiDisplayMode 189 // MultiDisplayMode 190 @CddTest(requirements = "5.10/C-1-2,C-1-5") AudioLoopbackLatencyTest()191 public void AudioLoopbackLatencyTest() throws Exception { 192 requireFeatures("android.hardware.microphone", "android.hardware.audio.output"); 193 excludeFeatures( 194 "android.hardware.type.watch", 195 "android.hardware.type.television", 196 "android.hardware.type.automotive"); 197 198 runTest(".audio.AudioLoopbackLatencyActivity"); 199 } 200 201 @Interactive 202 @Test 203 @SupportMultiDisplayMode 204 // MultiDisplayMode 205 @CddTest(requirements = "5.6/C-1-2") AudioOutColdStartLatencyTest()206 public void AudioOutColdStartLatencyTest() throws Exception { 207 excludeFeatures("android.hardware.type.watch", "android.hardware.type.television"); 208 209 runTest(".audio.AudioOutColdStartLatencyActivity"); 210 } 211 212 @Interactive 213 @Test 214 @SupportMultiDisplayMode 215 // MultiDisplayMode 216 @ApiTest( 217 apis = { 218 "android.media.AudioManager#registerAudioDeviceCallback", 219 "android.media.AudioDeviceCallback#onAudioDevicesAdded", 220 "android.media.AudioDeviceCallback#onAudioDevicesRemoved" 221 }) AudioOutputDeviceNotificationsTest()222 public void AudioOutputDeviceNotificationsTest() throws Exception { 223 requireFeatures("android.hardware.audio.output"); 224 excludeFeatures("android.software.leanback"); 225 226 runTest(".audio.AudioOutputDeviceNotificationsActivity"); 227 } 228 229 @Interactive 230 @Test 231 @SupportMultiDisplayMode 232 // MultiDisplayMode 233 @ApiTest( 234 apis = { 235 "android.media.AudioTrack#addOnRoutingChangedListener", 236 "android.media.AudioTrack.OnRoutingChangedListener#onRoutingChanged" 237 }) AudioOutputRoutingNotificationsTest()238 public void AudioOutputRoutingNotificationsTest() throws Exception { 239 requireFeatures("android.hardware.audio.output"); 240 excludeFeatures("android.software.leanback"); 241 242 runTest(".audio.AudioOutputRoutingNotificationsActivity"); 243 } 244 245 @Interactive 246 @Test 247 @SupportMultiDisplayMode 248 // MultiDisplayMode 249 @CddTest(requirements = "5.6") AudioTap2ToneTest()250 public void AudioTap2ToneTest() throws Exception { 251 // Interesting test 252 excludeFeatures( 253 "android.hardware.type.watch", 254 "android.hardware.type.television", 255 "android.hardware.type.automotive"); 256 257 runTest(".audio.AudioTap2ToneActivity"); 258 } 259 260 @Interactive 261 @Test 262 @SupportMultiDisplayMode 263 // MultiDisplayMode HifiUltrasoundTest()264 public void HifiUltrasoundTest() throws Exception { 265 requireFeatures("android.hardware.microphone"); 266 267 runTest(".audio.HifiUltrasoundTestActivity"); 268 } 269 270 @Interactive 271 @Test 272 @SupportMultiDisplayMode 273 // MultiDisplayMode 274 @CddTest(requirements = "7.8.3/C-1-1,C-1-2,C-2-1") HifiUltrasoundSpeakerTest()275 public void HifiUltrasoundSpeakerTest() throws Exception { 276 requireFeatures("android.hardware.audio.output"); 277 278 runTest(".audio.HifiUltrasoundSpeakerTestActivity"); 279 } 280 281 @Interactive 282 @Test 283 @SupportMultiDisplayMode 284 // MultiDisplayMode 285 @CddTest(requirements = "5.9/C-1-4,C-1-2") 286 @ApiTest( 287 apis = { 288 "android.media.midi.MidiManager#registerDeviceCallback", 289 "android.media.midi.MidiManager#getDevices", 290 "android.media.midi.MidiDevice#getInfo", 291 "android.media.midi.MidiDevice#openOutputPort", 292 "android.media.midi.MidiDevice#openInputPort", 293 "android.media.midi.MidiDeviceInfo#getOutputPortCount", 294 "android.media.midi.MidiDeviceInfo#getInputPortCount", 295 "android.media.midi.MidiInputPort#send" 296 }) MidiJavaTest()297 public void MidiJavaTest() throws Exception { 298 requireFeatures("android.hardware.usb.host:android.software.midi"); 299 300 runTest(".audio.MidiJavaTestActivity"); 301 } 302 303 @Interactive 304 @Test 305 @SupportMultiDisplayMode 306 // MultiDisplayMode 307 @CddTest(requirements = "5.9/C-1-3,C-1-2") MidiNativeTest()308 public void MidiNativeTest() throws Exception { 309 requireFeatures("android.hardware.usb.host", "android.software.midi"); 310 311 runTest(".audio.MidiNativeTestActivity"); 312 } 313 314 @Interactive 315 @Test 316 @SupportMultiDisplayMode 317 // MultiDisplayMode 318 @CddTest(requirements = "5.10/C-1-1,C-1-3,C-1-4") ProAudioTest()319 public void ProAudioTest() throws Exception { 320 requireFeatures("android.hardware.usb.host", "android.hardware.audio.pro"); 321 322 runTest(".audio.ProAudioActivity"); 323 } 324 325 @Interactive 326 @Test 327 @SupportMultiDisplayMode 328 // MultiDisplayMode 329 @CddTest(requirements = "7.7.2/H-1-1,H-4-4,H-4-5,H-4-6,H-4-7") 330 @ApiTest( 331 apis = { 332 "android.media.AudioManager#registerAudioDeviceCallback", 333 "android.media.AudioDeviceCallback#onAudioDevicesAdded", 334 "android.media.AudioDeviceCallback#onAudioDevicesRemoved", 335 "android.media.AudioDeviceInfo#getChannelCounts", 336 "android.media.AudioDeviceInfo#getEncodings", 337 "android.media.AudioDeviceInfo#getSampleRates", 338 "android.media.AudioDeviceInfo#getChannelIndexMasks" 339 }) USBAudioPeripheralAttributesTest()340 public void USBAudioPeripheralAttributesTest() throws Exception { 341 requireFeatures("android.hardware.usb.host"); 342 excludeFeatures( 343 "android.hardware.type.television", 344 "android.software.leanback", 345 "android.hardware.type.watch", 346 "android.hardware.type.automotive"); 347 348 runTest(".audio.USBAudioPeripheralAttributesActivity"); 349 } 350 351 @Interactive 352 @Test 353 @SupportMultiDisplayMode 354 // MultiDisplayMode 355 @CddTest(requirements = "7.7.2/C-2-1,C-2-2") USBAudioPeripheralButtonsTest()356 public void USBAudioPeripheralButtonsTest() throws Exception { 357 requireFeatures("android.hardware.usb.host"); 358 excludeFeatures( 359 "android.hardware.type.television", 360 "android.software.leanback", 361 "android.hardware.type.watch", 362 "android.hardware.type.automotive"); 363 364 runTest(".audio.USBAudioPeripheralButtonsActivity"); 365 } 366 367 @Interactive 368 @Test 369 @SupportMultiDisplayMode 370 // MultiDisplayMode 371 @CddTest(requirements = "7.8.2.2/H-1-2,H-2-1,H-3-1,H-4-2,H-4-3,H-4-4,H-4-5") 372 @ApiTest( 373 apis = { 374 "android.media.AudioManager#registerAudioDeviceCallback", 375 "android.media.AudioDeviceCallback#onAudioDevicesAdded", 376 "android.media.AudioDeviceCallback#onAudioDevicesRemoved", 377 "android.content.BroadcastReceiver#onReceive" 378 }) USBAudioPeripheralNotificationsTest()379 public void USBAudioPeripheralNotificationsTest() throws Exception { 380 requireFeatures("android.hardware.usb.host"); 381 excludeFeatures( 382 "android.hardware.type.television", 383 "android.software.leanback", 384 "android.hardware.type.watch", 385 "android.hardware.type.automotive"); 386 387 runTest(".audio.USBAudioPeripheralNotificationsTest"); 388 } 389 390 @Interactive 391 @Test 392 @SupportMultiDisplayMode 393 // MultiDisplayMode 394 @CddTest(requirements = "7.8.2/C-1-1,C-1-2") USBAudioPeripheralPlayTest()395 public void USBAudioPeripheralPlayTest() throws Exception { 396 requireFeatures("android.hardware.usb.host"); 397 excludeFeatures( 398 "android.hardware.type.television", 399 "android.software.leanback", 400 "android.hardware.type.watch", 401 "android.hardware.type.automotive"); 402 403 runTest(".audio.USBAudioPeripheralPlayActivity"); 404 } 405 406 @Interactive 407 @Test 408 @SupportMultiDisplayMode 409 // MultiDisplayMode 410 @CddTest(requirements = "7.8.2.2/H-1-1|7.7.2/C-2-1,C-2-2") 411 @ApiTest(apis = "android.app.Activity#onKeyDown") USBAudioPeripheralRecordTest()412 public void USBAudioPeripheralRecordTest() throws Exception { 413 requireFeatures("android.hardware.usb.host"); 414 excludeFeatures( 415 "android.hardware.type.television", 416 "android.software.leanback", 417 "android.hardware.type.watch", 418 "android.hardware.type.automotive"); 419 420 runTest(".audio.USBAudioPeripheralRecordActivity"); 421 } 422 423 @Interactive 424 @Test 425 @SupportMultiDisplayMode 426 // MultiDisplayMode 427 @ApiTest( 428 apis = { 429 "android.hardware.usb.UsbManager#getDeviceList", 430 "android.hardware.usb.UsbManager#requestPermission" 431 }) USBRestrictRecordATest()432 public void USBRestrictRecordATest() throws Exception { 433 requireFeatures("android.hardware.usb.host"); 434 excludeFeatures( 435 "android.hardware.type.television", 436 "android.software.leanback", 437 "android.hardware.type.watch", 438 "android.hardware.type.automotive"); 439 440 runTest(".audio.USBRestrictRecordAActivity"); 441 } 442 443 @Interactive 444 @Test 445 @SupportMultiDisplayMode 446 // MultiDisplayMode 447 @CddTest(requirements = "9.8.13/C-1-3") AudioMicrophoneMuteToggleTest()448 public void AudioMicrophoneMuteToggleTest() throws Exception { 449 runTest(".audio.AudioMicrophoneMuteToggleActivity", "config_has_mic_toggle"); 450 } 451 } 452