project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java
changeset 10017 de822cd3df3a
parent 7584 7831c84cc644
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java	Tue Jan 21 22:38:13 2014 +0100
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java	Tue Jan 21 22:43:06 2014 +0100
@@ -37,194 +37,194 @@
 import android.widget.RemoteViews;
 
 public class DownloadService extends Service {
-	public final static String INTENT_TASKID = "taskId";
-	public final static String INTENT_TASK = "task";
+    public final static String INTENT_TASKID = "taskId";
+    public final static String INTENT_TASK = "task";
 
-	public static final String PREF_DOWNLOADED = "downloaded";
-	public static final int MSG_CANCEL = 0;
-	public static final int MSG_UNREGISTER_CLIENT = 2;
-	public final static int MSG_ADDTASK = 4;
+    public static final String PREF_DOWNLOADED = "downloaded";
+    public static final int MSG_CANCEL = 0;
+    public static final int MSG_UNREGISTER_CLIENT = 2;
+    public final static int MSG_ADDTASK = 4;
 
-	public static final int NOTIFICATION_PROCESSING = 0;
-	public static final int NOTIFICATION_DONE = 1;
+    public static final int NOTIFICATION_PROCESSING = 0;
+    public static final int NOTIFICATION_DONE = 1;
 
-	private DownloadAsyncTask asyncExecutor;
+    private DownloadAsyncTask asyncExecutor;
 
-	private DownloadHandler handler = new DownloadHandler();
-	private final Messenger messenger = new Messenger(handler);
+    private DownloadHandler handler = new DownloadHandler();
+    private final Messenger messenger = new Messenger(handler);
 
-	private NotificationManager nM;
-	private RemoteViews contentView;
+    private NotificationManager nM;
+    private RemoteViews contentView;
 
-	private LinkedList<DownloadTask> downloadTasks = new LinkedList<DownloadTask>();
-	private DownloadTask currentTask = null;
+    private LinkedList<DownloadTask> downloadTasks = new LinkedList<DownloadTask>();
+    private DownloadTask currentTask = null;
 
-	public class DownloadHandler extends Handler{
+    public class DownloadHandler extends Handler{
 
-		public void handleMessage(Message msg){
-			if(msg.obj != null){
-				DownloadPackage pack = (DownloadPackage) msg.obj;
-				DownloadTask task = null;
-				Messenger replyToMessenger = msg.replyTo;
-				for(DownloadTask _task : downloadTasks){
-					if(_task.getPackage().equals(pack)){
-						task = _task;
-						break;
-					}
-				}
+        public void handleMessage(Message msg){
+            if(msg.obj != null){
+                DownloadPackage pack = (DownloadPackage) msg.obj;
+                DownloadTask task = null;
+                Messenger replyToMessenger = msg.replyTo;
+                for(DownloadTask _task : downloadTasks){
+                    if(_task.getPackage().equals(pack)){
+                        task = _task;
+                        break;
+                    }
+                }
 
-				switch(msg.what){
-				case MSG_ADDTASK:
-					if(task == null){
-						task = new DownloadTask(pack);
-						downloadTasks.add(task);
-					}
+                switch(msg.what){
+                case MSG_ADDTASK:
+                    if(task == null){
+                        task = new DownloadTask(pack);
+                        downloadTasks.add(task);
+                    }
 
-					task.addClient(replyToMessenger);
-					runNextTask();
-					return;
-				case MSG_CANCEL:
-					if(task != null && task.getPackage().equals(pack) && task.getStatus() == TASK_STATE.PENDING){
-						downloadTasks.remove(task);
-					}
-					if(currentTask != null && currentTask.getPackage().equals(pack)){//TODO synchronization problem?
-						asyncExecutor.cancel(false);
-					}
-					return;
-				case MSG_UNREGISTER_CLIENT:
-					if(task != null){
-						task.removeClient(replyToMessenger);
-					}
-					return;
-				}
-			}
-		}
-	}
+                    task.addClient(replyToMessenger);
+                    runNextTask();
+                    return;
+                case MSG_CANCEL:
+                    if(task != null && task.getPackage().equals(pack) && task.getStatus() == TASK_STATE.PENDING){
+                        downloadTasks.remove(task);
+                    }
+                    if(currentTask != null && currentTask.getPackage().equals(pack)){//TODO synchronization problem?
+                        asyncExecutor.cancel(false);
+                    }
+                    return;
+                case MSG_UNREGISTER_CLIENT:
+                    if(task != null){
+                        task.removeClient(replyToMessenger);
+                    }
+                    return;
+                }
+            }
+        }
+    }
 
-	public void onCreate(){
-		super.onCreate();
-		nM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
-	}
-	public IBinder onBind(Intent intent) {
-		return messenger.getBinder();
-	}
+    public void onCreate(){
+        super.onCreate();
+        nM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+    }
+    public IBinder onBind(Intent intent) {
+        return messenger.getBinder();
+    }
 
-	private void runNextTask(){
-		if(asyncExecutor == null){//if (task isnt running right now) ...
-			currentTask = downloadTasks.poll();
-			if(currentTask != null){
-				asyncExecutor = new DownloadAsyncTask(currentTask);
-				asyncExecutor.execute(currentTask.getPackage());
-			}
-		}
-	}
+    private void runNextTask(){
+        if(asyncExecutor == null){//if (task isnt running right now) ...
+            currentTask = downloadTasks.poll();
+            if(currentTask != null){
+                asyncExecutor = new DownloadAsyncTask(currentTask);
+                asyncExecutor.execute(currentTask.getPackage());
+            }
+        }
+    }
 
-	public void onDestroy(){
-		super.onDestroy();
-		asyncExecutor.cancel(false);	
-	}
+    public void onDestroy(){
+        super.onDestroy();
+        asyncExecutor.cancel(false);
+    }
 
-	class DownloadTask {
-		private final DownloadPackage pack;
-		private TASK_STATE status = TASK_STATE.PENDING;
-		private Notification progressNotification, doneNotification;
+    class DownloadTask {
+        private final DownloadPackage pack;
+        private TASK_STATE status = TASK_STATE.PENDING;
+        private Notification progressNotification, doneNotification;
 
-		//I expect little to no removeClient calls that's why we go for a list rather than a map
-		private final List<Messenger> clients;
+        //I expect little to no removeClient calls that's why we go for a list rather than a map
+        private final List<Messenger> clients;
 
-		public DownloadTask(DownloadPackage _pack){
-			pack = _pack;
-			clients = new LinkedList<Messenger>();
-		}
+        public DownloadTask(DownloadPackage _pack){
+            pack = _pack;
+            clients = new LinkedList<Messenger>();
+        }
 
-		public void addClient(Messenger messenger){
-			clients.add(messenger);
-		}
-		public void removeClient(Messenger messenger){
-			clients.remove(messenger);
-		}
+        public void addClient(Messenger messenger){
+            clients.add(messenger);
+        }
+        public void removeClient(Messenger messenger){
+            clients.remove(messenger);
+        }
 
-		public DownloadPackage getPackage(){
-			return pack;
-		}
+        public DownloadPackage getPackage(){
+            return pack;
+        }
 
-		public TASK_STATE getStatus(){
-			return status;
-		}
+        public TASK_STATE getStatus(){
+            return status;
+        }
 
-		public void sendMessageToClients(Message msg){
-			for(Messenger messenger : clients){
-				try {
-					messenger.send(msg);		
-				} catch (RemoteException e) {
-					e.printStackTrace();
-				}
-			}
-		}
+        public void sendMessageToClients(Message msg){
+            for(Messenger messenger : clients){
+                try {
+                    messenger.send(msg);
+                } catch (RemoteException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
 
-		/*
-		 * Callbacks called from the async tasks
-		 */
+        /*
+         * Callbacks called from the async tasks
+         */
 
-		//Thread safe method to let clients know the processing is starting and will process int max kbytes
-		public void start(int max){
-			progressNotification = new Notification(R.drawable.statusbar, getString(R.string.notification_title), System.currentTimeMillis());
-			progressNotification.flags |= Notification.FLAG_ONGOING_EVENT;
+        //Thread safe method to let clients know the processing is starting and will process int max kbytes
+        public void start(int max){
+            progressNotification = new Notification(R.drawable.statusbar, getString(R.string.notification_title), System.currentTimeMillis());
+            progressNotification.flags |= Notification.FLAG_ONGOING_EVENT;
 
-			contentView = new RemoteViews(getPackageName(), R.layout.notification);
-			contentView.setProgressBar(R.id.notification_progress, 100, 34, false);
-			progressNotification.contentView = contentView;
+            contentView = new RemoteViews(getPackageName(), R.layout.notification);
+            contentView.setProgressBar(R.id.notification_progress, 100, 34, false);
+            progressNotification.contentView = contentView;
 
-			PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadListActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
-			progressNotification.contentIntent = contentIntent;
+            PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadListActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
+            progressNotification.contentIntent = contentIntent;
 
-			startForeground(NOTIFICATION_PROCESSING, progressNotification);
+            startForeground(NOTIFICATION_PROCESSING, progressNotification);
 
-			Message msg = Message.obtain(null, DownloadFragment.MSG_START, max, 0);
-			sendMessageToClients(msg);
-		}
+            Message msg = Message.obtain(null, DownloadFragment.MSG_START, max, 0);
+            sendMessageToClients(msg);
+        }
 
-		//periodically gets called by the ASyncTask, we can't tell for sure when it's called
-		public void update(int progress, int max, String fileName){
-			progress = (progress/1024);
+        //periodically gets called by the ASyncTask, we can't tell for sure when it's called
+        public void update(int progress, int max, String fileName){
+            progress = (progress/1024);
 
-			contentView.setProgressBar(R.id.notification_progress, max, progress, false);
-			contentView.setTextViewText(R.id.progressbar_sub, String.format("%dkb/%dkb (Compressed sizes)", progress, max));
-			nM.notify(NOTIFICATION_PROCESSING, progressNotification);
+            contentView.setProgressBar(R.id.notification_progress, max, progress, false);
+            contentView.setTextViewText(R.id.progressbar_sub, String.format("%dkb/%dkb (Compressed sizes)", progress, max));
+            nM.notify(NOTIFICATION_PROCESSING, progressNotification);
 
-			sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_UPDATE, progress, max, fileName));
-		}
+            sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_UPDATE, progress, max, fileName));
+        }
 
-		//Call back from the ASync task when the task has either run into an error or finished otherwise
-		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, DownloadAsyncTask.EXIT_CONNERROR, 0)); break;
-			case DownloadAsyncTask.EXIT_FNF:		sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_FNF, 0)); break;
-			case DownloadAsyncTask.EXIT_MD5:		sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_MD5, 0)); break;
-			case DownloadAsyncTask.EXIT_URLFAIL:	sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_URLFAIL, 0)); break;
-			case DownloadAsyncTask.EXIT_CANCELLED:	sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE)); break;
-			}
-			
-			stopForeground(true);
-			nM.cancel(NOTIFICATION_PROCESSING);
+        //Call back from the ASync task when the task has either run into an error or finished otherwise
+        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, DownloadAsyncTask.EXIT_CONNERROR, 0)); break;
+            case DownloadAsyncTask.EXIT_FNF:        sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_FNF, 0)); break;
+            case DownloadAsyncTask.EXIT_MD5:        sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_MD5, 0)); break;
+            case DownloadAsyncTask.EXIT_URLFAIL:    sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_URLFAIL, 0)); break;
+            case DownloadAsyncTask.EXIT_CANCELLED:  sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE)); break;
+            }
 
