project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java Sat Nov 26 16:18:44 2011 +0100
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java Sat Nov 26 17:40:25 2011 +0100
@@ -19,12 +19,10 @@
package org.hedgewars.hedgeroid.Downloader;
-import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
-import org.hedgewars.hedgeroid.MainActivity;
import org.hedgewars.hedgeroid.R;
import android.app.Notification;
@@ -32,7 +30,6 @@
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
-import android.os.AsyncTask;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -61,6 +58,7 @@
private RemoteViews contentView;
private Deque<DownloadTask> downloadTasks = new LinkedList<DownloadTask>();
+ private DownloadTask currentTask = null;
public class DownloadHandler extends Handler{
@@ -87,7 +85,10 @@
runNextTask();
return;
case MSG_CANCEL:
- if(task != null && task.getPackage().equals(pack) && task.getStatus() == TASK_STATE.RUNNING){
+ if(task != null && task.getPackage().equals(pack) && task.getStatus() == TASK_STATE.PENDING){
+ downloadTasks.remove(task);
+ }
+ if(currentTask.getPackage().equals(pack)){
asyncExecutor.cancel(false);
}
return;
@@ -111,10 +112,10 @@
private void runNextTask(){
if(asyncExecutor == null){//if (task isnt running right now) ...
- DownloadTask task = downloadTasks.pollFirst();
- if(task != null){
- asyncExecutor = new DownloadAsyncTask(task);
- asyncExecutor.execute(task.getPackage());
+ currentTask = downloadTasks.pollFirst();
+ if(currentTask != null){
+ asyncExecutor = new DownloadAsyncTask(currentTask);
+ asyncExecutor.execute(currentTask.getPackage());
}
}
}
@@ -178,7 +179,7 @@
PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadFragment.class), Intent.FLAG_ACTIVITY_NEW_TASK);
progressNotification.contentIntent = contentIntent;
- startForeground(NOTIFICATION_PROCESSING, progressNotification);//TODO werkt het?
+ startForeground(NOTIFICATION_PROCESSING, progressNotification);
Message msg = Message.obtain(null, DownloadFragment.MSG_START, max, 0);
sendMessageToClients(msg);
@@ -196,10 +197,18 @@
}
//Call back from the ASync task when the task has either run into an error or finished otherwise
- public void done(boolean succesful){
- if(succesful){
- sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE));
- }else sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED));
+ public void done(int result){
+ switch(result){
+ case DownloadAsyncTask.EXIT_SUCCESS: sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE)); break;
+ case DownloadAsyncTask.EXIT_CONNERROR: sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED)); break;
+ case DownloadAsyncTask.EXIT_FNF: sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED)); break;
+ case DownloadAsyncTask.EXIT_MD5: sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED)); break;
+ case DownloadAsyncTask.EXIT_URLFAIL: sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED)); break;
+ case DownloadAsyncTask.EXIT_CANCELLED: sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE)); break;
+
+
+ }
+
stopForeground(true);
nM.cancel(NOTIFICATION_PROCESSING);