From 1dd128a46c8dfbcc57f66eb0b2d61386a7c83dac Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Thu, 16 Aug 2012 15:09:49 +0200 Subject: [PATCH] Created abstract downloader class --- AndroidManifest.xml | 2 +- .../antennapod/activity/AddFeedActivity.java | 2 +- .../antennapod/activity/DownloadActivity.java | 2 +- .../antennapod/activity/MainActivity.java | 2 +- .../antennapod/fragment/FeedlistFragment.java | 2 +- .../antennapod/fragment/ItemlistFragment.java | 2 +- .../{ => download}/DownloadService.java | 51 ++++++++++++++++++- .../service/download/Downloader.java | 51 +++++++++++++++++++ .../antennapod/storage/DownloadRequester.java | 2 +- .../util/menuhandler/FeedMenuHandler.java | 2 +- 10 files changed, 108 insertions(+), 10 deletions(-) rename src/de/danoeh/antennapod/service/{ => download}/DownloadService.java (95%) create mode 100644 src/de/danoeh/antennapod/service/download/Downloader.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 26fde189d..8c6178471 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -74,7 +74,7 @@ android:theme="@style/Theme.MediaPlayer" android:screenOrientation="portrait"/> downloads; + private volatile boolean shutdownInitiated = false; /** True if service is running. */ public static boolean isRunning = false; @@ -126,6 +131,7 @@ public class DownloadService extends Service { Log.d(TAG, "Service started"); isRunning = true; completedDownloads = new ArrayList(); + downloads = new ArrayList(); registerReceiver(downloadReceiver, createIntentFilter()); registerReceiver(onDownloadsChanged, new IntentFilter( ACTION_NOTIFY_DOWNLOADS_CHANGED)); @@ -428,7 +434,7 @@ public class DownloadService extends Service { } /** Check if there's something else to download, otherwise stop */ - private void queryDownloads() { + void queryDownloads() { int numOfDownloads = requester.getNumberOfDownloads(); if (!shutdownInitiated && numOfDownloads == 0) { shutdownInitiated = true; @@ -660,6 +666,47 @@ public class DownloadService extends Service { } } + /** Is used to request a new download. */ + public static class Request implements Parcelable { + private String destination; + private String source; + + public Request(String destination, String source) { + super(); + this.destination = destination; + this.source = source; + } + + private Request(Parcel in) { + destination = in.readString(); + source = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(destination); + dest.writeString(source); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public Request createFromParcel(Parcel in) { + return new Request(in); + } + + public Request[] newArray(int size) { + return new Request[size]; + } + }; + + } + + + public DownloadObserver getDownloadObserver() { return downloadObserver; } diff --git a/src/de/danoeh/antennapod/service/download/Downloader.java b/src/de/danoeh/antennapod/service/download/Downloader.java new file mode 100644 index 000000000..6eb2562f3 --- /dev/null +++ b/src/de/danoeh/antennapod/service/download/Downloader.java @@ -0,0 +1,51 @@ +package de.danoeh.antennapod.service.download; + +import android.os.Handler; + +/** Downloads files */ +public abstract class Downloader extends Thread { + private static final String TAG = "Downloader"; + private Handler handler; + private DownloadService downloadService; + + protected boolean finished; + + protected String destination; + protected String source; + + + + public Downloader(DownloadService downloadService, String destination, String source) { + super(); + this.downloadService = downloadService; + this.destination = destination; + this.source = source; + handler = new Handler(); + } + + /** + * This method must be called when the download was completed, failed, + * or was cancelled + */ + protected void finish() { + if (!finished) { + finished = true; + handler.post(new Runnable() { + + @Override + public void run() { + downloadService.queryDownloads(); + } + + }); + } + } + + protected abstract void download(); + + @Override + public final void run() { + download(); + } + +} \ No newline at end of file diff --git a/src/de/danoeh/antennapod/storage/DownloadRequester.java b/src/de/danoeh/antennapod/storage/DownloadRequester.java index 5e2af1ba5..ca81ed4a0 100644 --- a/src/de/danoeh/antennapod/storage/DownloadRequester.java +++ b/src/de/danoeh/antennapod/storage/DownloadRequester.java @@ -19,7 +19,7 @@ import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedFile; import de.danoeh.antennapod.feed.FeedImage; import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.service.DownloadService; +import de.danoeh.antennapod.service.download.DownloadService; import de.danoeh.antennapod.util.NumberGenerator; import de.danoeh.antennapod.util.URLChecker; diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java b/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java index 38adc0b50..6bb1478d6 100644 --- a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java +++ b/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java @@ -15,7 +15,7 @@ import de.danoeh.antennapod.asynctask.FlattrClickWorker; import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; -import de.danoeh.antennapod.service.DownloadService; +import de.danoeh.antennapod.service.download.DownloadService; import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.ShareUtils; import de.danoeh.antennapod.AppConfig;