project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadService.java
author Wuzzy <almikes@aol.com>
Sat, 30 Sep 2017 23:52:08 +0200
changeset 12627 07fdda8c13a2
parent 10017 de822cd3df3a
permissions -rw-r--r--
TrophyRace: Fix game never eliminating any hogs after a hog skipped or ran out of time Warning: This commit _might_ invalidate past records, but I'm not sure if this is actually the case. Note that only the eliminiation part of the script is touched, not the actual race logic. Even if records are actually broken by this, I and sheepluva have decided that it's more imporant to fix this very, VERY stupid and old bug than to preserve records.
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
}