Merge "Test routing changed callback when first audio device is selected." into pie-cts-dev
diff --git a/tests/tests/media/src/android/media/cts/RoutingTest.java b/tests/tests/media/src/android/media/cts/RoutingTest.java
index 28d9564..e1765d8 100644
--- a/tests/tests/media/src/android/media/cts/RoutingTest.java
+++ b/tests/tests/media/src/android/media/cts/RoutingTest.java
@@ -71,9 +71,12 @@
private static final Set<Integer> AVAILABLE_INPUT_DEVICES_TYPE = new HashSet<>(
Arrays.asList(AudioDeviceInfo.TYPE_BUILTIN_MIC));
+ private boolean mRoutingChanged;
private AudioManager mAudioManager;
private CountDownLatch mRoutingChangedLatch;
private File mOutFile;
+ private Looper mRoutingChangedLooper;
+ private Object mRoutingChangedLock = new Object();
@Override
protected void setUp() throws Exception {
@@ -556,6 +559,10 @@
if (mRoutingChangedLatch != null) {
mRoutingChangedLatch.countDown();
}
+ synchronized (mRoutingChangedLock) {
+ mRoutingChanged = true;
+ mRoutingChangedLock.notify();
+ }
}
}
@@ -563,7 +570,7 @@
final int resid = R.raw.testmp3_2;
MediaPlayer mediaPlayer = MediaPlayer.create(mContext, resid);
mediaPlayer.setAudioAttributes(
- new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build());
+ new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build());
mediaPlayer.start();
return mediaPlayer;
}
@@ -653,54 +660,41 @@
}
}
- public void test_MediaPlayer_RoutingChangedCallback() {
+ public void test_MediaPlayer_RoutingChangedCallback() throws Exception {
if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) {
// Can't do it so skip this test
return;
}
- MediaPlayer mediaPlayer = allocMediaPlayer();
- AudioRoutingListener listener = new AudioRoutingListener();
- mediaPlayer.addOnRoutingChangedListener(listener, null);
-
- AudioDeviceInfo[] deviceList = mAudioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
- if (deviceList.length < 2) {
- // The available output device is less than 2, we can't switch output device.
- return;
- }
- Set<Integer> testedDeviceTypes = new HashSet<>();
- for (AudioDeviceInfo device : deviceList) {
- final int deviceType = device.getType();
- if (testedDeviceTypes.contains(deviceType)) {
- // b/122478352 setPreferredDevice can not differentiate devices with same type.
- continue;
+ mRoutingChanged = false;
+ mRoutingChangedLooper = null;
+ // Create MediaPlayer in another thread to make sure there is a looper active for events.
+ Thread t = new Thread() {
+ @Override
+ public void run() {
+ Looper.prepare();
+ // Keep looper to terminate when the test is finished.
+ mRoutingChangedLooper = Looper.myLooper();
+ AudioRoutingListener listener = new AudioRoutingListener();
+ MediaPlayer mediaPlayer = allocMediaPlayer();
+ mediaPlayer.addOnRoutingChangedListener(listener, null);
+ Looper.loop();
+ mediaPlayer.removeOnRoutingChangedListener(listener);
+ mediaPlayer.stop();
+ mediaPlayer.release();
}
- testedDeviceTypes.add(deviceType);
- assertTrue(mediaPlayer.setPreferredDevice(device));
- boolean routingChanged = false;
- for (int i = 0; i < MAX_WAITING_ROUTING_CHANGED_COUNT; i++) {
- // Create a new CountDownLatch in case it is triggered by previous routing change.
- mRoutingChangedLatch = new CountDownLatch(1);
- try {
- mRoutingChangedLatch.await(WAIT_ROUTING_CHANGE_TIME_MS, TimeUnit.MILLISECONDS);
- } catch (InterruptedException e) {
- }
- AudioDeviceInfo routedDevice = mediaPlayer.getRoutedDevice();
- if (routedDevice == null) {
- continue;
- }
- if (routedDevice.getId() == device.getId()) {
- routingChanged = true;
- break;
- }
- }
- assertTrue("Switching to device " + device.getType() + " failed",
- routingChanged);
+ };
+ t.start();
+ synchronized (mRoutingChangedLock) {
+ mRoutingChangedLock.wait(WAIT_ROUTING_CHANGE_TIME_MS
+ * MAX_WAITING_ROUTING_CHANGED_COUNT);
}
-
- mediaPlayer.removeOnRoutingChangedListener(listener);
- mediaPlayer.stop();
- mediaPlayer.release();
+ if (mRoutingChangedLooper != null) {
+ mRoutingChangedLooper.quitSafely();
+ mRoutingChangedLooper = null;
+ }
+ t.join();
+ assertTrue("Routing changed callback has not been called", mRoutingChanged);
}
public void test_mediaPlayer_incallMusicRoutingPermissions() {