Distinguish exceptions caught at top level.

This commit is contained in:
Oliver Woodman 2015-05-01 20:31:49 +01:00
parent efb9ff1fe7
commit 0c5a1a6c35
2 changed files with 16 additions and 2 deletions

View File

@ -20,18 +20,32 @@ package com.google.android.exoplayer;
* <p>
* 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;
}
}

View File

@ -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;
}