blob: 3de8a51026ec9f6f4a973ac5e8c60913095e0160 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.media.cts;
import static android.media.AudioManager.ADJUST_LOWER;
import static android.media.AudioManager.ADJUST_RAISE;
import static android.media.AudioManager.ADJUST_SAME;
import static android.media.AudioManager.FLAG_ALLOW_RINGER_MODES;
import static android.media.AudioManager.FLAG_SHOW_UI;
import static android.media.AudioManager.MODE_IN_CALL;
import static android.media.AudioManager.MODE_NORMAL;
import static android.media.AudioManager.MODE_RINGTONE;
import static android.media.AudioManager.RINGER_MODE_NORMAL;
import static android.media.AudioManager.RINGER_MODE_SILENT;
import static android.media.AudioManager.RINGER_MODE_VIBRATE;
import static android.media.AudioManager.STREAM_MUSIC;
import static android.media.AudioManager.USE_DEFAULT_STREAM_TYPE;
import static android.media.AudioManager.VIBRATE_SETTING_OFF;
import static android.media.AudioManager.VIBRATE_SETTING_ON;
import static android.media.AudioManager.VIBRATE_SETTING_ONLY_SILENT;
import static android.media.AudioManager.VIBRATE_TYPE_NOTIFICATION;
import static android.media.AudioManager.VIBRATE_TYPE_RINGER;
import static android.provider.Settings.System.SOUND_EFFECTS_ENABLED;
import com.android.cts.stub.R;
import dalvik.annotation.BrokenTest;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargets;
import dalvik.annotation.ToBeFixed;
import android.app.cts.CTSResult;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.view.SoundEffectConstants;
@TestTargetClass(AudioManager.class)
public class AudioManagerTest extends AndroidTestCase implements CTSResult {
private final static int MP3_TO_PLAY = R.raw.testmp3;
private final static long TIME_TO_PLAY = 2000;
private AudioManager mAudioManager;
private int mResultCode;
private Sync mSync = new Sync();
private static class Sync {
private boolean notified;
synchronized void notifyResult() {
notified = true;
notify();
}
synchronized void waitForResult() throws Exception {
if (!notified) {
wait();
}
}
}
@Override
protected void setUp() throws Exception {
super.setUp();
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setStreamMute",
args = {int.class, boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setStreamSolo",
args = {int.class, boolean.class}
)
})
@BrokenTest("flaky")
public void testMuteSolo() throws Exception {
/**
* this test must be run on screen unlocked model
*/
AudioManagerStub.setCTSResult(this);
Intent intent = new Intent();
intent.setClass(mContext, AudioManagerStub.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
mSync.waitForResult();
assertEquals(CTSResult.RESULT_OK, mResultCode);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setMicrophoneMute",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isMicrophoneMute",
args = {}
)
})
public void testMicrophoneMute() throws Exception {
mAudioManager.setMicrophoneMute(true);
assertTrue(mAudioManager.isMicrophoneMute());
mAudioManager.setMicrophoneMute(false);
assertFalse(mAudioManager.isMicrophoneMute());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "unloadSoundEffects",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "playSoundEffect",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "playSoundEffect",
args = {int.class, float.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "loadSoundEffects",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setRingerMode",
args = {int.class}
)
})
public void testSoundEffects() throws Exception {
// set relative setting
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Settings.System.putInt(mContext.getContentResolver(), SOUND_EFFECTS_ENABLED, 1);
// should hear sound after loadSoundEffects() called.
mAudioManager.loadSoundEffects();
Thread.sleep(TIME_TO_PLAY);
float volume = 13;
mAudioManager.playSoundEffect(SoundEffectConstants.CLICK);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_UP);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_DOWN);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_LEFT);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_RIGHT);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_UP, volume);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_DOWN, volume);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_LEFT, volume);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_RIGHT, volume);
// won't hear sound after unloadSoundEffects() called();
mAudioManager.unloadSoundEffects();
mAudioManager.playSoundEffect(AudioManager.FX_KEY_CLICK);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_UP);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_DOWN);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_LEFT);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_RIGHT);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_UP, volume);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_DOWN, volume);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_LEFT, volume);
mAudioManager.playSoundEffect(AudioManager.FX_FOCUS_NAVIGATION_RIGHT, volume);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isMusicActive",
args = {}
)
})
public void testMusicActive() throws Exception {
MediaPlayer mp = MediaPlayer.create(mContext, MP3_TO_PLAY);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.start();
Thread.sleep(TIME_TO_PLAY);
assertTrue(mAudioManager.isMusicActive());
Thread.sleep(TIME_TO_PLAY);
mp.stop();
mp.release();
Thread.sleep(TIME_TO_PLAY);
assertFalse(mAudioManager.isMusicActive());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setMode",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getMode",
args = {}
)
})
public void testAccessMode() throws Exception {
mAudioManager.setMode(MODE_RINGTONE);
assertEquals(MODE_RINGTONE, mAudioManager.getMode());
mAudioManager.setMode(MODE_IN_CALL);
assertEquals(MODE_IN_CALL, mAudioManager.getMode());
mAudioManager.setMode(MODE_NORMAL);
assertEquals(MODE_NORMAL, mAudioManager.getMode());
}
@SuppressWarnings("deprecation")
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setBluetoothA2dpOn",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setBluetoothScoOn",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getRouting",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isBluetoothA2dpOn",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isBluetoothScoOn",
args = {}
),
@TestTargetNew(
level = TestLevel.NOT_FEASIBLE,
method = "setRouting",
args = {int.class, int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setSpeakerphoneOn",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isSpeakerphoneOn",
args = {}
)
})
@ToBeFixed(bug="1713090", explanation="setRouting() has not only been deprecated, but is no"
+ " longer having any effect.")
public void testRouting() throws Exception {
// setBluetoothA2dpOn is a no-op, and getRouting should always return -1
// AudioManager.MODE_CURRENT
boolean oldA2DP = mAudioManager.isBluetoothA2dpOn();
mAudioManager.setBluetoothA2dpOn(true);
assertEquals(oldA2DP , mAudioManager.isBluetoothA2dpOn());
mAudioManager.setBluetoothA2dpOn(false);
assertEquals(oldA2DP , mAudioManager.isBluetoothA2dpOn());
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_RINGTONE));
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_NORMAL));
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_IN_CALL));
mAudioManager.setBluetoothScoOn(true);
assertTrue(mAudioManager.isBluetoothScoOn());
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_RINGTONE));
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_NORMAL));
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_IN_CALL));
mAudioManager.setBluetoothScoOn(false);
assertFalse(mAudioManager.isBluetoothScoOn());
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_RINGTONE));
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_NORMAL));
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_IN_CALL));
mAudioManager.setSpeakerphoneOn(true);
assertTrue(mAudioManager.isSpeakerphoneOn());
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_IN_CALL));
mAudioManager.setSpeakerphoneOn(false);
assertFalse(mAudioManager.isSpeakerphoneOn());
assertEquals(AudioManager.MODE_CURRENT, mAudioManager.getRouting(MODE_IN_CALL));
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "shouldVibrate",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setVibrateSetting",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getVibrateSetting",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setRingerMode",
args = {int.class}
)
})
public void testVibrateNotification() throws Exception {
// VIBRATE_SETTING_ON
mAudioManager.setVibrateSetting(VIBRATE_TYPE_NOTIFICATION, VIBRATE_SETTING_ON);
assertEquals(VIBRATE_SETTING_ON,
mAudioManager.getVibrateSetting(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertTrue(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
assertTrue(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
// VIBRATE_SETTING_OFF
mAudioManager.setVibrateSetting(VIBRATE_TYPE_NOTIFICATION, VIBRATE_SETTING_OFF);
assertEquals(VIBRATE_SETTING_OFF,
mAudioManager.getVibrateSetting(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
// VIBRATE_SETTING_ONLY_SILENT
mAudioManager.setVibrateSetting(VIBRATE_TYPE_NOTIFICATION, VIBRATE_SETTING_ONLY_SILENT);
assertEquals(VIBRATE_SETTING_ONLY_SILENT, mAudioManager
.getVibrateSetting(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
assertTrue(mAudioManager.shouldVibrate(VIBRATE_TYPE_NOTIFICATION));
// VIBRATE_TYPE_NOTIFICATION
mAudioManager.setVibrateSetting(VIBRATE_TYPE_NOTIFICATION, VIBRATE_SETTING_ON);
assertEquals(VIBRATE_SETTING_ON,
mAudioManager.getVibrateSetting(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setVibrateSetting(VIBRATE_TYPE_NOTIFICATION, VIBRATE_SETTING_OFF);
assertEquals(VIBRATE_SETTING_OFF, mAudioManager
.getVibrateSetting(VIBRATE_TYPE_NOTIFICATION));
mAudioManager.setVibrateSetting(VIBRATE_TYPE_NOTIFICATION, VIBRATE_SETTING_ONLY_SILENT);
assertEquals(VIBRATE_SETTING_ONLY_SILENT,
mAudioManager.getVibrateSetting(VIBRATE_TYPE_NOTIFICATION));
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "shouldVibrate",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setVibrateSetting",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getVibrateSetting",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setRingerMode",
args = {int.class}
)
})
public void testVibrateRinger() throws Exception {
// VIBRATE_TYPE_RINGER
mAudioManager.setVibrateSetting(VIBRATE_TYPE_RINGER, VIBRATE_SETTING_ON);
assertEquals(VIBRATE_SETTING_ON, mAudioManager.getVibrateSetting(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertTrue(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
assertTrue(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
// VIBRATE_SETTING_OFF
mAudioManager.setVibrateSetting(VIBRATE_TYPE_RINGER, VIBRATE_SETTING_OFF);
assertEquals(VIBRATE_SETTING_OFF, mAudioManager.getVibrateSetting(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
// Note: as of Froyo, if VIBRATE_TYPE_RINGER is set to OFF, it will
// not vibrate, even in RINGER_MODE_VIBRATE. This allows users to
// disable the vibration for incoming calls only.
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
// VIBRATE_SETTING_ONLY_SILENT
mAudioManager.setVibrateSetting(VIBRATE_TYPE_RINGER, VIBRATE_SETTING_ONLY_SILENT);
assertEquals(VIBRATE_SETTING_ONLY_SILENT, mAudioManager
.getVibrateSetting(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertFalse(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
assertTrue(mAudioManager.shouldVibrate(VIBRATE_TYPE_RINGER));
// VIBRATE_TYPE_NOTIFICATION
mAudioManager.setVibrateSetting(VIBRATE_TYPE_RINGER, VIBRATE_SETTING_ON);
assertEquals(VIBRATE_SETTING_ON, mAudioManager.getVibrateSetting(VIBRATE_TYPE_RINGER));
mAudioManager.setVibrateSetting(VIBRATE_TYPE_RINGER, VIBRATE_SETTING_OFF);
assertEquals(VIBRATE_SETTING_OFF, mAudioManager.getVibrateSetting(VIBRATE_TYPE_RINGER));
mAudioManager.setVibrateSetting(VIBRATE_TYPE_RINGER, VIBRATE_SETTING_ONLY_SILENT);
assertEquals(VIBRATE_SETTING_ONLY_SILENT,
mAudioManager.getVibrateSetting(VIBRATE_TYPE_RINGER));
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "unloadSoundEffects",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getRingerMode",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setRingerMode",
args = {int.class}
)
})
public void testAccessRingMode() throws Exception {
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertEquals(RINGER_MODE_NORMAL, mAudioManager.getRingerMode());
mAudioManager.setRingerMode(RINGER_MODE_SILENT);
assertEquals(RINGER_MODE_SILENT, mAudioManager.getRingerMode());
mAudioManager.setRingerMode(RINGER_MODE_VIBRATE);
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setStreamVolume",
args = {int.class, int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getStreamMaxVolume",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getStreamVolume",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "adjustStreamVolume",
args = {int.class, int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "adjustSuggestedStreamVolume",
args = {int.class, int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "adjustVolume",
args = {int.class, int.class}
)
})
public void testVolume() throws Exception {
int[] streams = { AudioManager.STREAM_ALARM,
AudioManager.STREAM_MUSIC,
AudioManager.STREAM_SYSTEM,
AudioManager.STREAM_VOICE_CALL,
AudioManager.STREAM_RING };
mAudioManager.adjustVolume(ADJUST_RAISE, 100);
mAudioManager.adjustSuggestedStreamVolume(
ADJUST_LOWER, USE_DEFAULT_STREAM_TYPE, FLAG_SHOW_UI);
for (int i = 0; i < streams.length; i++) {
int maxVolume = mAudioManager.getStreamMaxVolume(streams[i]);
mAudioManager.setStreamVolume(streams[i], 1, FLAG_SHOW_UI);
assertEquals(1, mAudioManager.getStreamVolume(streams[i]));
mAudioManager.setStreamVolume(streams[i], maxVolume, FLAG_SHOW_UI);
mAudioManager.adjustStreamVolume(streams[i], ADJUST_RAISE, FLAG_SHOW_UI);
assertEquals(maxVolume, mAudioManager.getStreamVolume(streams[i]));
mAudioManager.adjustSuggestedStreamVolume(ADJUST_LOWER, streams[i], FLAG_SHOW_UI);
assertEquals(maxVolume - 1, mAudioManager.getStreamVolume(streams[i]));
// volume lower
mAudioManager.setStreamVolume(streams[i], maxVolume, FLAG_SHOW_UI);
for (int k = maxVolume; k > 0; k--) {
mAudioManager.adjustStreamVolume(streams[i], ADJUST_LOWER, FLAG_SHOW_UI);
assertEquals(k - 1, mAudioManager.getStreamVolume(streams[i]));
}
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertEquals(RINGER_MODE_NORMAL, mAudioManager.getRingerMode());
mAudioManager.setStreamVolume(streams[i], 1, FLAG_SHOW_UI);
assertEquals(1, mAudioManager.getStreamVolume(streams[i]));
if (streams[i] == AudioManager.STREAM_RING) {
mAudioManager.adjustStreamVolume(streams[i], ADJUST_LOWER, FLAG_SHOW_UI);
assertEquals(0, mAudioManager.getStreamVolume(streams[i]));
// adjusting the volume to zero should result in either silent or vibrate mode
assertTrue(mAudioManager.getRingerMode() == RINGER_MODE_VIBRATE ||
mAudioManager.getRingerMode() == RINGER_MODE_SILENT);
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
assertEquals(RINGER_MODE_NORMAL, mAudioManager.getRingerMode());
assertEquals(1, mAudioManager.getStreamVolume(streams[i]));
} else {
mAudioManager.adjustStreamVolume(streams[i], ADJUST_LOWER, FLAG_SHOW_UI);
assertEquals(0, mAudioManager.getStreamVolume(streams[i]));
// lowering the volume should NOT have changed the ringer mode
assertEquals(RINGER_MODE_NORMAL, mAudioManager.getRingerMode());
// API quirk: volume must be decremented from 1 to get ringer mode change
mAudioManager.setStreamVolume(streams[i], 1, FLAG_SHOW_UI);
mAudioManager.adjustStreamVolume(streams[i], ADJUST_LOWER, FLAG_ALLOW_RINGER_MODES);
// lowering the volume should have changed the ringer mode
assertEquals(RINGER_MODE_VIBRATE, mAudioManager.getRingerMode());
mAudioManager.adjustStreamVolume(streams[i], ADJUST_LOWER, FLAG_ALLOW_RINGER_MODES);
// adjusting the volume to zero should result in either silent or vibrate mode
assertTrue(mAudioManager.getRingerMode() == RINGER_MODE_VIBRATE ||
mAudioManager.getRingerMode() == RINGER_MODE_SILENT);
mAudioManager.adjustStreamVolume(streams[i], ADJUST_RAISE, FLAG_ALLOW_RINGER_MODES);
// There are two possible ways the device may work. It may have a silent/vibrate
// mode or it may have distinct silent and vibrate modes.
assertTrue(mAudioManager.getRingerMode() == RINGER_MODE_NORMAL ||
mAudioManager.getRingerMode() == RINGER_MODE_VIBRATE);
// Increase the volume one more time to get out of the vibrate mode which may
// be separate from silent mode.
mAudioManager.adjustStreamVolume(streams[i], ADJUST_RAISE, FLAG_ALLOW_RINGER_MODES);
assertEquals(RINGER_MODE_NORMAL, mAudioManager.getRingerMode());
}
// volume raise
mAudioManager.setStreamVolume(streams[i], 0, FLAG_SHOW_UI);
for (int k = 0; k < maxVolume; k++) {
mAudioManager.adjustStreamVolume(streams[i], ADJUST_RAISE, FLAG_SHOW_UI);
assertEquals(1 + k, mAudioManager.getStreamVolume(streams[i]));
}
// volume same
mAudioManager.setStreamVolume(streams[i], maxVolume, FLAG_SHOW_UI);
for (int k = 0; k < maxVolume; k++) {
mAudioManager.adjustStreamVolume(streams[i], ADJUST_SAME, FLAG_SHOW_UI);
assertEquals(maxVolume, mAudioManager.getStreamVolume(streams[i]));
}
mAudioManager.setStreamVolume(streams[i], maxVolume, FLAG_SHOW_UI);
}
// adjust volume
int maxVolume = mAudioManager.getStreamMaxVolume(STREAM_MUSIC);
mAudioManager.adjustVolume(ADJUST_RAISE, 100);
MediaPlayer mp = MediaPlayer.create(mContext, MP3_TO_PLAY);
mp.setAudioStreamType(STREAM_MUSIC);
mp.setLooping(true);
mp.start();
Thread.sleep(TIME_TO_PLAY);
assertTrue(mAudioManager.isMusicActive());
// adjust volume as ADJUST_SAME
for (int k = 0; k < maxVolume; k++) {
mAudioManager.adjustVolume(ADJUST_SAME, FLAG_SHOW_UI);
assertEquals(maxVolume, mAudioManager.getStreamVolume(STREAM_MUSIC));
}
// adjust volume as ADJUST_RAISE
mAudioManager.setStreamVolume(STREAM_MUSIC, 1, FLAG_SHOW_UI);
for (int k = 0; k < maxVolume - 1; k++) {
mAudioManager.adjustVolume(ADJUST_RAISE, FLAG_SHOW_UI);
assertEquals(2 + k, mAudioManager.getStreamVolume(STREAM_MUSIC));
}
// adjust volume as ADJUST_LOWER
mAudioManager.setStreamVolume(STREAM_MUSIC, maxVolume, FLAG_SHOW_UI);
maxVolume = mAudioManager.getStreamVolume(STREAM_MUSIC);
mAudioManager.adjustVolume(ADJUST_LOWER, FLAG_SHOW_UI);
assertEquals(maxVolume - 1, mAudioManager.getStreamVolume(STREAM_MUSIC));
mp.stop();
mp.release();
Thread.sleep(TIME_TO_PLAY);
assertFalse(mAudioManager.isMusicActive());
}
public void setResult(int resultCode) {
mSync.notifyResult();
mResultCode = resultCode;
}
}