Created abstract downloader class

This commit is contained in:
daniel oeh 2012-08-16 15:09:49 +02:00
parent 853ae9af79
commit 1dd128a46c
10 changed files with 108 additions and 10 deletions

View File

@ -74,7 +74,7 @@
android:theme="@style/Theme.MediaPlayer" android:screenOrientation="portrait"/>
<service
android:name="de.danoeh.antennapod.service.DownloadService"
android:name=".service.download.DownloadService"
android:enabled="true" />
<service
android:name="de.danoeh.antennapod.service.PlaybackService"

View File

@ -23,7 +23,7 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.DownloadStatus;
import de.danoeh.antennapod.feed.Feed;
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.ConnectionTester;
import de.danoeh.antennapod.util.DownloadError;

View File

@ -20,7 +20,7 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.DownloadlistAdapter;
import de.danoeh.antennapod.asynctask.DownloadObserver;
import de.danoeh.antennapod.asynctask.DownloadStatus;
import de.danoeh.antennapod.service.DownloadService;
import de.danoeh.antennapod.service.download.DownloadService;
import de.danoeh.antennapod.storage.DownloadRequester;
/**

View File

@ -23,8 +23,8 @@ import de.danoeh.antennapod.feed.FeedManager;
import de.danoeh.antennapod.fragment.FeedlistFragment;
import de.danoeh.antennapod.fragment.QueueFragment;
import de.danoeh.antennapod.fragment.UnreadItemlistFragment;
import de.danoeh.antennapod.service.DownloadService;
import de.danoeh.antennapod.service.PlaybackService;
import de.danoeh.antennapod.service.download.DownloadService;
import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.StorageUtils;
import de.danoeh.antennapod.AppConfig;

View File

@ -5,7 +5,7 @@ import de.danoeh.antennapod.adapter.FeedlistAdapter;
import de.danoeh.antennapod.asynctask.FeedRemover;
import de.danoeh.antennapod.dialog.ConfirmationDialog;
import de.danoeh.antennapod.feed.*;
import de.danoeh.antennapod.service.DownloadService;
import de.danoeh.antennapod.service.download.DownloadService;
import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.AppConfig;

View File

@ -27,7 +27,7 @@ import de.danoeh.antennapod.adapter.FeedItemlistAdapter;
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.EpisodeFilter;
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;

View File

@ -3,12 +3,13 @@
* to complete, then stops
* */
package de.danoeh.antennapod.service;
package de.danoeh.antennapod.service.download;
import java.io.File;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
@ -56,6 +57,8 @@ import android.os.Debug;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.os.Parcel;
import android.os.Parcelable;
import android.preference.PreferenceManager;
public class DownloadService extends Service {
@ -95,6 +98,8 @@ public class DownloadService extends Service {
private DownloadObserver downloadObserver;
private List<DownloadStatus> 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<DownloadStatus>();
downloads = new ArrayList<DownloadStatus>();
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<Request> CREATOR = new Parcelable.Creator<Request>() {
public Request createFromParcel(Parcel in) {
return new Request(in);
}
public Request[] newArray(int size) {
return new Request[size];
}
};
}
public DownloadObserver getDownloadObserver() {
return downloadObserver;
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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;