diff -r f1a42ba9cab2 -r 4ed58839b13b 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 downloadTasks = new LinkedList(); + 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);