Take volume cap into account in CTS
Due to new regulations, music sent over a wired headset may be volume limited
until the user explicitly increases the limit, so CTS can't rely on being able
to set the volume to getStreamMaxVolume() in that case.
b/7198289
Change-Id: If4a8cd5778c083f704f448e071be53ccf9b93ef0
diff --git a/tests/tests/media/src/android/media/cts/AudioManagerTest.java b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
index dccfcaf..9500606 100644
--- a/tests/tests/media/src/android/media/cts/AudioManagerTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
@@ -305,6 +305,7 @@
mAudioManager.adjustVolume(ADJUST_RAISE, 0);
mAudioManager.adjustSuggestedStreamVolume(
ADJUST_LOWER, USE_DEFAULT_STREAM_TYPE, 0);
+ int maxMusicVolume = mAudioManager.getStreamMaxVolume(STREAM_MUSIC);
for (int i = 0; i < streams.length; i++) {
// set ringer mode to back normal to not interfere with volume tests
@@ -315,6 +316,21 @@
mAudioManager.setStreamVolume(streams[i], 1, 0);
assertEquals(1, mAudioManager.getStreamVolume(streams[i]));
+ if (streams[i] == AudioManager.STREAM_MUSIC && mAudioManager.isWiredHeadsetOn()) {
+ // due to new regulations, music sent over a wired headset may be volume limited
+ // until the user explicitly increases the limit, so we can't rely on being able
+ // to set the volume to getStreamMaxVolume(). Instead, determine the current limit
+ // by increasing the volume until it won't go any higher, then use that volume as
+ // the maximum for the purposes of this test
+ int curvol = 0;
+ int prevvol = 0;
+ do {
+ prevvol = curvol;
+ mAudioManager.adjustStreamVolume(streams[i], ADJUST_RAISE, 0);
+ curvol = mAudioManager.getStreamVolume(streams[i]);
+ } while (curvol != prevvol);
+ maxVolume = maxMusicVolume = curvol;
+ }
mAudioManager.setStreamVolume(streams[i], maxVolume, 0);
mAudioManager.adjustStreamVolume(streams[i], ADJUST_RAISE, 0);
assertEquals(maxVolume, mAudioManager.getStreamVolume(streams[i]));
@@ -348,7 +364,6 @@
}
// adjust volume
- int maxVolume = mAudioManager.getStreamMaxVolume(STREAM_MUSIC);
mAudioManager.adjustVolume(ADJUST_RAISE, 0);
MediaPlayer mp = MediaPlayer.create(mContext, MP3_TO_PLAY);
@@ -359,24 +374,24 @@
assertTrue(mAudioManager.isMusicActive());
// adjust volume as ADJUST_SAME
- for (int k = 0; k < maxVolume; k++) {
+ for (int k = 0; k < maxMusicVolume; k++) {
mAudioManager.adjustVolume(ADJUST_SAME, 0);
- assertEquals(maxVolume, mAudioManager.getStreamVolume(STREAM_MUSIC));
+ assertEquals(maxMusicVolume, mAudioManager.getStreamVolume(STREAM_MUSIC));
}
// adjust volume as ADJUST_RAISE
mAudioManager.setStreamVolume(STREAM_MUSIC, 1, 0);
- for (int k = 0; k < maxVolume - 1; k++) {
+ for (int k = 0; k < maxMusicVolume - 1; k++) {
mAudioManager.adjustVolume(ADJUST_RAISE, 0);
assertEquals(2 + k, mAudioManager.getStreamVolume(STREAM_MUSIC));
}
// adjust volume as ADJUST_LOWER
- mAudioManager.setStreamVolume(STREAM_MUSIC, maxVolume, 0);
- maxVolume = mAudioManager.getStreamVolume(STREAM_MUSIC);
+ mAudioManager.setStreamVolume(STREAM_MUSIC, maxMusicVolume, 0);
+ maxMusicVolume = mAudioManager.getStreamVolume(STREAM_MUSIC);
mAudioManager.adjustVolume(ADJUST_LOWER, 0);
- assertEquals(maxVolume - 1, mAudioManager.getStreamVolume(STREAM_MUSIC));
+ assertEquals(maxMusicVolume - 1, mAudioManager.getStreamVolume(STREAM_MUSIC));
mp.stop();
mp.release();
Thread.sleep(TIME_TO_PLAY);