diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2012-08-21 18:37:18 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2012-08-21 18:37:18 +0200 |
commit | 8bca22eff93ce387bd610b82aa95363c8e4c36b7 (patch) | |
tree | 34757a0d5329e6cd2d2ea35daaeb1132b46a235e | |
parent | eab911c2ff211ae7896b931e459b3a64c24870e8 (diff) | |
download | AntennaPod-8bca22eff93ce387bd610b82aa95363c8e4c36b7.zip |
Downloads weren't cancelled properly
3 files changed, 11 insertions, 5 deletions
diff --git a/src/de/danoeh/antennapod/service/download/DownloadService.java b/src/de/danoeh/antennapod/service/download/DownloadService.java index aac40a664..25667f20d 100644 --- a/src/de/danoeh/antennapod/service/download/DownloadService.java +++ b/src/de/danoeh/antennapod/service/download/DownloadService.java @@ -243,7 +243,7 @@ public class DownloadService extends Service { Log.d(TAG, "Cancelling download with url " + url); Downloader d = getDownloader(url); if (d != null) { - d.interrupt(); + d.cancel(); removeDownload(d); } else { Log.e(TAG, "Could not cancel download with url " + url); @@ -251,7 +251,7 @@ public class DownloadService extends Service { } else if (intent.getAction().equals(ACTION_CANCEL_ALL_DOWNLOADS)) { for (Downloader d : downloads) { - d.interrupt(); + d.cancel(); DownloadRequester.getInstance().removeDownload( d.getStatus().getFeedFile()); d.getStatus().getFeedFile().setFile_url(null); diff --git a/src/de/danoeh/antennapod/service/download/Downloader.java b/src/de/danoeh/antennapod/service/download/Downloader.java index 13ee8896c..aa2e51690 100644 --- a/src/de/danoeh/antennapod/service/download/Downloader.java +++ b/src/de/danoeh/antennapod/service/download/Downloader.java @@ -12,6 +12,8 @@ public abstract class Downloader extends Thread { private DownloadService downloadService; protected boolean finished; + + protected volatile boolean cancelled; protected volatile DownloadStatus status; @@ -19,6 +21,7 @@ public abstract class Downloader extends Thread { super(); this.downloadService = downloadService; this.status = status; + this.cancelled = false; handler = new Handler(); } @@ -55,5 +58,9 @@ public abstract class Downloader extends Thread { public DownloadStatus getStatus() { return status; } + + public void cancel() { + cancelled = true; + } }
\ No newline at end of file diff --git a/src/de/danoeh/antennapod/service/download/HttpDownloader.java b/src/de/danoeh/antennapod/service/download/HttpDownloader.java index fb9d0c6ec..14ca0000f 100644 --- a/src/de/danoeh/antennapod/service/download/HttpDownloader.java +++ b/src/de/danoeh/antennapod/service/download/HttpDownloader.java @@ -65,14 +65,13 @@ public class HttpDownloader extends Downloader { publishProgress(); if (AppConfig.DEBUG) Log.d(TAG, "Starting download"); - while ((count = in.read(buffer)) != -1 - && !isInterrupted()) { + while (!cancelled && (count = in.read(buffer)) != -1) { out.write(buffer, 0, count); status.setSoFar(status.getSoFar() + count); status.setProgressPercent((int) (((double) status .getSoFar() / (double) status.getSize()) * 100)); } - if (isInterrupted()) { + if (cancelled) { onCancelled(); } else { onSuccess(); |