From: David A. Velasco Date: Fri, 13 Dec 2013 11:34:43 +0000 (+0100) Subject: Fixed propagation of download progress to download notifications X-Git-Tag: oc-android-1.5.5~100^2~4 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/415c3867c425494e61cb6530d375fee5e8db8cd7 Fixed propagation of download progress to download notifications --- diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java index ba397146..5d2a8246 100644 --- a/src/com/owncloud/android/files/services/FileDownloader.java +++ b/src/com/owncloud/android/files/services/FileDownloader.java @@ -147,8 +147,10 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis AbstractList requestedDownloads = new Vector(); // 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; } diff --git a/src/com/owncloud/android/operations/DownloadFileOperation.java b/src/com/owncloud/android/operations/DownloadFileOperation.java index fbd9f66d..8d89f636 100644 --- a/src/com/owncloud/android/operations/DownloadFileOperation.java +++ b/src/com/owncloud/android/operations/DownloadFileOperation.java @@ -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 mDataTransferListeners = new HashSet(); 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 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); + } + } + }