From b09bf4b1f79e9c08e79c4e530f83b616e32245cf Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 26 Jun 2024 11:14:10 +0200 Subject: [PATCH] Introduce exception type for post-release PlaybackEngine usage attempts This allows for a more robust test as well as easier host-side checks. --- .../common/PlaybackEngineUsageAfterReleaseException.kt | 4 ++++ .../player/playbackengine/SingleHandlerPlaybackEngine.kt | 4 ++-- .../player/playbackengine/ExoPlayerPlaybackEngineTest.kt | 1 + .../sdk/player/playlog/SingleMediaProductPlayLogTest.kt | 8 +++++--- 4 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 player/common/src/main/kotlin/com/tidal/sdk/player/common/PlaybackEngineUsageAfterReleaseException.kt diff --git a/player/common/src/main/kotlin/com/tidal/sdk/player/common/PlaybackEngineUsageAfterReleaseException.kt b/player/common/src/main/kotlin/com/tidal/sdk/player/common/PlaybackEngineUsageAfterReleaseException.kt new file mode 100644 index 00000000..fd5c8a6e --- /dev/null +++ b/player/common/src/main/kotlin/com/tidal/sdk/player/common/PlaybackEngineUsageAfterReleaseException.kt @@ -0,0 +1,4 @@ +package com.tidal.sdk.player.common + +class PlaybackEngineUsageAfterReleaseException : + IllegalStateException("Attempted to use a released PlaybackEngine") diff --git a/player/playback-engine/src/main/kotlin/com/tidal/sdk/player/playbackengine/SingleHandlerPlaybackEngine.kt b/player/playback-engine/src/main/kotlin/com/tidal/sdk/player/playbackengine/SingleHandlerPlaybackEngine.kt index 4d1b9c48..5d80527a 100644 --- a/player/playback-engine/src/main/kotlin/com/tidal/sdk/player/playbackengine/SingleHandlerPlaybackEngine.kt +++ b/player/playback-engine/src/main/kotlin/com/tidal/sdk/player/playbackengine/SingleHandlerPlaybackEngine.kt @@ -1,6 +1,7 @@ package com.tidal.sdk.player.playbackengine import android.os.Handler +import com.tidal.sdk.player.common.PlaybackEngineUsageAfterReleaseException import com.tidal.sdk.player.common.model.AudioQuality import com.tidal.sdk.player.common.model.LoudnessNormalizationMode import com.tidal.sdk.player.common.model.MediaProduct @@ -78,8 +79,7 @@ internal class SingleHandlerPlaybackEngine( private fun postOrThrow(runnable: Runnable) { if (!handler.post(runnable)) { - val className = SingleHandlerPlaybackEngine::class.simpleName - error("Attempt to use a released instance of $className") + throw PlaybackEngineUsageAfterReleaseException() } } } diff --git a/player/playback-engine/src/test/kotlin/com/tidal/sdk/player/playbackengine/ExoPlayerPlaybackEngineTest.kt b/player/playback-engine/src/test/kotlin/com/tidal/sdk/player/playbackengine/ExoPlayerPlaybackEngineTest.kt index c8dd9911..dc155c49 100644 --- a/player/playback-engine/src/test/kotlin/com/tidal/sdk/player/playbackengine/ExoPlayerPlaybackEngineTest.kt +++ b/player/playback-engine/src/test/kotlin/com/tidal/sdk/player/playbackengine/ExoPlayerPlaybackEngineTest.kt @@ -473,6 +473,7 @@ internal class ExoPlayerPlaybackEngineTest { playbackEngine.release() + verify(initialExtendedExoPlayer).currentPositionMs verify(initialExtendedExoPlayer).release() verifyNoMoreInteractions(initialExtendedExoPlayer, looper) } diff --git a/player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/SingleMediaProductPlayLogTest.kt b/player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/SingleMediaProductPlayLogTest.kt index 9bcea163..a5f6b92b 100644 --- a/player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/SingleMediaProductPlayLogTest.kt +++ b/player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/SingleMediaProductPlayLogTest.kt @@ -18,6 +18,7 @@ import com.tidal.sdk.common.TidalMessage import com.tidal.sdk.eventproducer.EventSender import com.tidal.sdk.eventproducer.model.ConsentCategory import com.tidal.sdk.player.Player +import com.tidal.sdk.player.common.PlaybackEngineUsageAfterReleaseException import com.tidal.sdk.player.common.model.MediaProduct import com.tidal.sdk.player.common.model.ProductType import com.tidal.sdk.player.events.EventReporterModuleRoot @@ -151,9 +152,10 @@ internal class SingleMediaProductPlayLogTest { player.release() job.join() } - } catch (alreadyReleasedException: IllegalStateException) { - assertThat(alreadyReleasedException.message) - .isEqualTo("Attempt to use a released instance of SingleHandlerPlaybackEngine") + } catch (throwable: Throwable) { + if (throwable !is PlaybackEngineUsageAfterReleaseException) { + throw throwable + } } verify(eventSender, atMost(Int.MAX_VALUE)) .sendEvent(