Make HttpDataSourceException subclass DataSourceException.

PiperOrigin-RevId: 382551642
This commit is contained in:
claincly 2021-07-01 18:21:47 +01:00 committed by kim-vde
parent b0ddef5bcf
commit dda1d37368
2 changed files with 95 additions and 28 deletions

View File

@ -15,11 +15,31 @@
*/
package com.google.android.exoplayer2.upstream;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import java.io.IOException;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** Used to specify reason of a DataSource error. */
public final class DataSourceException extends IOException {
public class DataSourceException extends IOException {
/**
* The type of operation that produced the error. One of {@link #TYPE_READ}, {@link #TYPE_OPEN}
* {@link #TYPE_CLOSE}.
*/
@Documented
@Retention(RetentionPolicy.SOURCE)
@IntDef({TYPE_OPEN, TYPE_READ, TYPE_CLOSE})
public @interface Type {}
/** The error occurred reading data from a {@link DataSource}. */
public static final int TYPE_OPEN = 1;
/** The error occurred in opening a {@link DataSource}. */
public static final int TYPE_READ = 2;
/** The error occurred in closing a {@link DataSource}. */
public static final int TYPE_CLOSE = 3;
/**
* Returns whether the given {@link IOException} was caused by a {@link DataSourceException} whose
@ -45,17 +65,83 @@ public final class DataSourceException extends IOException {
*/
public static final int POSITION_OUT_OF_RANGE = 0;
/** Indicates that the error reason is unknown. */
public static final int REASON_UNKNOWN = 1;
/**
* The reason of this {@link DataSourceException}. It can only be {@link #POSITION_OUT_OF_RANGE}.
* The reason of this {@link DataSourceException}. It can only be {@link #POSITION_OUT_OF_RANGE},
* or {@link #REASON_UNKNOWN}.
*/
public final int reason;
/** The {@link Type} of the operation that caused the playback failure. */
@Type public final int type;
/**
* Constructs a DataSourceException with type {@link #TYPE_READ}.
*
* @deprecated Use the constructor {@link #DataSourceException(String, Throwable, int, int)}.
* @param reason Reason of the error. It can only be {@link #POSITION_OUT_OF_RANGE} or {@link
* #REASON_UNKNOWN}.
*/
@Deprecated
public DataSourceException(int reason) {
this.reason = reason;
this.type = TYPE_READ;
}
/**
* Constructs a DataSourceException.
*
* @param reason Reason of the error. It can only be {@link #POSITION_OUT_OF_RANGE}.
* @param message The error message.
* @param cause The error cause.
* @param reason Reason of the error. It can only be {@link #POSITION_OUT_OF_RANGE} or {@link
* #REASON_UNKNOWN}.
* @param type See {@link Type}.
*/
public DataSourceException(int reason) {
public DataSourceException(String message, Throwable cause, int reason, @Type int type) {
super(message, cause);
this.reason = reason;
this.type = type;
}
/**
* Constructs a DataSourceException.
*
* @param cause The error cause.
* @param reason Reason of the error. It can only be {@link #POSITION_OUT_OF_RANGE} or {@link
* #REASON_UNKNOWN}.
* @param type See {@link Type}.
*/
public DataSourceException(Throwable cause, int reason, @Type int type) {
super(cause);
this.reason = reason;
this.type = type;
}
/**
* Constructs a DataSourceException.
*
* @param message The error message.
* @param reason Reason of the error. It can only be {@link #POSITION_OUT_OF_RANGE} or {@link
* #REASON_UNKNOWN}.
* @param type See {@link Type}.
*/
public DataSourceException(String message, int reason, @Type int type) {
super(message);
this.reason = reason;
this.type = type;
}
/**
* Constructs a DataSourceException.
*
* @param reason Reason of the error. It can only be {@link #POSITION_OUT_OF_RANGE} or {@link
* #REASON_UNKNOWN}.
* @param type See {@link Type}.
*/
public DataSourceException(int reason, @Type int type) {
this.reason = reason;
this.type = type;
}
}

View File

@ -16,15 +16,11 @@
package com.google.android.exoplayer2.upstream;
import android.text.TextUtils;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.util.Util;
import com.google.common.base.Ascii;
import com.google.common.base.Predicate;
import java.io.IOException;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@ -188,45 +184,30 @@ public interface HttpDataSource extends DataSource {
};
/** Thrown when an error is encountered when trying to read from a {@link HttpDataSource}. */
class HttpDataSourceException extends IOException {
@Documented
@Retention(RetentionPolicy.SOURCE)
@IntDef({TYPE_OPEN, TYPE_READ, TYPE_CLOSE})
public @interface Type {}
public static final int TYPE_OPEN = 1;
public static final int TYPE_READ = 2;
public static final int TYPE_CLOSE = 3;
@Type public final int type;
class HttpDataSourceException extends DataSourceException {
/** The {@link DataSpec} associated with the current connection. */
public final DataSpec dataSpec;
public HttpDataSourceException(DataSpec dataSpec, @Type int type) {
super();
super(REASON_UNKNOWN, type);
this.dataSpec = dataSpec;
this.type = type;
}
public HttpDataSourceException(String message, DataSpec dataSpec, @Type int type) {
super(message);
super(message, REASON_UNKNOWN, type);
this.dataSpec = dataSpec;
this.type = type;
}
public HttpDataSourceException(IOException cause, DataSpec dataSpec, @Type int type) {
super(cause);
super(cause, REASON_UNKNOWN, type);
this.dataSpec = dataSpec;
this.type = type;
}
public HttpDataSourceException(
String message, IOException cause, DataSpec dataSpec, @Type int type) {
super(message, cause);
super(message, cause, REASON_UNKNOWN, type);
this.dataSpec = dataSpec;
this.type = type;
}
}