Optimized binding to OperationsService to grant no result is lost
[pub/Android/ownCloud.git] / src / com / owncloud / android / files / FileOperationsHelper.java
index b7dc67f..73d598c 100644 (file)
@@ -19,7 +19,6 @@ package com.owncloud.android.files;
 
 import org.apache.http.protocol.HTTP;
 
-import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.Intent;
 import android.net.Uri;
@@ -32,11 +31,7 @@ import com.owncloud.android.datamodel.OCFile;
 
 import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.common.network.WebdavUtils;
-import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
-import com.owncloud.android.operations.RemoveFileOperation;
-import com.owncloud.android.operations.RenameFileOperation;
-import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.dialog.ShareLinkToDialog;
@@ -54,6 +49,9 @@ public class FileOperationsHelper {
     private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG"; 
 
     protected FileActivity mFileActivity = null;
+
+    /// Identifier of operation in progress which result shouldn't be lost 
+    private long mWaitingForOpId = Long.MAX_VALUE;
     
     public FileOperationsHelper(FileActivity fileActivity) {
         mFileActivity = fileActivity;
@@ -126,7 +124,7 @@ public class FileOperationsHelper {
             service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
             service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
             service.putExtra(OperationsService.EXTRA_SEND_INTENT, sendIntent);
-            mFileActivity.getOperationsServiceBinder().newOperation(service);
+            mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
             
         } else {
             Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
@@ -164,7 +162,7 @@ public class FileOperationsHelper {
             service.setAction(OperationsService.ACTION_UNSHARE);
             service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
             service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
-            mFileActivity.getOperationsServiceBinder().newOperation(service);
+            mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
             
             mFileActivity.showLoadingDialog();
             
@@ -196,53 +194,63 @@ public class FileOperationsHelper {
     
     
     public void syncFile(OCFile file) {
-        Account account = mFileActivity.getAccount();
-        RemoteOperation operation = new SynchronizeFileOperation(
-                file, 
-                null, 
-                mFileActivity.getStorageManager(), 
-                account, 
-                true, 
-                mFileActivity);
-        operation.execute(account, mFileActivity, mFileActivity, mFileActivity.getHandler(), mFileActivity);
+        // Sync file
+        Intent service = new Intent(mFileActivity, OperationsService.class);
+        service.setAction(OperationsService.ACTION_SYNC_FILE);
+        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); 
+        service.putExtra(OperationsService.EXTRA_SYNC_FILE_CONTENTS, true);
+        mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+        
         mFileActivity.showLoadingDialog();
     }
     
     
     public void renameFile(OCFile file, String newFilename) {
-        Account account = mFileActivity.getAccount();
-        RemoteOperation operation = new RenameFileOperation(
-                        file, 
-                        account, 
-                        newFilename, 
-                        mFileActivity.getStorageManager());
-        
-        operation.execute(
-                account, 
-                mFileActivity, 
-                mFileActivity, 
-                mFileActivity.getHandler(), 
-                mFileActivity);
+        // RenameFile
+        Intent service = new Intent(mFileActivity, OperationsService.class);
+        service.setAction(OperationsService.ACTION_RENAME);
+        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+        service.putExtra(OperationsService.EXTRA_NEWNAME, newFilename);
+        mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
         
         mFileActivity.showLoadingDialog();
     }
 
 
-    public void removeFile(OCFile file, boolean removeLocalCopy) {
-        Account account = mFileActivity.getAccount();
-        RemoteOperation operation = new RemoveFileOperation( 
-                file, 
-                removeLocalCopy, 
-                mFileActivity.getStorageManager());
-        
-        operation.execute(
-                account, 
-                mFileActivity, 
-                mFileActivity, 
-                mFileActivity.getHandler(), 
-                mFileActivity);
+    public void removeFile(OCFile file, boolean onlyLocalCopy) {
+        // RemoveFile
+        Intent service = new Intent(mFileActivity, OperationsService.class);
+        service.setAction(OperationsService.ACTION_REMOVE);
+        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+        service.putExtra(OperationsService.EXTRA_REMOVE_ONLY_LOCAL, onlyLocalCopy);
+        mWaitingForOpId =  mFileActivity.getOperationsServiceBinder().newOperation(service);
         
         mFileActivity.showLoadingDialog();
     }
     
+    
+    public void createFolder(String remotePath, boolean createFullPath) {
+        // Create Folder
+        Intent service = new Intent(mFileActivity, OperationsService.class);
+        service.setAction(OperationsService.ACTION_CREATE_FOLDER);
+        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, remotePath);
+        service.putExtra(OperationsService.EXTRA_CREATE_FULL_PATH, createFullPath);
+        mWaitingForOpId =  mFileActivity.getOperationsServiceBinder().newOperation(service);
+        
+        mFileActivity.showLoadingDialog();
+    }
+
+
+    public long getOpIdWaitingFor() {
+        return mWaitingForOpId;
+    }
+
+
+    public void setOpIdWaitingFor(long waitingForOpId) {
+        mWaitingForOpId = waitingForOpId;
+    }
 }