/** Stops the current playback, returns once it has stopped. */ private void stopCurrentPlayback() { boolean isPlaying; CountDownLatch engineInitializedLatch; CountDownLatch playbackFinishedLatch; synchronized (lock) { isPlaying = mHasStartedPlayback && !hasPlaybackFinished(); engineInitializedLatch = mEngineInitializedLatch; playbackFinishedLatch = mPlaybackFinishedLatch; if (isPlaying) { mSkipCompletionReport = true; } } if (isPlaying) { waitForLatch(engineInitializedLatch); VariableSpeedNative.stopPlayback(); waitForLatch(playbackFinishedLatch); } }