diff --git a/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java b/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java
index 5c93130de6..58df649d65 100644
--- a/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java
+++ b/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java
@@ -25,10 +25,10 @@ public class TimeRangeTest extends TestCase {
public void testEquals() {
TimeRange timeRange1 = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, 30000000);
assertTrue(timeRange1.equals(timeRange1));
-
+
TimeRange timeRange2 = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, 30000000);
assertTrue(timeRange1.equals(timeRange2));
-
+
TimeRange timeRange3 = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, 60000000);
assertFalse(timeRange1.equals(timeRange3));
}
diff --git a/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java b/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java
index 70d3b195db..db387c179a 100644
--- a/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java
+++ b/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java
@@ -82,7 +82,6 @@ public class DashChunkSourceTest extends InstrumentationTestCase {
new Format("3", "video/mp4", WIDE_WIDTH, 50, -1, -1, -1, 1000);
@Mock private DataSource mockDataSource;
- @Mock private ManifestFetcher mockManifestFetcher;
@Override
public void setUp() throws Exception {
diff --git a/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java b/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
index 074a1de01a..3fd2bfedd9 100644
--- a/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
+++ b/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
@@ -20,7 +20,7 @@ import java.io.IOException;
/**
* Thrown when a live playback falls behind the available media window.
*/
-public class BehindLiveWindowException extends IOException {
+public final class BehindLiveWindowException extends IOException {
public BehindLiveWindowException() {
super();
diff --git a/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java b/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java
index 81e55446eb..4be481259c 100644
--- a/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java
+++ b/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java
@@ -23,7 +23,7 @@ import android.media.MediaExtractor;
/**
* Compatibility wrapper around {@link android.media.MediaCodec.CryptoInfo}.
*/
-public class CryptoInfo {
+public final class CryptoInfo {
/**
* @see android.media.MediaCodec.CryptoInfo#iv
diff --git a/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java b/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java
index c85453c05f..17d8512bf9 100644
--- a/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java
+++ b/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java
@@ -39,7 +39,7 @@ import java.util.List;
* itself as a task with priority {@link NetworkLock#STREAMING_PRIORITY} during loading periods,
* and unregistering itself during draining periods.
*/
-public class DefaultLoadControl implements LoadControl {
+public final class DefaultLoadControl implements LoadControl {
/**
* Interface definition for a callback to be notified of {@link DefaultLoadControl} events.
diff --git a/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java
index dfcf7660a8..1a1305898e 100644
--- a/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java
+++ b/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java
@@ -22,7 +22,7 @@ package com.google.android.exoplayer;
* to request that it should be ignored. {@link IllegalStateException} is thrown from all methods
* that are documented to indicate that they should not be invoked unless the renderer is prepared.
*/
-public class DummyTrackRenderer extends TrackRenderer {
+public final class DummyTrackRenderer extends TrackRenderer {
@Override
protected int doPrepare(long positionUs) {
diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
index 1fc0cdcae4..be06690ca1 100644
--- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
+++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
@@ -18,10 +18,7 @@ package com.google.android.exoplayer;
/**
* Information about the ExoPlayer library.
*/
-// TODO: This file should be automatically generated by the build system.
-public class ExoPlayerLibraryInfo {
-
- private ExoPlayerLibraryInfo() {}
+public final class ExoPlayerLibraryInfo {
/**
* The version of the library, expressed as a string.
@@ -48,4 +45,6 @@ public class ExoPlayerLibraryInfo {
*/
public static final boolean TRACE_ENABLED = true;
+ private ExoPlayerLibraryInfo() {}
+
}
diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java
index ff3a453b16..8cffd8a852 100644
--- a/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java
+++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java
@@ -34,7 +34,7 @@ import java.util.HashMap;
* A utility class for querying the available codecs.
*/
@TargetApi(16)
-public class MediaCodecUtil {
+public final class MediaCodecUtil {
/**
* Thrown when an error occurs querying the device for its underlying media capabilities.
@@ -54,6 +54,8 @@ public class MediaCodecUtil {
private static final HashMap> codecs = new HashMap<>();
+ private MediaCodecUtil() {}
+
/**
* Get information about the decoder that will be used for a given mime type.
*
diff --git a/library/src/main/java/com/google/android/exoplayer/MediaFormat.java b/library/src/main/java/com/google/android/exoplayer/MediaFormat.java
index 34407f4042..c1de1160c9 100644
--- a/library/src/main/java/com/google/android/exoplayer/MediaFormat.java
+++ b/library/src/main/java/com/google/android/exoplayer/MediaFormat.java
@@ -29,7 +29,7 @@ import java.util.List;
/**
* Defines the format of an elementary media stream.
*/
-public class MediaFormat {
+public final class MediaFormat {
private static final String KEY_PIXEL_WIDTH_HEIGHT_RATIO =
"com.google.android.videos.pixelWidthHeightRatio";
diff --git a/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java b/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java
index 1245ea6454..ce93136734 100644
--- a/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java
+++ b/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java
@@ -25,7 +25,7 @@ import android.view.Choreographer.FrameCallback;
* Makes a best effort to adjust frame release timestamps for a smoother visual result.
*/
@TargetApi(16)
-public class SmoothFrameReleaseTimeHelper implements FrameReleaseTimeHelper, FrameCallback {
+public final class SmoothFrameReleaseTimeHelper implements FrameReleaseTimeHelper, FrameCallback {
private static final long CHOREOGRAPHER_SAMPLE_DELAY_MILLIS = 500;
private static final long MAX_ALLOWED_DRIFT_NS = 20000000;
diff --git a/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java b/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java
index f4b85b0d35..3b6871c811 100644
--- a/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java
+++ b/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java
@@ -21,7 +21,7 @@ import android.os.SystemClock;
* A standalone {@link MediaClock}. The clock can be started, stopped and its time can be set and
* retrieved. When started, this clock is based on {@link SystemClock#elapsedRealtime()}.
*/
-/* package */ class StandaloneMediaClock implements MediaClock {
+/* package */ final class StandaloneMediaClock implements MediaClock {
private boolean started;
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java b/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java
index 72c317f535..d147ce2e64 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java
@@ -74,68 +74,69 @@ public class ContainerMediaChunk extends BaseMediaChunk implements SingleTrackOu
}
@Override
- public long bytesLoaded() {
+ public final long bytesLoaded() {
return bytesLoaded;
}
@Override
- public MediaFormat getMediaFormat() {
+ public final MediaFormat getMediaFormat() {
return mediaFormat;
}
@Override
- public DrmInitData getDrmInitData() {
+ public final DrmInitData getDrmInitData() {
return drmInitData;
}
// SingleTrackOutput implementation.
@Override
- public void seekMap(SeekMap seekMap) {
+ public final void seekMap(SeekMap seekMap) {
// Do nothing.
}
@Override
- public void drmInitData(DrmInitData drmInitData) {
+ public final void drmInitData(DrmInitData drmInitData) {
this.drmInitData = drmInitData;
}
@Override
- public void format(MediaFormat mediaFormat) {
+ public final void format(MediaFormat mediaFormat) {
this.mediaFormat = mediaFormat;
}
@Override
- public int sampleData(ExtractorInput input, int length, boolean allowEndOfInput)
+ public final int sampleData(ExtractorInput input, int length, boolean allowEndOfInput)
throws IOException, InterruptedException {
return getOutput().sampleData(input, length, allowEndOfInput);
}
@Override
- public void sampleData(ParsableByteArray data, int length) {
+ public final void sampleData(ParsableByteArray data, int length) {
getOutput().sampleData(data, length);
}
@Override
- public void sampleMetadata(long timeUs, int flags, int size, int offset, byte[] encryptionKey) {
+ public final void sampleMetadata(long timeUs, int flags, int size, int offset,
+ byte[] encryptionKey) {
getOutput().sampleMetadata(timeUs + sampleOffsetUs, flags, size, offset, encryptionKey);
}
// Loadable implementation.
@Override
- public void cancelLoad() {
+ public final void cancelLoad() {
loadCanceled = true;
}
@Override
- public boolean isLoadCanceled() {
+ public final boolean isLoadCanceled() {
return loadCanceled;
}
@SuppressWarnings("NonAtomicVolatileUpdate")
@Override
- public void load() throws IOException, InterruptedException {
+ public final void load() throws IOException, InterruptedException {
DataSpec loadDataSpec = Util.getRemainderDataSpec(dataSpec, bytesLoaded);
try {
// Create and open the input.
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java
index 549ab66f96..c612dca454 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java
@@ -28,7 +28,7 @@ import java.util.List;
* A {@link ChunkSource} providing the ability to switch between multiple other {@link ChunkSource}
* instances.
*/
-public class MultiTrackChunkSource implements ChunkSource, ExoPlayerComponent {
+public final class MultiTrackChunkSource implements ChunkSource, ExoPlayerComponent {
/**
* A message to indicate a source selection. Source selection can only be performed when the
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java
index a0d6678ef1..12f7689099 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java
@@ -29,7 +29,7 @@ import java.util.List;
* An example use case for this implementation is to act as the source for loading out-of-band
* subtitles, where subtitles for the entire video are delivered as a single file.
*/
-public class SingleSampleChunkSource implements ChunkSource {
+public final class SingleSampleChunkSource implements ChunkSource {
private final DataSource dataSource;
private final DataSpec dataSpec;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java b/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java
index 441cad6194..bcff061458 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java
@@ -22,7 +22,7 @@ import com.google.android.exoplayer.extractor.ChunkIndex;
* An implementation of {@link DashSegmentIndex} that wraps a {@link ChunkIndex} parsed from a
* media stream.
*/
-public class DashWrappingSegmentIndex implements DashSegmentIndex {
+/* package */ final class DashWrappingSegmentIndex implements DashSegmentIndex {
private final ChunkIndex chunkIndex;
private final String uri;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashSingleSegmentIndex.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/DashSingleSegmentIndex.java
similarity index 90%
rename from library/src/main/java/com/google/android/exoplayer/dash/DashSingleSegmentIndex.java
rename to library/src/main/java/com/google/android/exoplayer/dash/mpd/DashSingleSegmentIndex.java
index 46a02a3ea2..9b8f6b276c 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/DashSingleSegmentIndex.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/DashSingleSegmentIndex.java
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.google.android.exoplayer.dash;
+package com.google.android.exoplayer.dash.mpd;
-import com.google.android.exoplayer.dash.mpd.RangedUri;
+import com.google.android.exoplayer.dash.DashSegmentIndex;
/**
* A {@link DashSegmentIndex} that defines a single segment.
*/
-public class DashSingleSegmentIndex implements DashSegmentIndex {
+/* package */ final class DashSingleSegmentIndex implements DashSegmentIndex {
private final long startTimeUs;
private final long durationUs;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java
index f5eb289fd5..54c0d6913a 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java
@@ -18,7 +18,6 @@ package com.google.android.exoplayer.dash.mpd;
import com.google.android.exoplayer.chunk.Format;
import com.google.android.exoplayer.chunk.FormatWrapper;
import com.google.android.exoplayer.dash.DashSegmentIndex;
-import com.google.android.exoplayer.dash.DashSingleSegmentIndex;
import com.google.android.exoplayer.dash.mpd.SegmentBase.MultiSegmentBase;
import com.google.android.exoplayer.dash.mpd.SegmentBase.SingleSegmentBase;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java
index e2f452b543..025cec3413 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java
@@ -18,7 +18,7 @@ package com.google.android.exoplayer.dash.mpd;
/**
* Represents a UTCTiming element.
*/
-public class UtcTimingElement {
+public final class UtcTimingElement {
public final String schemeIdUri;
public final String value;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java
index c275faebd7..19098fa8f5 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java
@@ -38,7 +38,7 @@ import java.util.concurrent.CancellationException;
/**
* Resolves a {@link UtcTimingElement}.
*/
-public class UtcTimingElementResolver implements Loader.Callback {
+public final class UtcTimingElementResolver implements Loader.Callback {
/**
* Callback for timing element resolution.
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
index a81c866892..639c992b65 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
@@ -67,8 +67,8 @@ import java.util.List;
* constructor. When reading a new stream, the first {@link Extractor} that returns {@code true}
* from {@link Extractor#sniff(ExtractorInput)} will be used.
*/
-public class ExtractorSampleSource implements SampleSource, SampleSourceReader, ExtractorOutput,
- Loader.Callback {
+public final class ExtractorSampleSource implements SampleSource, SampleSourceReader,
+ ExtractorOutput, Loader.Callback {
/**
* Thrown if the input format could not recognized.
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java
index 315cc2f497..fd72242216 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java
@@ -29,7 +29,7 @@ import java.io.IOException;
* Facilitates the extraction of AAC samples from elementary audio files formatted as AAC with ADTS
* headers.
*/
-public class AdtsExtractor implements Extractor {
+public final class AdtsExtractor implements Extractor {
private static final int MAX_PACKET_SIZE = 200;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java
index 8121c54901..5f360d4664 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java
@@ -30,7 +30,7 @@ import java.util.Collections;
/**
* Parses a continuous ADTS byte stream and extracts individual frames.
*/
-/* package */ class AdtsReader extends ElementaryStreamReader {
+/* package */ final class AdtsReader extends ElementaryStreamReader {
private static final int STATE_FINDING_SYNC = 0;
private static final int STATE_READING_HEADER = 1;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java
index 776adb5bc9..731254dbde 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java
@@ -32,7 +32,7 @@ import java.util.List;
/**
* Parses a continuous H264 byte stream and extracts individual frames.
*/
-/* package */ class H264Reader extends ElementaryStreamReader {
+/* package */ final class H264Reader extends ElementaryStreamReader {
private static final String TAG = "H264Reader";
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java
index 1631700911..7a2dd8c454 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java
@@ -30,7 +30,7 @@ import java.util.Collections;
/**
* Parses a continuous H.265 byte stream and extracts individual frames.
*/
-/* package */ class H265Reader extends ElementaryStreamReader {
+/* package */ final class H265Reader extends ElementaryStreamReader {
private static final String TAG = "H265Reader";
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java
index 28c4fe71d1..4e778820a5 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java
@@ -24,7 +24,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
/**
* Parses ID3 data and extracts individual text information frames.
*/
-/* package */ class Id3Reader extends ElementaryStreamReader {
+/* package */ final class Id3Reader extends ElementaryStreamReader {
// State that should be reset on seek.
private boolean writingSample;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java
index b2ee4ec7a9..5ce86b7d63 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java
@@ -24,7 +24,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
/**
* Parses a continuous MPEG Audio byte stream and extracts individual frames.
*/
-/* package */ class MpegAudioReader extends ElementaryStreamReader {
+/* package */ final class MpegAudioReader extends ElementaryStreamReader {
private static final int STATE_FINDING_HEADER = 0;
private static final int STATE_READING_HEADER = 1;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java
index 3aa57557cc..ac1aaef4a2 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java
@@ -28,7 +28,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
* TODO: Technically, we shouldn't allow a sample to be read from the queue until we're sure that
* a sample with an earlier timestamp won't be added to it.
*/
-/* package */ class SeiReader extends ElementaryStreamReader {
+/* package */ final class SeiReader extends ElementaryStreamReader {
public SeiReader(TrackOutput output) {
super(output);
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java
index 07973732e8..03cdb2debb 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java
@@ -8,7 +8,7 @@ import java.io.IOException;
/**
* Reads EBML variable-length integers (varints) from an {@link ExtractorInput}.
*/
-/* package */ class VarintReader {
+/* package */ final class VarintReader {
private static final int STATE_BEGIN_READING = 0;
private static final int STATE_READ_CONTENTS = 1;
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
index 39e47a7aec..30eb9bb0a1 100644
--- a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
@@ -40,7 +40,7 @@ import java.util.LinkedList;
/**
* A {@link SampleSource} for HLS streams.
*/
-public class HlsSampleSource implements SampleSource, SampleSourceReader, Loader.Callback {
+public final class HlsSampleSource implements SampleSource, SampleSourceReader, Loader.Callback {
/**
* Interface definition for a callback to be notified of {@link HlsSampleSource} events.
@@ -561,7 +561,7 @@ public class HlsSampleSource implements SampleSource, SampleSourceReader, Loader
return Math.min((errorCount - 1) * 1000, 5000);
}
- protected final int usToMs(long timeUs) {
+ /* package */ int usToMs(long timeUs) {
return (int) (timeUs / 1000);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java b/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java
index 1d4fcb4dee..6cc61dd468 100644
--- a/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java
+++ b/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java
@@ -19,7 +19,7 @@ package com.google.android.exoplayer.metadata;
* A metadata that contains parsed ID3 GEOB (General Encapsulated Object) frame data associated
* with time indices.
*/
-public class GeobMetadata {
+public final class GeobMetadata {
public static final String TYPE = "GEOB";
diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java b/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java
index f306c5d6e8..6b52cb5371 100644
--- a/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java
+++ b/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java
@@ -28,7 +28,7 @@ import java.util.Map;
/**
* Extracts individual TXXX text frames from raw ID3 data.
*/
-public class Id3Parser implements MetadataParser
* @see TTML specification
*/
-public class TtmlParser implements SubtitleParser {
+public final class TtmlParser implements SubtitleParser {
private static final String TAG = "TtmlParser";
diff --git a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java
index 0503eb2299..bebf643e82 100644
--- a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java
+++ b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java
@@ -91,7 +91,7 @@ public class WebvttParser implements SubtitleParser {
}
@Override
- public WebvttSubtitle parse(InputStream inputStream, String inputEncoding, long startTimeUs)
+ public final WebvttSubtitle parse(InputStream inputStream, String inputEncoding, long startTimeUs)
throws IOException {
ArrayList subtitles = new ArrayList<>();
long mediaTimestampUs = startTimeUs;
@@ -253,7 +253,7 @@ public class WebvttParser implements SubtitleParser {
}
@Override
- public boolean canParse(String mimeType) {
+ public final boolean canParse(String mimeType) {
return MimeTypes.TEXT_VTT.equals(mimeType);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java
index 3ca64cdc21..3cc7ba6362 100644
--- a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java
+++ b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java
@@ -30,7 +30,7 @@ import java.util.List;
/**
* A representation of a WebVTT subtitle.
*/
-public class WebvttSubtitle implements Subtitle {
+public final class WebvttSubtitle implements Subtitle {
private final List cues;
private final int numCues;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
index d672dd95d7..aaa8a1c186 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
@@ -24,7 +24,7 @@ import java.io.IOException;
/**
* A {@link DataSink} for writing to a byte array.
*/
-public class ByteArrayDataSink implements DataSink {
+public final class ByteArrayDataSink implements DataSink {
private ByteArrayOutputStream stream;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
index 0438f87371..e16b3a7ccc 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
@@ -23,7 +23,7 @@ import java.io.IOException;
/**
* A {@link DataSource} for reading from a byte array.
*/
-public class ByteArrayDataSource implements DataSource {
+public final class ByteArrayDataSource implements DataSource {
private final byte[] data;
private int readPosition;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java b/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java
index 75bcf72b88..ff3d0b7b8e 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java
@@ -24,7 +24,7 @@ import java.io.InputStream;
* Allows data corresponding to a given {@link DataSpec} to be read from a {@link DataSource} and
* consumed as an {@link InputStream}.
*/
-public class DataSourceInputStream extends InputStream {
+public final class DataSourceInputStream extends InputStream {
private final DataSource dataSource;
private final DataSpec dataSpec;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java b/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java
index 8af7bf9250..ba2297341b 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java
@@ -26,7 +26,7 @@ import android.os.Handler;
* Counts transferred bytes while transfers are open and creates a bandwidth sample and updated
* bandwidth estimate each time a transfer ends.
*/
-public class DefaultBandwidthMeter implements BandwidthMeter {
+public final class DefaultBandwidthMeter implements BandwidthMeter {
public static final int DEFAULT_MAX_WEIGHT = 2000;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java
index 34ed14794c..19a2b224de 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java
@@ -24,7 +24,7 @@ import java.io.IOException;
* priority is the highest priority of any task. {@link NetworkLock.PriorityTooLowException} is
* thrown when this condition does not hold.
*/
-public class PriorityDataSource implements DataSource {
+public final class PriorityDataSource implements DataSource {
private final DataSource upstream;
private final int priority;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java
index 4bb12294bd..c9a41e3aa3 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java
@@ -27,7 +27,7 @@ import java.net.MulticastSocket;
/**
* A UDP {@link DataSource}.
*/
-public class UdpDataSource implements UriDataSource {
+public final class UdpDataSource implements UriDataSource {
/**
* Thrown when an error is encountered when trying to read from a {@link UdpDataSource}.
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java
index 01e06b5158..5ed4efcf2e 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java
@@ -29,7 +29,7 @@ import java.io.IOException;
/**
* Writes data into a cache.
*/
-public class CacheDataSink implements DataSink {
+public final class CacheDataSink implements DataSink {
private final Cache cache;
private final long maxCacheFileSize;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java
index 577d7b3bbf..4998f09fc2 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java
@@ -21,7 +21,7 @@ import java.util.TreeSet;
/**
* Evicts least recently used cache files first.
*/
-public class LeastRecentlyUsedCacheEvictor implements CacheEvictor, Comparator {
+public final class LeastRecentlyUsedCacheEvictor implements CacheEvictor, Comparator {
private final long maxBytes;
private final TreeSet leastRecentlyUsed;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java
index ea050c28dd..56e4e33400 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java
@@ -22,7 +22,7 @@ package com.google.android.exoplayer.upstream.cache;
* Warning: Using this evictor might have unforeseeable consequences if cache
* size is not managed elsewhere.
*/
-public class NoOpCacheEvictor implements CacheEvictor {
+public final class NoOpCacheEvictor implements CacheEvictor {
@Override
public void onStartFile(Cache cache, String key, long position, long length) {
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java
index ed2001b371..649e555dc3 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java
@@ -32,7 +32,7 @@ import java.util.TreeSet;
/**
* A {@link Cache} implementation that maintains an in-memory representation.
*/
-public class SimpleCache implements Cache {
+public final class SimpleCache implements Cache {
private final File cacheDir;
private final CacheEvictor evictor;
diff --git a/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java b/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java
index 61f268be21..7b0d9d0d4c 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java
@@ -23,7 +23,7 @@ import android.media.AudioFormat;
/**
* Defines common MIME types and helper methods.
*/
-public class MimeTypes {
+public final class MimeTypes {
public static final String BASE_TYPE_VIDEO = "video";
public static final String BASE_TYPE_AUDIO = "audio";
diff --git a/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java b/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java
index 86f77ffa3b..d10b3055c3 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java
@@ -21,7 +21,7 @@ import android.os.Process;
/**
* A {@link HandlerThread} with a specified process priority.
*/
-public class PriorityHandlerThread extends HandlerThread {
+public final class PriorityHandlerThread extends HandlerThread {
private final int priority;
diff --git a/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java b/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java
index 77294f4562..36a15101ae 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java
@@ -31,7 +31,7 @@ import java.util.Comparator;
* @see Wiki: Moving average
* @see Wiki: Selection algorithm
*/
-public class SlidingPercentile {
+public final class SlidingPercentile {
// Orderings.
private static final Comparator INDEX_COMPARATOR = new Comparator() {
diff --git a/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java b/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java
index d581305c8c..3cd305bfe7 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java
@@ -22,7 +22,9 @@ import android.annotation.TargetApi;
/**
* Calls through to {@link android.os.Trace} methods on supported API levels.
*/
-public class TraceUtil {
+public final class TraceUtil {
+
+ private TraceUtil() {}
/**
* Writes a trace message to indicate that a given section of code has begun.
diff --git a/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java b/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java
index 590c1b51c0..4fe40cde5f 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java
@@ -18,14 +18,12 @@ package com.google.android.exoplayer.util;
/**
* Utility class for managing a set of tags for which verbose logging should be enabled.
*/
-public class VerboseLogUtil {
+public final class VerboseLogUtil {
private static volatile String[] enabledTags;
private static volatile boolean enableAllTags;
- private VerboseLogUtil() {
- // Private constructor to prevent instantiation.
- }
+ private VerboseLogUtil() {}
/**
* Sets the tags for which verbose logging should be enabled.