-			String title = getString(R.string.notification_title);
+            stopForeground(true);
+            nM.cancel(NOTIFICATION_PROCESSING);
+
+            String title = getString(R.string.notification_title);
 
-			doneNotification = new Notification(R.drawable.icon, title, System.currentTimeMillis());
-			doneNotification.flags |= Notification.FLAG_AUTO_CANCEL;
-			PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadListActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
-			doneNotification.setLatestEventInfo(DownloadService.this, title, getString(R.string.notification_done) + pack, contentIntent);
-			nM.notify(pack.getId(), doneNotification);
+            doneNotification = new Notification(R.drawable.icon, title, System.currentTimeMillis());
+            doneNotification.flags |= Notification.FLAG_AUTO_CANCEL;
+            PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadListActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
+            doneNotification.setLatestEventInfo(DownloadService.this, title, getString(R.string.notification_done) + pack, contentIntent);
+            nM.notify(pack.getId(), doneNotification);
 
-			asyncExecutor = null;
-			runNextTask();//see if there are more tasks
-		}
+            asyncExecutor = null;
+            runNextTask();//see if there are more tasks
+        }
 
-	}
+    }
 
-	enum TASK_STATE{
-		RUNNING, FINISHED, PENDING;
-	}
+    enum TASK_STATE{
+        RUNNING, FINISHED, PENDING;
+    }
 
 }