From: masensio Date: Thu, 19 Feb 2015 17:48:04 +0000 (+0100) Subject: Changes from Comments in PR#886 X-Git-Tag: oc-android-1.7.1_signed^2~40^2~6 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/83ad608faadfcfc5a0ceee9d6c460702b3ff3f11?ds=inline;hp=-c Changes from Comments in PR#886 --- 83ad608faadfcfc5a0ceee9d6c460702b3ff3f11 diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java index a126028b..67cbc599 100644 --- a/src/com/owncloud/android/files/services/FileDownloader.java +++ b/src/com/owncloud/android/files/services/FileDownloader.java @@ -67,18 +67,18 @@ import android.support.v4.app.NotificationCompat; import android.util.Pair; public class FileDownloader extends Service implements OnDatatransferProgressListener { - + public static final String EXTRA_ACCOUNT = "ACCOUNT"; public static final String EXTRA_FILE = "FILE"; private static final String DOWNLOAD_ADDED_MESSAGE = "DOWNLOAD_ADDED"; private static final String DOWNLOAD_FINISH_MESSAGE = "DOWNLOAD_FINISH"; - public static final String EXTRA_DOWNLOAD_RESULT = "RESULT"; + public static final String EXTRA_DOWNLOAD_RESULT = "RESULT"; public static final String EXTRA_FILE_PATH = "FILE_PATH"; public static final String EXTRA_REMOTE_PATH = "REMOTE_PATH"; public static final String EXTRA_LINKED_TO_PATH = "LINKED_TO"; public static final String ACCOUNT_NAME = "ACCOUNT_NAME"; - + private static final String TAG = "FileDownloader"; private Looper mServiceLooper; @@ -87,24 +87,24 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis private OwnCloudClient mDownloadClient = null; private Account mCurrentAccount = null; private FileDataStorageManager mStorageManager; - + private IndexedForest mPendingDownloads = new IndexedForest(); private DownloadFileOperation mCurrentDownload = null; - + private NotificationManager mNotificationManager; private NotificationCompat.Builder mNotificationBuilder; private int mLastPercent; - + public static String getDownloadAddedMessage() { return FileDownloader.class.getName() + DOWNLOAD_ADDED_MESSAGE; } - + public static String getDownloadFinishMessage() { return FileDownloader.class.getName() + DOWNLOAD_FINISH_MESSAGE; } - + /** * Service initialization */ @@ -126,7 +126,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis */ @Override public void onDestroy() { - Log_OC.v(TAG, "Destroying service" ); + Log_OC.v(TAG, "Destroying service"); mBinder = null; mServiceHandler = null; mServiceLooper.quit(); @@ -138,7 +138,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Entry point to add one or several files to the queue of downloads. - * + *

