Fixed problem with DownloadlistAdapter
This commit is contained in:
parent
5fe7287ecd
commit
1057682860
|
@ -74,6 +74,9 @@ public class DownloadActivity extends SherlockListActivity implements
|
|||
DownloadService.ACTION_DOWNLOADS_CONTENT_CHANGED));
|
||||
bindService(new Intent(this, DownloadService.class), mConnection, 0);
|
||||
startContentRefresher();
|
||||
if (dla != null) {
|
||||
dla.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,6 +103,7 @@ public class DownloadActivity extends SherlockListActivity implements
|
|||
dla = new DownloadlistAdapter(DownloadActivity.this, 0,
|
||||
downloadService.getDownloads());
|
||||
setListAdapter(dla);
|
||||
dla.notifyDataSetChanged();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ import android.graphics.BitmapFactory;
|
|||
import android.media.MediaPlayer;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Binder;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
@ -109,6 +110,8 @@ public class DownloadService extends Service {
|
|||
/** True if service is running. */
|
||||
public static boolean isRunning = false;
|
||||
|
||||
private Handler handler;
|
||||
|
||||
private final IBinder mBinder = new LocalBinder();
|
||||
|
||||
public class LocalBinder extends Binder {
|
||||
|
@ -131,6 +134,7 @@ public class DownloadService extends Service {
|
|||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Service started");
|
||||
isRunning = true;
|
||||
handler = new Handler();
|
||||
completedDownloads = new ArrayList<DownloadStatus>();
|
||||
downloads = new ArrayList<Downloader>();
|
||||
registerReceiver(downloadQueued, new IntentFilter(
|
||||
|
@ -240,16 +244,24 @@ public class DownloadService extends Service {
|
|||
}
|
||||
|
||||
} else if (intent.getAction().equals(ACTION_CANCEL_ALL_DOWNLOADS)) {
|
||||
for (Downloader d : downloads) {
|
||||
d.interrupt();
|
||||
DownloadRequester.getInstance().removeDownload(
|
||||
d.getStatus().getFeedFile());
|
||||
d.getStatus().getFeedFile().setFile_url(null);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Cancelled all downloads");
|
||||
}
|
||||
downloads.clear();
|
||||
sendBroadcast(new Intent(ACTION_DOWNLOADS_CONTENT_CHANGED));
|
||||
handler.post(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (Downloader d : downloads) {
|
||||
d.interrupt();
|
||||
DownloadRequester.getInstance().removeDownload(
|
||||
d.getStatus().getFeedFile());
|
||||
d.getStatus().getFeedFile().setFile_url(null);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Cancelled all downloads");
|
||||
}
|
||||
downloads.clear();
|
||||
sendBroadcast(new Intent(
|
||||
ACTION_DOWNLOADS_CONTENT_CHANGED));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
queryDownloads();
|
||||
}
|
||||
|
@ -317,6 +329,7 @@ public class DownloadService extends Service {
|
|||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received 'Download Complete' - message.");
|
||||
DownloadStatus status = downloader.getStatus();
|
||||
status.setCompletionDate(new Date());
|
||||
boolean successful = status.isSuccessful();
|
||||
int reason = status.getReason();
|
||||
|
||||
|
@ -355,11 +368,18 @@ public class DownloadService extends Service {
|
|||
* Remove download from the DownloadRequester list and from the
|
||||
* DownloadService list.
|
||||
*/
|
||||
private void removeDownload(Downloader d) {
|
||||
downloads.remove(d);
|
||||
DownloadRequester.getInstance().removeDownload(
|
||||
d.getStatus().getFeedFile());
|
||||
sendBroadcast(new Intent(ACTION_DOWNLOADS_CONTENT_CHANGED));
|
||||
private void removeDownload(final Downloader d) {
|
||||
handler.post(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
downloads.remove(d);
|
||||
DownloadRequester.getInstance().removeDownload(
|
||||
d.getStatus().getFeedFile());
|
||||
sendBroadcast(new Intent(ACTION_DOWNLOADS_CONTENT_CHANGED));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -617,7 +637,6 @@ public class DownloadService extends Service {
|
|||
public void run() {
|
||||
image.setDownloaded(true);
|
||||
|
||||
status.setCompletionDate(new Date());
|
||||
saveDownloadStatus(status);
|
||||
sendDownloadHandledIntent(DOWNLOAD_TYPE_IMAGE);
|
||||
manager.setFeedImage(DownloadService.this, image);
|
||||
|
@ -658,7 +677,6 @@ public class DownloadService extends Service {
|
|||
Log.d(TAG, "Duration of file is " + media.getDuration());
|
||||
mediaplayer.reset();
|
||||
|
||||
status.setCompletionDate(new Date());
|
||||
saveDownloadStatus(status);
|
||||
sendDownloadHandledIntent(DOWNLOAD_TYPE_MEDIA);
|
||||
manager.setFeedMedia(service, media);
|
||||
|
|
|
@ -10,49 +10,52 @@ import android.util.Log;
|
|||
/** Parses several date formats. */
|
||||
public class SyndDateUtils {
|
||||
private static final String TAG = "DateUtils";
|
||||
public static final String RFC822 = "dd MMM yyyy HH:mm:ss Z";
|
||||
/** RFC 822 date format with day of the week. */
|
||||
public static final String RFC822DAY = "EEE, " + RFC822;
|
||||
|
||||
public static final String[] RFC822DATES = { "EEE, dd MMM yyyy HH:mm:ss Z",
|
||||
"dd MMM yyyy HH:mm:ss Z", "EEE, dd MMM yy HH:mm:ss Z",
|
||||
"dd MMM yy HH:mm:ss Z", "EEE, dd MMM yyyy HH:mm:ss z",
|
||||
"dd MMM yyyy HH:mm:ss z", "EEE, dd MMM yy HH:mm:ss z",
|
||||
"dd MMM yy HH:mm:ss z" };
|
||||
|
||||
/** RFC 3339 date format for UTC dates. */
|
||||
public static final String RFC3339UTC = "yyyy-MM-dd'T'HH:mm:ss'Z'";
|
||||
|
||||
/** RFC 3339 date format for localtime dates with offset. */
|
||||
public static final String RFC3339LOCAL = "yyyy-MM-dd'T'HH:mm:ssZ";
|
||||
|
||||
|
||||
private static ThreadLocal<SimpleDateFormat> RFC822Formatter = new ThreadLocal<SimpleDateFormat>() {
|
||||
@Override
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat(RFC822DAY, Locale.US);
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat(RFC822DATES[0], Locale.US);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private static ThreadLocal<SimpleDateFormat> RFC3339Formatter = new ThreadLocal<SimpleDateFormat>() {
|
||||
@Override
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat(RFC3339UTC, Locale.US);
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
public static Date parseRFC822Date(final String date) {
|
||||
private static ThreadLocal<SimpleDateFormat> RFC3339Formatter = new ThreadLocal<SimpleDateFormat>() {
|
||||
@Override
|
||||
protected SimpleDateFormat initialValue() {
|
||||
return new SimpleDateFormat(RFC3339UTC, Locale.US);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public static Date parseRFC822Date(String date) {
|
||||
Date result = null;
|
||||
if (date.contains("PDT")) {
|
||||
date = date.replace("PDT", "PST8PDT");
|
||||
}
|
||||
SimpleDateFormat format = RFC822Formatter.get();
|
||||
try {
|
||||
result = format.parse(date);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
format.applyPattern(RFC822);
|
||||
for (int i = 0; i < RFC822DATES.length; i++) {
|
||||
try {
|
||||
result = format.parse(date);
|
||||
} catch (ParseException e1) {
|
||||
e1.printStackTrace();
|
||||
Log.e(TAG, "Unable to parse feed date correctly");
|
||||
} finally {
|
||||
format.applyPattern(RFC822DAY); // apply old pattern again
|
||||
result = format.parse(date);
|
||||
break;
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (result == null) {
|
||||
Log.e(TAG, "Unable to parse feed date correctly");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -90,7 +93,11 @@ public class SyndDateUtils {
|
|||
return result;
|
||||
|
||||
}
|
||||
/** Takes a string of the form [HH:]MM:SS[.mmm] and converts it to milliseconds. */
|
||||
|
||||
/**
|
||||
* Takes a string of the form [HH:]MM:SS[.mmm] and converts it to
|
||||
* milliseconds.
|
||||
*/
|
||||
public static long parseTimeString(final String time) {
|
||||
String[] parts = time.split(":");
|
||||
long result = 0;
|
||||
|
@ -102,7 +109,7 @@ public class SyndDateUtils {
|
|||
}
|
||||
result += Integer.valueOf(parts[idx]) * 60000;
|
||||
idx++;
|
||||
result += ( Float.valueOf(parts[idx])) * 1000;
|
||||
result += (Float.valueOf(parts[idx])) * 1000;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue