project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java
author koda
Tue, 21 Jan 2014 22:43:06 +0100
changeset 10017 de822cd3df3a
parent 7584 7831c84cc644
permissions -rw-r--r--
fixwhitespace and dos2unix
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     1
/*
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     2
 * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
6700
e04da46ee43c the most important commit of the year
koda
parents: 6587
diff changeset
     3
 * Copyright (c) 2011-2012 Richard Deurwaarder <xeli@xelification.com>
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     4
 *
7584
7831c84cc644 License change: With the agreement of Xeli, I changed the Hedgeroid license to
Medo <smaxein@googlemail.com>
parents: 6700
diff changeset
     5
 * This program is free software; you can redistribute it and/or
7831c84cc644 License change: With the agreement of Xeli, I changed the Hedgeroid license to
Medo <smaxein@googlemail.com>
parents: 6700
diff changeset
     6
 * modify it under the terms of the GNU General Public License
7831c84cc644 License change: With the agreement of Xeli, I changed the Hedgeroid license to
Medo <smaxein@googlemail.com>
parents: 6700
diff changeset
     7
 * as published by the Free Software Foundation; either version 2
7831c84cc644 License change: With the agreement of Xeli, I changed the Hedgeroid license to
Medo <smaxein@googlemail.com>
parents: 6700
diff changeset
     8
 * of the License, or (at your option) any later version.
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     9
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    13
 * GNU General Public License for more details.
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    14
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
7584
7831c84cc644 License change: With the agreement of Xeli, I changed the Hedgeroid license to
Medo <smaxein@googlemail.com>
parents: 6700
diff changeset
    17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    18
 */
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    19
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    20
package org.hedgewars.hedgeroid.Downloader;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    21
6343
9df5a486f41e first part of the new downloader implementation
Xeli
parents: 6049
diff changeset
    22
import java.util.LinkedList;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
    23
import java.util.List;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    24
6049
7bc38086d771 wops missed this one: removed a 'fix' eclipse put in there
Xeli
parents: 6047
diff changeset
    25