* New downloads are added calling to startService(), resulting in a call to this method. * This ensures the service will keep on working although the caller activity goes away. */ @@ -146,9 +146,9 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis public int onStartCommand(Intent intent, int flags, int startId) { Log_OC.d(TAG, "Starting command with id " + startId); - if ( !intent.hasExtra(EXTRA_ACCOUNT) || + if (!intent.hasExtra(EXTRA_ACCOUNT) || !intent.hasExtra(EXTRA_FILE) - ) { + ) { Log_OC.e(TAG, "Not enough information provided in intent"); return START_NOT_STICKY; } else { @@ -160,22 +160,22 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis "Received request to download file" );*/ - AbstractList requestedDownloads = new Vector(); - try { - DownloadFileOperation newDownload = new DownloadFileOperation(account, file); - newDownload.addDatatransferProgressListener(this); - newDownload.addDatatransferProgressListener((FileDownloaderBinder) mBinder); - Pair putResult = mPendingDownloads.putIfAbsent( + AbstractList requestedDownloads = new Vector(); + try { + DownloadFileOperation newDownload = new DownloadFileOperation(account, file); + newDownload.addDatatransferProgressListener(this); + newDownload.addDatatransferProgressListener((FileDownloaderBinder) mBinder); + Pair putResult = mPendingDownloads.putIfAbsent( account, file.getRemotePath(), newDownload - ); - String downloadKey = putResult.first; - requestedDownloads.add(downloadKey); + ); + String downloadKey = putResult.first; + requestedDownloads.add(downloadKey); /*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(), "Download on " + file.getRemotePath() + " added to queue" );*/ - // Store file on db with state 'downloading' + // Store file on db with state 'downloading' /* TODO - check if helps with UI responsiveness, letting only folders use FileDownloaderBinder to check FileDataStorageManager storageManager = new FileDataStorageManager(account, getContentResolver()); @@ -183,19 +183,19 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis storageManager.saveFile(file); */ - sendBroadcastNewDownload(newDownload, putResult.second); + sendBroadcastNewDownload(newDownload, putResult.second); - } catch (IllegalArgumentException e) { - Log_OC.e(TAG, "Not enough information provided in intent: " + e.getMessage()); - return START_NOT_STICKY; - } + } catch (IllegalArgumentException e) { + Log_OC.e(TAG, "Not enough information provided in intent: " + e.getMessage()); + return START_NOT_STICKY; + } - if (requestedDownloads.size() > 0) { - Message msg = mServiceHandler.obtainMessage(); - msg.arg1 = startId; - msg.obj = requestedDownloads; - mServiceHandler.sendMessage(msg); - } + if (requestedDownloads.size() > 0) { + Message msg = mServiceHandler.obtainMessage(); + msg.arg1 = startId; + msg.obj = requestedDownloads; + mServiceHandler.sendMessage(msg); + } //} } @@ -206,7 +206,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Provides a binder object that clients can use to perform operations on the queue of downloads, * excepting the addition of new files. - * + *

* Implemented to perform cancellation, pause and resume of existing downloads. */ @Override @@ -220,19 +220,19 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis */ @Override public boolean onUnbind(Intent intent) { - ((FileDownloaderBinder)mBinder).clearListeners(); + ((FileDownloaderBinder) mBinder).clearListeners(); return false; // not accepting rebinding (default behaviour) } /** - * Binder to let client components to perform operations on the queue of downloads. - * - * It provides by itself the available operations. + * Binder to let client components to perform operations on the queue of downloads. + *

+ * It provides by itself the available operations. */ public class FileDownloaderBinder extends Binder implements OnDatatransferProgressListener { - - /** + + /** * Map of listeners that will be reported about progress of downloads from a {@link FileDownloaderBinder} * instance. */ @@ -243,8 +243,8 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Cancels a pending or current download of a remote file. * - * @param account ownCloud account where the remote file is stored. - * @param file A file in the queue of pending downloads + * @param account ownCloud account where the remote file is stored. + * @param file A file in the queue of pending downloads */ public void cancel(Account account, OCFile file) { /*Log_OC.v( @@ -286,27 +286,9 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis } } // Cancel pending downloads - ConcurrentMap downloadsAccount = mPendingDownloads.get(account); - Iterator it = downloadsAccount.keySet().iterator(); - Log_OC.d(TAG, "Number of pending downloads= " + downloadsAccount.size()); - while (it.hasNext()) { - String key = it.next(); - Log_OC.d(TAG, "download CANCELLED " + key); - if (key.startsWith(account.name)) { - DownloadFileOperation download; - synchronized (mPendingDownloads) { - download = mPendingDownloads.get(key); - if (download != null) { - String remotePath = download.getRemotePath(); - if (mPendingDownloads.contains(account, remotePath)) { - mPendingDownloads.remove(account, remotePath); - } - } - } - } - } + cancelDownloadsForAccount(account); } - + public void clearListeners() { mBoundListeners.clear(); } @@ -315,43 +297,43 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Returns True when the file described by 'file' in the ownCloud account 'account' is downloading or * waiting to download. - * + *

* If 'file' is a directory, returns 'true' if any of its descendant files is downloading or * waiting to download. - * - * @param account ownCloud account where the remote file is stored. - * @param file A file that could be in the queue of downloads. + * + * @param account ownCloud account where the remote file is stored. + * @param file A file that could be in the queue of downloads. */ public boolean isDownloading(Account account, OCFile file) { if (account == null || file == null) return false; return (mPendingDownloads.contains(account, file.getRemotePath())); } - + /** * Adds a listener interested in the progress of the download for a concrete file. - * - * @param listener Object to notify about progress of transfer. - * @param account ownCloud account holding the file of interest. - * @param file {@link OCFile} of interest for listener. + * + * @param listener Object to notify about progress of transfer. + * @param account ownCloud account holding the file of interest. + * @param file {@link OCFile} of interest for listener. */ - public void addDatatransferProgressListener ( + public void addDatatransferProgressListener( OnDatatransferProgressListener listener, Account account, OCFile file ) { if (account == null || file == null || listener == null) return; //String targetKey = buildKey(account, file.getRemotePath()); mBoundListeners.put(file.getFileId(), listener); } - - + + /** * Removes a listener interested in the progress of the download for a concrete file. - * - * @param listener Object to notify about progress of transfer. - * @param account ownCloud account holding the file of interest. - * @param file {@link OCFile} of interest for listener. + * + * @param listener Object to notify about progress of transfer. + * @param account ownCloud account holding the file of interest. + * @param file {@link OCFile} of interest for listener. */ - public void removeDatatransferProgressListener ( + public void removeDatatransferProgressListener( OnDatatransferProgressListener listener, Account account, OCFile file ) { if (account == null || file == null || listener == null) return; @@ -364,7 +346,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis @Override public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, - String fileName) { + String fileName) { //String key = buildKey(mCurrentDownload.getAccount(), mCurrentDownload.getFile().getRemotePath()); OnDatatransferProgressListener boundListener = mBoundListeners.get(mCurrentDownload.getFile().getFileId()); if (boundListener != null) { @@ -375,25 +357,26 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Review downloads and cancel it if its account doesn't exist */ - public void reviewDownloads() { + public void checkAccountOfCurrentDownload() { if (mCurrentDownload != null && !AccountUtils.exists(mCurrentDownload.getAccount(), getApplicationContext())) { mCurrentDownload.cancel(); } // The rest of downloads are cancelled when they try to start } - + } - - - /** - * Download worker. Performs the pending downloads in the order they were requested. - * - * Created with the Looper of a new thread, started in {@link FileUploader#onCreate()}. + + + /** + * Download worker. Performs the pending downloads in the order they were requested. + *

+ * Created with the Looper of a new thread, started in {@link FileUploader#onCreate()}. */ private static class ServiceHandler extends Handler { // don't make it a final class, and don't remove the static ; lint will warn about a possible memory leak FileDownloader mService; + public ServiceHandler(Looper looper, FileDownloader service) { super(looper); if (service == null) @@ -421,7 +404,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Core download method: requests a file to download and stores it. * - * @param downloadKey Key to access the download to perform, contained in mPendingDownloads + * @param downloadKey Key to access the download to perform, contained in mPendingDownloads */ private void downloadFile(String downloadKey) { @@ -432,7 +415,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis if (mCurrentDownload != null) { // Detect if the account exists if (AccountUtils.exists(mCurrentDownload.getAccount(), getApplicationContext())) { - Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().toString() + " exists"); + Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().name + " exists"); notifyDownloadStart(mCurrentDownload); RemoteOperationResult downloadResult = null; @@ -521,13 +504,13 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Creates a status notification to show the download progress - * - * @param download Download operation starting. + * + * @param download Download operation starting. */ private void notifyDownloadStart(DownloadFileOperation download) { /// create status notification with a progress bar mLastPercent = 0; - mNotificationBuilder = + mNotificationBuilder = NotificationBuilderWithProgressBar.newNotificationBuilderWithProgressBar(this); mNotificationBuilder .setSmallIcon(R.drawable.notification_icon) @@ -539,7 +522,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis String.format(getString(R.string.downloader_download_in_progress_content), 0, new File(download.getSavePath()).getName()) ); - + /// includes a pending intent in the notification showing the details view of the file Intent showDetailsIntent = null; if (PreviewImageFragment.canBePreviewed(download.getFile())) { @@ -550,22 +533,21 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, download.getFile()); showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, download.getAccount()); showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - + mNotificationBuilder.setContentIntent(PendingIntent.getActivity( - this, (int) System.currentTimeMillis(), showDetailsIntent, 0 + this, (int) System.currentTimeMillis(), showDetailsIntent, 0 )); mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotificationBuilder.build()); } - + /** * Callback method to update the progress bar in the status notification. */ @Override - public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filePath) - { - int percent = (int)(100.0*((double)totalTransferredSoFar)/((double)totalToTransfer)); + public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filePath) { + int percent = (int) (100.0 * ((double) totalTransferredSoFar) / ((double) totalToTransfer)); if (percent != mLastPercent) { mNotificationBuilder.setProgress(100, percent, totalToTransfer < 0); String fileName = filePath.substring(filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1); @@ -575,36 +557,36 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis } mLastPercent = percent; } - - + + /** * Updates the status notification with the result of a download operation. - * - * @param downloadResult Result of the download operation. - * @param download Finished download operation + * + * @param downloadResult Result of the download operation. + * @param download Finished download operation */ private void notifyDownloadResult(DownloadFileOperation download, RemoteOperationResult downloadResult) { mNotificationManager.cancel(R.string.downloader_download_in_progress_ticker); if (!downloadResult.isCancelled()) { - int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker : - R.string.downloader_download_failed_ticker; - + int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker : + R.string.downloader_download_failed_ticker; + boolean needsToUpdateCredentials = ( downloadResult.getCode() == ResultCode.UNAUTHORIZED || - downloadResult.isIdPRedirection() + downloadResult.isIdPRedirection() ); - tickerId = (needsToUpdateCredentials) ? + tickerId = (needsToUpdateCredentials) ? R.string.downloader_download_failed_credentials_error : tickerId; - + mNotificationBuilder - .setTicker(getString(tickerId)) - .setContentTitle(getString(tickerId)) - .setAutoCancel(true) - .setOngoing(false) - .setProgress(0, 0, false); - + .setTicker(getString(tickerId)) + .setContentTitle(getString(tickerId)) + .setAutoCancel(true) + .setOngoing(false) + .setProgress(0, 0, false); + if (needsToUpdateCredentials) { - + // let the user update credentials with one click Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class); updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, download.getAccount()); @@ -615,41 +597,41 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND); mNotificationBuilder - .setContentIntent(PendingIntent.getActivity( - this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT)); - + .setContentIntent(PendingIntent.getActivity( + this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT)); + } else { // TODO put something smart in showDetailsIntent - Intent showDetailsIntent = new Intent(); + Intent showDetailsIntent = new Intent(); mNotificationBuilder - .setContentIntent(PendingIntent.getActivity( - this, (int) System.currentTimeMillis(), showDetailsIntent, 0)); + .setContentIntent(PendingIntent.getActivity( + this, (int) System.currentTimeMillis(), showDetailsIntent, 0)); } - + mNotificationBuilder.setContentText( ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources()) ); mNotificationManager.notify(tickerId, mNotificationBuilder.build()); - + // Remove success notification - if (downloadResult.isSuccess()) { + if (downloadResult.isSuccess()) { // Sleep 2 seconds, so show the notification before remove it NotificationDelayer.cancelWithDelay( - mNotificationManager, - R.string.downloader_download_succeeded_ticker, + mNotificationManager, + R.string.downloader_download_succeeded_ticker, 2000); } - + } } - - + + /** * Sends a broadcast when a download finishes in order to the interested activities can update their view - * - * @param download Finished download operation - * @param downloadResult Result of the download operation - * @param unlinkedFromRemotePath Path in the downloads tree where the download was unlinked from + * + * @param download Finished download operation + * @param downloadResult Result of the download operation + * @param unlinkedFromRemotePath Path in the downloads tree where the download was unlinked from */ private void sendBroadcastDownloadFinished( DownloadFileOperation download, @@ -665,13 +647,13 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis } sendStickyBroadcast(end); } - - + + /** * Sends a broadcast when a new download is added to the queue. - * - * @param download Added download operation - * @param linkedToRemotePath Path in the downloads tree where the download was linked to + * + * @param download Added download operation + * @param linkedToRemotePath Path in the downloads tree where the download was linked to */ private void sendBroadcastNewDownload(DownloadFileOperation download, String linkedToRemotePath) { Intent added = new Intent(getDownloadAddedMessage()); @@ -684,30 +666,27 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /** * Remove downloads of an account + * * @param account */ - private void cancelDownloadsForAccount(Account account){ + private void cancelDownloadsForAccount(Account account) { // Cancel pending downloads ConcurrentMap downloadsAccount = mPendingDownloads.get(account); Iterator it = downloadsAccount.keySet().iterator(); Log_OC.d(TAG, "Number of pending downloads= " + downloadsAccount.size()); + DownloadFileOperation download; while (it.hasNext()) { String key = it.next(); Log_OC.d(TAG, "download CANCELLED " + key); if (key.startsWith(account.name)) { - DownloadFileOperation download; synchronized (mPendingDownloads) { download = mPendingDownloads.get(key); if (download != null) { String remotePath = download.getRemotePath(); - if (mPendingDownloads.contains(account, remotePath)) { - mPendingDownloads.remove(account, remotePath); - } + mPendingDownloads.remove(account, remotePath); } } } } } - - } diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index ef8bda45..d6ade1ab 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -370,7 +370,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe upload = mPendingUploads.remove(buildRemoteName(account, file)); } if (upload != null) { - mCurrentUpload.cancel(); + upload.cancel(); } } @@ -389,17 +389,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe } } // Cancel pending uploads - Iterator it = mPendingUploads.keySet().iterator(); - Log_OC.d(TAG, "Number of pending uploads= " + mPendingUploads.size()); - while (it.hasNext()) { - String key = it.next(); - Log_OC.d(TAG, "mPendingUploads CANCELLED " + key); - if (key.startsWith(account.name)) { - synchronized (mPendingUploads) { - mPendingUploads.remove(key); - } - } - } + cancelUploadForAccount(account.name); } public void clearListeners() { @@ -479,7 +469,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe /** * Review uploads and cancel it if its account doesn't exist */ - public void reviewUploads() { + public void checkAccountOfCurrentUpload() { if (mCurrentUpload != null && !AccountUtils.exists(mCurrentUpload.getAccount(), getApplicationContext())) { mCurrentUpload.cancel(); @@ -538,7 +528,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe // Detect if the account exists if (AccountUtils.exists(mCurrentUpload.getAccount(), getApplicationContext())) { - Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().toString() + " exists"); + Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().name + " exists"); notifyUploadStart(mCurrentUpload); @@ -557,7 +547,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe /// check the existence of the parent folder for the file to upload String remoteParentPath = new File(mCurrentUpload.getRemotePath()).getParent(); - remoteParentPath = remoteParentPath.endsWith(OCFile.PATH_SEPARATOR) ? remoteParentPath : remoteParentPath + OCFile.PATH_SEPARATOR; + remoteParentPath = remoteParentPath.endsWith(OCFile.PATH_SEPARATOR) ? + remoteParentPath : remoteParentPath + OCFile.PATH_SEPARATOR; grantResult = grantFolderExistence(remoteParentPath); /// perform the upload diff --git a/src/com/owncloud/android/files/services/IndexedForest.java b/src/com/owncloud/android/files/services/IndexedForest.java index f3c38fdd..66c2d437 100644 --- a/src/com/owncloud/android/files/services/IndexedForest.java +++ b/src/com/owncloud/android/files/services/IndexedForest.java @@ -220,9 +220,7 @@ public class IndexedForest { String key = it.next(); Log_OC.d("IndexedForest", "Number of pending downloads= " + mMap.size()); if (key.startsWith(account.name)) { - synchronized (accountMap) { - accountMap.putIfAbsent(key, mMap.get(key)); - } + accountMap.putIfAbsent(key, mMap.get(key)); } } return accountMap; diff --git a/src/com/owncloud/android/operations/UploadFileOperation.java b/src/com/owncloud/android/operations/UploadFileOperation.java index 42ca738f..7d51a4ad 100644 --- a/src/com/owncloud/android/operations/UploadFileOperation.java +++ b/src/com/owncloud/android/operations/UploadFileOperation.java @@ -318,37 +318,38 @@ public class UploadFileOperation extends RemoteOperation { } if (!mCancellationRequested.get()) { result = mUploadOperation.execute(client); - } - /// move local temporal file or original file to its corresponding - // location in the ownCloud local folder - if (result.isSuccess()) { - if (mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_FORGET) { - mFile.setStoragePath(null); - } else { - mFile.setStoragePath(expectedPath); - File fileToMove = null; - if (temporalFile != null) { // FileUploader.LOCAL_BEHAVIOUR_COPY - // ; see where temporalFile was - // set - fileToMove = temporalFile; - } else { // FileUploader.LOCAL_BEHAVIOUR_MOVE - fileToMove = originalFile; - } - if (!expectedFile.equals(fileToMove)) { - File expectedFolder = expectedFile.getParentFile(); - expectedFolder.mkdirs(); - if (!expectedFolder.isDirectory() || !fileToMove.renameTo(expectedFile)) { - mFile.setStoragePath(null); // forget the local file - // by now, treat this as a success; the file was - // uploaded; the user won't like that the local file - // is not linked, but this should be a very rare - // fail; - // the best option could be show a warning message - // (but not a fail) - // result = new - // RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED); - // return result; + /// move local temporal file or original file to its corresponding + // location in the ownCloud local folder + if (result.isSuccess()) { + if (mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_FORGET) { + mFile.setStoragePath(null); + + } else { + mFile.setStoragePath(expectedPath); + File fileToMove = null; + if (temporalFile != null) { // FileUploader.LOCAL_BEHAVIOUR_COPY + // ; see where temporalFile was + // set + fileToMove = temporalFile; + } else { // FileUploader.LOCAL_BEHAVIOUR_MOVE + fileToMove = originalFile; + } + if (!expectedFile.equals(fileToMove)) { + File expectedFolder = expectedFile.getParentFile(); + expectedFolder.mkdirs(); + if (!expectedFolder.isDirectory() || !fileToMove.renameTo(expectedFile)) { + mFile.setStoragePath(null); // forget the local file + // by now, treat this as a success; the file was + // uploaded; the user won't like that the local file + // is not linked, but this should be a very rare + // fail; + // the best option could be show a warning message + // (but not a fail) + // result = new + // RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED); + // return result; + } } } } @@ -357,7 +358,6 @@ public class UploadFileOperation extends RemoteOperation { } catch (Exception e) { // TODO something cleaner with cancellations if (mCancellationRequested.get()) { - mUploadOperation.cancel(); result = new RemoteOperationResult(new OperationCancelledException()); } else { result = new RemoteOperationResult(e); diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 578c5963..54efc6f1 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -370,8 +370,12 @@ public class FileActivity extends SherlockFragmentActivity public void onAccountsUpdated(Account[] accounts) { // detect a change in the list of accounts Log_OC.d(TAG, "onAccountsUpdated"); - mDownloaderBinder.reviewDownloads(); - mUploaderBinder.reviewUploads(); + if (mDownloaderBinder != null) { + mDownloaderBinder.checkAccountOfCurrentDownload(); + } + if (mUploaderBinder != null) { + mUploaderBinder.checkAccountOfCurrentUpload(); + } } diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index 3b98061e..4fafb480 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -444,8 +444,12 @@ public class Preferences extends SherlockPreferenceActivity Account account = new Account(mAccountName, MainApp.getAccountType()); if (!AccountUtils.exists(account, MainApp.getAppContext())) { // Cancel tranfers - mUploaderBinder.cancel(account); - mDownloaderBinder.cancel(account); + if (mUploaderBinder != null) { + mUploaderBinder.cancel(account); + } + if (mDownloaderBinder != null) { + mDownloaderBinder.cancel(account); + } } Account a = AccountUtils.getCurrentOwnCloudAccount(this);