summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java b/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java
new file mode 100644
index 000000000..80cc5b3f8
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java
@@ -0,0 +1,69 @@
+package de.danoeh.antennapod.service.download;
+
+import android.content.Context;
+import android.net.wifi.WifiManager;
+import de.danoeh.antennapod.PodcastApp;
+import de.danoeh.antennapod.R;
+
+import java.util.concurrent.Callable;
+
+/** Downloads files */
+public abstract class Downloader implements Callable<Downloader> {
+ private static final String TAG = "Downloader";
+
+ protected volatile boolean finished;
+
+ protected volatile boolean cancelled;
+
+ protected DownloadRequest request;
+ protected DownloadStatus result;
+
+ public Downloader(DownloadRequest request) {
+ super();
+ this.request = request;
+ this.request.setStatusMsg(R.string.download_pending);
+ this.cancelled = false;
+ this.result = new DownloadStatus(request, null, false, false, null);
+ }
+
+ protected abstract void download();
+
+ public final Downloader call() {
+ WifiManager wifiManager = (WifiManager) PodcastApp.getInstance().getSystemService(Context.WIFI_SERVICE);
+ WifiManager.WifiLock wifiLock = null;
+ if (wifiManager != null) {
+ wifiLock = wifiManager.createWifiLock(TAG);
+ wifiLock.acquire();
+ }
+
+ download();
+
+ if (wifiLock != null) {
+ wifiLock.release();
+ }
+
+ if (result == null) {
+ throw new IllegalStateException(
+ "Downloader hasn't created DownloadStatus object");
+ }
+ finished = true;
+ return this;
+ }
+
+ public DownloadRequest getDownloadRequest() {
+ return request;
+ }
+
+ public DownloadStatus getResult() {
+ return result;
+ }
+
+ public boolean isFinished() {
+ return finished;
+ }
+
+ public void cancel() {
+ cancelled = true;
+ }
+
+} \ No newline at end of file