diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlaybackException.java b/library/src/main/java/com/google/android/exoplayer/ExoPlaybackException.java index 4c11104724..3e391a1fd8 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlaybackException.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlaybackException.java @@ -20,18 +20,32 @@ package com.google.android.exoplayer; *
* Where possible, the cause returned by {@link #getCause()} will indicate the reason for failure. */ -public class ExoPlaybackException extends Exception { +public final class ExoPlaybackException extends Exception { + + /** + * True if the cause (i.e. the {@link Throwable} returned by {@link #getCause()}) was only caught + * by a fail-safe at the top level of the player. False otherwise. + */ + public final boolean caughtAtTopLevel; public ExoPlaybackException(String message) { super(message); + caughtAtTopLevel = false; } public ExoPlaybackException(Throwable cause) { super(cause); + caughtAtTopLevel = false; } public ExoPlaybackException(String message, Throwable cause) { super(message, cause); + caughtAtTopLevel = false; + } + + /* package */ ExoPlaybackException(Throwable cause, boolean caughtAtTopLevel) { + super(cause); + this.caughtAtTopLevel = caughtAtTopLevel; } } diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java index 398aa431ac..bf45253b52 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java @@ -233,7 +233,7 @@ import java.util.List; return true; } catch (RuntimeException e) { Log.e(TAG, "Internal runtime error.", e); - eventHandler.obtainMessage(MSG_ERROR, new ExoPlaybackException(e)).sendToTarget(); + eventHandler.obtainMessage(MSG_ERROR, new ExoPlaybackException(e, true)).sendToTarget(); stopInternal(); return true; }