Update OperationsService to receive requests for cancelling downloads (WIP)
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / SynchronizeFolderOperation.java
index 8b5a681..72ccd13 100644 (file)
@@ -26,6 +26,7 @@ import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.OperationCancelledException;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -48,6 +49,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 //import android.support.v4.content.LocalBroadcastManager;
 
@@ -96,6 +98,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
 
     /** 'True' means that the remote folder changed and should be fetched */
     private boolean mRemoteFolderChanged;
+    private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
 
 
     /**
@@ -150,6 +153,13 @@ public class SynchronizeFolderOperation extends SyncOperation {
         mConflictsFound = 0;
         mForgottenLocalFiles.clear();
 
+        /// perform the download
+        synchronized(mCancellationRequested) {
+            if (mCancellationRequested.get()) {
+                return new RemoteOperationResult(new OperationCancelledException());
+            }
+        }
+
         result = checkForChanges(client);
 
         if (result.isSuccess()) {
@@ -514,6 +524,14 @@ public class SynchronizeFolderOperation extends SyncOperation {
         mContext.startService(i);
     }
 
+    /**
+     * Cancel operation
+     */
+    public void cancel(){
+        // WIP Cancel the sync operation
+        mCancellationRequested.set(true);
+    }
+
     public boolean getRemoteFolderChanged() {
         return mRemoteFolderChanged;
     }