diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/offline/Downloader.java b/library/core/src/main/java/com/google/android/exoplayer2/source/offline/Downloader.java
deleted file mode 100644
index 04735551cd..0000000000
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/offline/Downloader.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.android.exoplayer2.source.offline;
-
-import android.support.annotation.Nullable;
-import com.google.android.exoplayer2.C;
-import com.google.android.exoplayer2.upstream.DataSink;
-import com.google.android.exoplayer2.upstream.DataSource;
-import com.google.android.exoplayer2.upstream.DummyDataSource;
-import com.google.android.exoplayer2.upstream.FileDataSource;
-import com.google.android.exoplayer2.upstream.PriorityDataSource;
-import com.google.android.exoplayer2.upstream.cache.Cache;
-import com.google.android.exoplayer2.upstream.cache.CacheDataSink;
-import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
-import com.google.android.exoplayer2.util.ClosedSource;
-import com.google.android.exoplayer2.util.PriorityTaskManager;
-import java.io.IOException;
-
-/**
- * Base class for stream downloaders.
- *
- *
All of the methods are blocking. Also they are not thread safe, except {@link
- * #getTotalSegments()}, {@link #getDownloadedSegments()} and {@link #getDownloadedBytes()}.
- *
- * @param The type of the manifest object.
- * @param The type of the representation key object.
- */
-@ClosedSource(reason = "Not ready yet")
-public abstract class Downloader {
-
- /**
- * Listener notified when download progresses.
- */
- public interface ProgressListener {
- /**
- * Called for the first time after the initialization and then after download of each segment.
- * It is called on the thread which invoked {@link #downloadRepresentations(ProgressListener)}.
- *
- * @param downloader The reporting instance.
- * @param totalSegments Total number of segments in the content.
- * @param downloadedSegments Total number of downloaded segments.
- * @param downloadedBytes Total number of downloaded bytes.
- * @see #downloadRepresentations(ProgressListener)
- */
- void onDownloadProgress(Downloader, ?> downloader, int totalSegments,
- int downloadedSegments, long downloadedBytes);
- }
-
- protected final Cache cache;
- protected final CacheDataSource dataSource;
- protected final CacheDataSource offlineDataSource;
- protected final PriorityTaskManager priorityTaskManager;
- protected final String manifestUri;
-
- protected volatile int totalSegments;
- protected volatile int downloadedSegments;
- protected volatile long downloadedBytes;
-
- /**
- * Constructs a Downloader.
- *
- * @param manifestUri The URI of the manifest to be downloaded.
- * @param cache Cache instance to be used to store downloaded data.
- * @param upstreamDataSource A {@link DataSource} for downloading data.
- * @param cacheReadDataSource A {@link DataSource} for reading data from the cache.
- * If null, a {@link FileDataSource} instance is created and used.
- * @param cacheWriteDataSink A {@link DataSink} for writing data to the cache. If
- * null, a {@link CacheDataSink} instance is created and used.
- * @param priorityTaskManager If not null it's used to check whether it is allowed to proceed with
- * download. Downloader priority is {@link C#PRIORITY_DOWNLOAD}.
- */
- public Downloader(String manifestUri, Cache cache, DataSource upstreamDataSource,
- @Nullable DataSource cacheReadDataSource, @Nullable DataSink cacheWriteDataSink,
- @Nullable PriorityTaskManager priorityTaskManager) {
- if (priorityTaskManager != null) {
- upstreamDataSource =
- new PriorityDataSource(upstreamDataSource, priorityTaskManager, C.PRIORITY_DOWNLOAD);
- } else {
- priorityTaskManager = new PriorityTaskManager(); // dummy PriorityTaskManager
- }
- if (cacheReadDataSource == null) {
- cacheReadDataSource = new FileDataSource();
- }
- if (cacheWriteDataSink == null) {
- cacheWriteDataSink = new CacheDataSink(cache,
- CacheDataSource.DEFAULT_MAX_CACHE_FILE_SIZE);
- }
-
- this.manifestUri = manifestUri;
- this.cache = cache;
- this.dataSource = new CacheDataSource(cache, upstreamDataSource, cacheReadDataSource,
- cacheWriteDataSink, CacheDataSource.FLAG_BLOCK_ON_CACHE, null);
- this.offlineDataSource = new CacheDataSource(cache, DummyDataSource.INSTANCE,
- cacheReadDataSource, null, CacheDataSource.FLAG_BLOCK_ON_CACHE, null);
- this.priorityTaskManager = priorityTaskManager;
-
- resetCounters();
- }
-
- /**
- * Downloads the manifest.
- *
- * @return The downloaded manifest.
- * @throws IOException If an error occurs reading data from the stream.
- */
- public abstract M downloadManifest() throws IOException;
-
- /**
- * Selects multiple representations pointed to by the keys for downloading, removing or checking
- * status. Any previous selection is cleared.
- */
- public abstract void selectRepresentations(K... keys);
-
- /**
- * Initializes the total segments, downloaded segments and downloaded bytes counters for the
- * selected representations.
- *
- * @throws IOException Thrown when there is an error while reading from cache.
- * @throws DownloaderException Thrown when a representation index is unbounded.
- * @throws InterruptedException If the thread has been interrupted.
- * @see #getTotalSegments()
- * @see #getDownloadedSegments()
- * @see #getDownloadedBytes()
- */
- public abstract void initStatus() throws DownloaderException, InterruptedException, IOException;
-
- /**
- * Downloads the content for the selected representations in sync or resumes a previously stopped
- * download.
- *
- * @throws IOException Thrown when there is an error while downloading.
- * @throws DownloaderException Thrown when no index data can be found for a representation or
- * the index is unbounded.
- * @throws InterruptedException If the thread has been interrupted.
- */
- public abstract void downloadRepresentations(@Nullable ProgressListener listener)
- throws IOException, DownloaderException, InterruptedException;
-
- /**
- * Returns the total number of segments in the representations which are selected, or {@link
- * C#LENGTH_UNSET} if it hasn't been calculated yet.
- *
- * @see #initStatus()
- */
- public final int getTotalSegments() {
- return totalSegments;
- }
-
- /**
- * Returns the total number of downloaded segments in the representations which are selected, or
- * {@link C#LENGTH_UNSET} if it hasn't been calculated yet.
- *
- * @see #initStatus()
- */
- public final int getDownloadedSegments() {
- return downloadedSegments;
- }
-
- /**
- * Returns the total number of downloaded bytes in the representations which are selected, or
- * {@link C#LENGTH_UNSET} if it hasn't been calculated yet.
- *
- * @see #initStatus()
- */
- public final long getDownloadedBytes() {
- return downloadedBytes;
- }
-
- /**
- * Removes all representations declared in the manifest and the manifest itself.
- *
- * @throws InterruptedException Thrown if the thread was interrupted.
- */
- public abstract void removeAll() throws InterruptedException;
-
- protected final void resetCounters() {
- totalSegments = C.LENGTH_UNSET;
- downloadedSegments = C.LENGTH_UNSET;
- downloadedBytes = C.LENGTH_UNSET;
- }
-
-}
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/offline/DownloaderException.java b/library/core/src/main/java/com/google/android/exoplayer2/source/offline/DownloaderException.java
deleted file mode 100644
index c07565b721..0000000000
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/offline/DownloaderException.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.android.exoplayer2.source.offline;
-
-import com.google.android.exoplayer2.util.ClosedSource;
-
-/** Thrown on an error in {@link Downloader}. */
-@ClosedSource(reason = "Not ready yet")
-public final class DownloaderException extends Exception {
-
- public DownloaderException(String message) {
- super(message);
- }
-
-}
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/offline/DownloaderFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/source/offline/DownloaderFactory.java
deleted file mode 100644
index 1bce12ce05..0000000000
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/offline/DownloaderFactory.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.google.android.exoplayer2.source.offline;
-
-import android.support.annotation.Nullable;
-import com.google.android.exoplayer2.upstream.DataSink;
-import com.google.android.exoplayer2.upstream.DataSource;
-import com.google.android.exoplayer2.upstream.DataSource.Factory;
-import com.google.android.exoplayer2.upstream.cache.Cache;
-import com.google.android.exoplayer2.util.ClosedSource;
-import com.google.android.exoplayer2.util.PriorityTaskManager;
-
-/**
- * A factory class that produces {@link Downloader}.
- */
-@ClosedSource(reason = "Not ready yet")
-public abstract class DownloaderFactory> {
-
- private final Factory upstreamDataSourceFactory;
- private final Factory cacheReadDataSourceFactory;
- private final DataSink.Factory cacheWriteDataSinkFactory;
-
- protected final Cache cache;
- protected final PriorityTaskManager priorityTaskManager;
-
- /**
- * Constructs a DashDownloaderFactory.
- *
- * @param cache Cache instance to be used to store downloaded data.
- * @param upstreamDataSourceFactory A {@link Factory} for downloading data.
- */
- public DownloaderFactory(Cache cache, Factory upstreamDataSourceFactory) {
- this(cache, upstreamDataSourceFactory, null, null, null);
- }
-
- /**
- * Constructs a DashDownloaderFactory.
- *
- * @param cache Cache instance to be used to store downloaded data.
- * @param upstreamDataSourceFactory A {@link Factory} for downloading data.
- * @param cacheReadDataSourceFactory A {@link Factory} for reading data from the cache.
- * If null, null is passed to {@link Downloader} constructor.
- * @param cacheWriteDataSinkFactory A {@link DataSink.Factory} for writing data to the cache. If
- * null, null is passed to {@link Downloader} constructor.
- * @param priorityTaskManager If one is given then the download priority is set lower than
- * loading. If null, null is passed to {@link Downloader} constructor.
- */
- public DownloaderFactory(Cache cache, Factory upstreamDataSourceFactory,
- @Nullable Factory cacheReadDataSourceFactory,
- @Nullable DataSink.Factory cacheWriteDataSinkFactory,
- @Nullable PriorityTaskManager priorityTaskManager) {
- this.cache = cache;
- this.upstreamDataSourceFactory = upstreamDataSourceFactory;
- this.cacheReadDataSourceFactory = cacheReadDataSourceFactory;
- this.cacheWriteDataSinkFactory = cacheWriteDataSinkFactory;
- this.priorityTaskManager = priorityTaskManager;
- }
-
- /**
- * Creates a {@link Downloader} with the given manifest.
- *
- * @param manifestUri The URI of the manifest of the DASH to be downloaded.
- * @return A {@link Downloader}.
- */
- public final T create(String manifestUri) {
- return create(manifestUri,
- upstreamDataSourceFactory != null ? upstreamDataSourceFactory.createDataSource() : null,
- cacheReadDataSourceFactory != null ? cacheReadDataSourceFactory.createDataSource() : null,
- cacheWriteDataSinkFactory != null ? cacheWriteDataSinkFactory.createDataSink() : null);
- }
-
- protected abstract T create(String manifestUri, DataSource upstreamDataSource,
- DataSource cacheReadDataSource, DataSink cacheWriteDataSink);
-
-}