import org.hedgewars.hedgeroid.R;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    26
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    27
import android.app.Notification;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    28
import android.app.NotificationManager;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    29
import android.app.PendingIntent;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    30
import android.app.Service;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    31
import android.content.Intent;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    32
import android.os.Handler;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    33
import android.os.IBinder;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    34
import android.os.Message;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    35
import android.os.Messenger;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    36
import android.os.RemoteException;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    37
import android.widget.RemoteViews;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    38
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    39
public class DownloadService extends Service {
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    40
    public final static String INTENT_TASKID = "taskId";
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    41
    public final static String INTENT_TASK = "task";
6343
9df5a486f41e first part of the new downloader implementation
Xeli
parents: 6049
diff changeset
    42
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    43
    public static final String PREF_DOWNLOADED = "downloaded";
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    44
    public static final int MSG_CANCEL = 0;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    45
    public static final int MSG_UNREGISTER_CLIENT = 2;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    46
    public final static int MSG_ADDTASK = 4;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    47
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    48
    public static final int NOTIFICATION_PROCESSING = 0;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    49
    public static final int NOTIFICATION_DONE = 1;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    50
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    51
    private DownloadAsyncTask asyncExecutor;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
    52
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    53
    private DownloadHandler handler = new DownloadHandler();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    54
    private final Messenger messenger = new Messenger(handler);
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
    55
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    56
    private NotificationManager nM;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    57
    private RemoteViews contentView;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    58
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    59
    private LinkedList<DownloadTask> downloadTasks = new LinkedList<DownloadTask>();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    60
    private DownloadTask currentTask = null;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    61
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    62
    public class DownloadHandler extends Handler{
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    63
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    64
        public void handleMessage(Message msg){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    65
            if(msg.obj != null){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    66
                DownloadPackage pack = (DownloadPackage) msg.obj;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    67
                DownloadTask task = null;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    68
                Messenger replyToMessenger = msg.replyTo;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    69
                for(DownloadTask _task : downloadTasks){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    70
                    if(_task.getPackage().equals(pack)){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    71
                        task = _task;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    72
                        break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    73
                    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    74
                }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
    75
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    76
                switch(msg.what){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    77
                case MSG_ADDTASK:
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    78
                    if(task == null){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    79
                        task = new DownloadTask(pack);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    80
                        downloadTasks.add(task);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    81
                    }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
    82
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    83
                    task.addClient(replyToMessenger);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    84
                    runNextTask();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    85
                    return;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    86
                case MSG_CANCEL:
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    87
                    if(task != null && task.getPackage().equals(pack) && task.getStatus() == TASK_STATE.PENDING){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    88
                        downloadTasks.remove(task);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    89
                    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    90
                    if(currentTask != null && currentTask.getPackage().equals(pack)){//TODO synchronization problem?
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    91
                        asyncExecutor.cancel(false);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    92
                    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    93
                    return;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    94
                case MSG_UNREGISTER_CLIENT:
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    95
                    if(task != null){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    96
                        task.removeClient(replyToMessenger);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    97
                    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    98
                    return;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
    99
                }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   100
            }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   101
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   102
    }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   103
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   104
    public void onCreate(){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   105
        super.onCreate();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   106
        nM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   107
    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   108
    public IBinder onBind(Intent intent) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   109
        return messenger.getBinder();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   110
    }
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   111
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   112
    private void runNextTask(){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   113
        if(asyncExecutor == null){//if (task isnt running right now) ...
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   114
            currentTask = downloadTasks.poll();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   115
            if(currentTask != null){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   116
                asyncExecutor = new DownloadAsyncTask(currentTask);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   117
                asyncExecutor.execute(currentTask.getPackage());
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   118
            }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   119
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   120
    }
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   121
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   122
    public void onDestroy(){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   123
        super.onDestroy();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   124
        asyncExecutor.cancel(false);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   125
    }
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   126
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   127
    class DownloadTask {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   128
        private final DownloadPackage pack;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   129
        private TASK_STATE status = TASK_STATE.PENDING;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   130
        private Notification progressNotification, doneNotification;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   131
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   132
        //I expect little to no removeClient calls that's why we go for a list rather than a map
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   133
        private final List<Messenger> clients;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   134
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   135
        public DownloadTask(DownloadPackage _pack){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   136
            pack = _pack;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   137
            clients = new LinkedList<Messenger>();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   138
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   139
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   140
        public void addClient(Messenger messenger){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   141
            clients.add(messenger);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   142
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   143
        public void removeClient(Messenger messenger){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   144
            clients.remove(messenger);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   145
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   146
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   147
        public DownloadPackage getPackage(){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   148
            return pack;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   149
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   150
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   151
        public TASK_STATE getStatus(){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   152
            return status;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   153
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   154
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   155
        public void sendMessageToClients(Message msg){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   156
            for(Messenger messenger : clients){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   157
                try {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   158
                    messenger.send(msg);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   159
                } catch (RemoteException e) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   160
                    e.printStackTrace();
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   161
                }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   162
            }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   163
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   164
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   165
        /*
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   166
         * Callbacks called from the async tasks
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   167
         */
6343
9df5a486f41e first part of the new downloader implementation
Xeli
parents: 6049
diff changeset
   168
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   169
        //Thread safe method to let clients know the processing is starting and will process int max kbytes
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   170
        public void start(int max){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   171
            progressNotification = new Notification(R.drawable.statusbar, getString(R.string.notification_title), System.currentTimeMillis());
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   172
            progressNotification.flags |= Notification.FLAG_ONGOING_EVENT;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   173
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   174
            contentView = new RemoteViews(getPackageName(), R.layout.notification);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   175
            contentView.setProgressBar(R.id.notification_progress, 100, 34, false);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   176
            progressNotification.contentView = contentView;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   177
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   178
            PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadListActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   179
            progressNotification.contentIntent = contentIntent;
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   180
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   181
            startForeground(NOTIFICATION_PROCESSING, progressNotification);
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   182
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   183
            Message msg = Message.obtain(null, DownloadFragment.MSG_START, max, 0);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   184
            sendMessageToClients(msg);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   185
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   186
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   187
        //periodically gets called by the ASyncTask, we can't tell for sure when it's called
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   188
        public void update(int progress, int max, String fileName){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   189
            progress = (progress/1024);
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   190
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   191
            contentView.setProgressBar(R.id.notification_progress, max, progress, false);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   192
            contentView.setTextViewText(R.id.progressbar_sub, String.format("%dkb/%dkb (Compressed sizes)", progress, max));
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   193
            nM.notify(NOTIFICATION_PROCESSING, progressNotification);
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   194
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   195
            sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_UPDATE, progress, max, fileName));
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   196
        }
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   197
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   198
        //Call back from the ASync task when the task has either run into an error or finished otherwise
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   199
        public void done(int result){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   200
            switch(result){
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   201
            case DownloadAsyncTask.EXIT_SUCCESS:    sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE)); break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   202
            case DownloadAsyncTask.EXIT_CONNERROR:  sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_CONNERROR, 0)); break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   203
            case DownloadAsyncTask.EXIT_FNF:        sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_FNF, 0)); break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   204
            case DownloadAsyncTask.EXIT_MD5:        sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_MD5, 0)); break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   205
            case DownloadAsyncTask.EXIT_URLFAIL:    sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_FAILED, DownloadAsyncTask.EXIT_URLFAIL, 0)); break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   206
            case DownloadAsyncTask.EXIT_CANCELLED:  sendMessageToClients(Message.obtain(handler, DownloadFragment.MSG_DONE)); break;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   207
            }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   208
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   209
            stopForeground(true);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   210
            nM.cancel(NOTIFICATION_PROCESSING);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   211
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   212
            String title = getString(R.string.notification_title);
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   213
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   214
            doneNotification = new Notification(R.drawable.icon, title, System.currentTimeMillis());
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   215
            doneNotification.flags |= Notification.FLAG_AUTO_CANCEL;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   216
            PendingIntent contentIntent = PendingIntent.getActivity(DownloadService.this, 0, new Intent(DownloadService.this, DownloadListActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   217
            doneNotification.setLatestEventInfo(DownloadService.this, title, getString(R.string.notification_done) + pack, contentIntent);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   218
            nM.notify(pack.getId(), doneNotification);
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   219
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   220
            asyncExecutor = null;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   221
            runNextTask();//see if there are more tasks
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   222
        }
6350
41b0a9955c47 new download manager \o/
Xeli
parents: 6343
diff changeset
   223
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   224
    }
6343
9df5a486f41e first part of the new downloader implementation
Xeli
parents: 6049
diff changeset
   225
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   226
    enum TASK_STATE{
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   227
        RUNNING, FINISHED, PENDING;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7584
diff changeset
   228
    }
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   229
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   230
}