Fixed propagation of download progress to download notifications

This commit is contained in:
David A. Velasco 2013-12-13 12:34:43 +01:00
parent f639fed5ab
commit 415c3867c4
2 changed files with 28 additions and 9 deletions

View file

@ -147,8 +147,10 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
AbstractList<String> requestedDownloads = new Vector<String>(); // dvelasco: now this always contains just one element, but that can change in a near future (download of multiple selection)
String downloadKey = buildRemoteName(account, file);
try {
DownloadFileOperation newDownload = new DownloadFileOperation(account, file, (FileDownloaderBinder) mBinder);
DownloadFileOperation newDownload = new DownloadFileOperation(account, file);
mPendingDownloads.putIfAbsent(downloadKey, newDownload);
newDownload.addDatatransferProgressListener(this);
newDownload.addDatatransferProgressListener((FileDownloaderBinder)mBinder);
requestedDownloads.add(downloadKey);
sendBroadcastNewDownload(newDownload);
@ -438,10 +440,10 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String fileName) {
int percent = (int)(100.0*((double)totalTransferredSoFar)/((double)totalToTransfer));
if (percent != mLastPercent) {
mNotification.contentView.setProgressBar(R.id.status_progress, 100, percent, totalToTransfer < 0);
String text = String.format(getString(R.string.downloader_download_in_progress_content), percent, fileName);
mNotification.contentView.setTextViewText(R.id.status_text, text);
mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotification);
mNotification.contentView.setProgressBar(R.id.status_progress, 100, percent, totalToTransfer < 0);
String text = String.format(getString(R.string.downloader_download_in_progress_content), percent, fileName);
mNotification.contentView.setTextViewText(R.id.status_text, text);
mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotification);
}
mLastPercent = percent;
}

View file

@ -18,6 +18,9 @@
package com.owncloud.android.operations;
import java.io.File;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.oc_framework.network.webdav.OnDatatransferProgressListener;
@ -44,13 +47,13 @@ public class DownloadFileOperation extends RemoteOperation {
private Account mAccount;
private OCFile mFile;
private OnDatatransferProgressListener mDatatransferProgressListener;
private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
private long mModificationTimestamp = 0;
private DownloadRemoteFileOperation mDownloadOperation;
public DownloadFileOperation(Account account, OCFile file, OnDatatransferProgressListener listener) {
public DownloadFileOperation(Account account, OCFile file) {
if (account == null)
throw new IllegalArgumentException("Illegal null account in DownloadFileOperation creation");
if (file == null)
@ -59,7 +62,6 @@ public class DownloadFileOperation extends RemoteOperation {
mAccount = account;
mFile = file;
mDatatransferProgressListener = listener;
}
@ -130,7 +132,10 @@ public class DownloadFileOperation extends RemoteOperation {
/// perform the download
mDownloadOperation = new DownloadRemoteFileOperation(remoteFile, tmpFolder);
mDownloadOperation.addDatatransferProgressListener(mDatatransferProgressListener);
Iterator<OnDatatransferProgressListener> listener = mDataTransferListeners.iterator();
while (listener.hasNext()) {
mDownloadOperation.addDatatransferProgressListener(listener.next());
}
result = mDownloadOperation.execute(client);
if (result.isSuccess()) {
@ -152,4 +157,16 @@ public class DownloadFileOperation extends RemoteOperation {
}
public void addDatatransferProgressListener (OnDatatransferProgressListener listener) {
synchronized (mDataTransferListeners) {
mDataTransferListeners.add(listener);
}
}
public void removeDatatransferProgressListener(OnDatatransferProgressListener listener) {
synchronized (mDataTransferListeners) {
mDataTransferListeners.remove(listener);
}
}
}