From ae6907e1f59f616c9da003c0bf8375564e93eb72 Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 28 Oct 2020 12:10:04 +0000 Subject: [PATCH] Don't rely on events after player release in ExoHostedTest ExoHostedTest was calculating the total play time by solely listening to onIsPlayingChanged. The last update to false (when playback ends) was relying on a callback that was always called after the player has already been released. This happened because of a now fixed bug where callbacks were still issued if player.release() is called from within another callback (as in ExoHostedTest). Fix the currently broken test by posting the release call so that all pending events are still delivered first. PiperOrigin-RevId: 339438863 --- .../google/android/exoplayer2/testutil/ExoHostedTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java index fbdd9590aa..179162d414 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.testutil; +import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull; import static com.google.common.truth.Truth.assertWithMessage; import android.os.ConditionVariable; @@ -184,7 +185,9 @@ public abstract class ExoHostedTest implements AnalyticsListener, HostedTest { playerWasPrepared |= playbackState != Player.STATE_IDLE; if (playbackState == Player.STATE_ENDED || (playbackState == Player.STATE_IDLE && playerWasPrepared)) { - stopTest(); + // Post stopTest to ensure all currently pending events (e.g. onIsPlayingChanged or + // onPlayerError) are still delivered before the player is released. + checkStateNotNull(actionHandler).post(this::stopTest); } }