From 77b78b96dff4d117ef7dffe0ff3d77314eafce19 Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 15 Apr 2019 23:09:15 +0100 Subject: [PATCH] DownloadTracker shouldn't depend on DefaultDownloadIndex - It can work with any DownloadIndex - Also simplify things to not require that it's registered as a DownloadManager listener by someone else PiperOrigin-RevId: 243697352 --- .../exoplayer2/demo/DemoApplication.java | 3 +- .../exoplayer2/demo/DownloadTracker.java | 54 +++++++++---------- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java index 574f41cb3e..446184e56b 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java @@ -129,8 +129,7 @@ public class DemoApplication extends Application { DownloadManager.DEFAULT_MIN_RETRY_COUNT, DownloadManager.DEFAULT_REQUIREMENTS); downloadTracker = - new DownloadTracker(/* context= */ this, buildDataSourceFactory(), downloadIndex); - downloadManager.addListener(downloadTracker); + new DownloadTracker(/* context= */ this, buildDataSourceFactory(), downloadManager); } } diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java index e26db9cbe7..156c7a0771 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java @@ -23,11 +23,11 @@ import androidx.fragment.app.FragmentManager; import android.widget.Toast; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.RenderersFactory; -import com.google.android.exoplayer2.offline.DefaultDownloadIndex; import com.google.android.exoplayer2.offline.Download; import com.google.android.exoplayer2.offline.DownloadAction; import com.google.android.exoplayer2.offline.DownloadCursor; import com.google.android.exoplayer2.offline.DownloadHelper; +import com.google.android.exoplayer2.offline.DownloadIndex; import com.google.android.exoplayer2.offline.DownloadManager; import com.google.android.exoplayer2.offline.DownloadService; import com.google.android.exoplayer2.offline.StreamKey; @@ -41,10 +41,8 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.CopyOnWriteArraySet; -/** - * Tracks media that has been downloaded. - */ -public class DownloadTracker implements DownloadManager.Listener { +/** Tracks media that has been downloaded. */ +public class DownloadTracker { /** Listens for changes in the tracked downloads. */ public interface Listener { @@ -59,17 +57,18 @@ public class DownloadTracker implements DownloadManager.Listener { private final DataSource.Factory dataSourceFactory; private final CopyOnWriteArraySet listeners; private final HashMap downloads; - private final DefaultDownloadIndex downloadIndex; + private final DownloadIndex downloadIndex; @Nullable private StartDownloadDialogHelper startDownloadDialogHelper; public DownloadTracker( - Context context, DataSource.Factory dataSourceFactory, DefaultDownloadIndex downloadIndex) { + Context context, DataSource.Factory dataSourceFactory, DownloadManager downloadManager) { this.context = context.getApplicationContext(); this.dataSourceFactory = dataSourceFactory; - this.downloadIndex = downloadIndex; listeners = new CopyOnWriteArraySet<>(); downloads = new HashMap<>(); + downloadIndex = downloadManager.getDownloadIndex(); + downloadManager.addListener(new DownloadManagerListener()); loadDownloads(); } @@ -114,26 +113,6 @@ public class DownloadTracker implements DownloadManager.Listener { } } - // DownloadManager.Listener - - @Override - public void onDownloadChanged(DownloadManager downloadManager, Download download) { - downloads.put(download.action.uri, download); - for (Listener listener : listeners) { - listener.onDownloadsChanged(); - } - } - - @Override - public void onDownloadRemoved(DownloadManager downloadManager, Download download) { - downloads.remove(download.action.uri); - for (Listener listener : listeners) { - listener.onDownloadsChanged(); - } - } - - // Internal methods - private void loadDownloads() { try (DownloadCursor loadedDownloads = downloadIndex.getDownloads()) { while (loadedDownloads.moveToNext()) { @@ -167,6 +146,25 @@ public class DownloadTracker implements DownloadManager.Listener { } } + private class DownloadManagerListener implements DownloadManager.Listener { + + @Override + public void onDownloadChanged(DownloadManager downloadManager, Download download) { + downloads.put(download.action.uri, download); + for (Listener listener : listeners) { + listener.onDownloadsChanged(); + } + } + + @Override + public void onDownloadRemoved(DownloadManager downloadManager, Download download) { + downloads.remove(download.action.uri); + for (Listener listener : listeners) { + listener.onDownloadsChanged(); + } + } + } + private final class StartDownloadDialogHelper implements DownloadHelper.Callback, DialogInterface.OnClickListener,