Refactoring relationship between FileActivities and FileFragments (WIP)
[pub/Android/ownCloud.git] / src / com / owncloud / android / files / FileOperationsHelper.java
index 1c0db87..b7dc67f 100644 (file)
@@ -19,6 +19,7 @@ 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;
@@ -28,13 +29,17 @@ import android.widget.Toast;
 
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.lib.accounts.OwnCloudAccount;
-import com.owncloud.android.lib.network.webdav.WebdavUtils;
-import com.owncloud.android.lib.operations.common.ShareType;
-import com.owncloud.android.operations.CreateShareOperation;
-import com.owncloud.android.operations.UnshareLinkOperation;
+
+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.ActivityChooserDialog;
+import com.owncloud.android.ui.dialog.ShareLinkToDialog;
 import com.owncloud.android.utils.Log_OC;
 
 /**
@@ -48,8 +53,14 @@ public class FileOperationsHelper {
     
     private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG"; 
 
+    protected FileActivity mFileActivity = null;
     
-    public void openFile(OCFile file, FileActivity callerActivity) {
+    public FileOperationsHelper(FileActivity fileActivity) {
+        mFileActivity = fileActivity;
+    }
+
+
+    public void openFile(OCFile file) {
         if (file != null) {
             String storagePath = file.getStoragePath();
             String encodedStoragePath = WebdavUtils.encodePath(storagePath);
@@ -70,28 +81,28 @@ public class FileOperationsHelper {
             
             Intent chooserIntent = null;
             if (intentForGuessedMimeType != null) {
-                chooserIntent = Intent.createChooser(intentForGuessedMimeType, callerActivity.getString(R.string.actionbar_open_with));
+                chooserIntent = Intent.createChooser(intentForGuessedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
             } else {
-                chooserIntent = Intent.createChooser(intentForSavedMimeType, callerActivity.getString(R.string.actionbar_open_with));
+                chooserIntent = Intent.createChooser(intentForSavedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
             }
             
-            callerActivity.startActivity(chooserIntent);
+            mFileActivity.startActivity(chooserIntent);
             
         } else {
             Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
         }
     }
     
-
-    public void shareFileWithLink(OCFile file, FileActivity callerActivity) {
+    
+    public void shareFileWithLink(OCFile file) {
         
-        if (isSharedSupported(callerActivity)) {
+        if (isSharedSupported()) {
             if (file != null) {
                 String link = "https://fake.url";
                 Intent intent = createShareWithLinkIntent(link);
-                String[] packagesToExclude = new String[] { callerActivity.getPackageName() };
-                DialogFragment chooserDialog = ActivityChooserDialog.newInstance(intent, packagesToExclude, file);
-                chooserDialog.show(callerActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+                String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+                DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent, packagesToExclude, file);
+                chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
                 
             } else {
                 Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
@@ -99,22 +110,23 @@ public class FileOperationsHelper {
             
         } else {
             // Show a Message
-            Toast t = Toast.makeText(callerActivity, callerActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
+            Toast t = Toast.makeText(mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
             t.show();
         }
     }
     
     
-    public void shareFileWithLinkToApp(OCFile file, Intent sendIntent, FileActivity callerActivity) {
+    public void shareFileWithLinkToApp(OCFile file, Intent sendIntent) {
         
         if (file != null) {
-            callerActivity.showLoadingDialog();
-            CreateShareOperation createShare = new CreateShareOperation(file.getRemotePath(), ShareType.PUBLIC_LINK, "", false, "", 1, sendIntent);
-            createShare.execute(callerActivity.getStorageManager(), 
-                                callerActivity, 
-                                callerActivity.getRemoteOperationListener(), 
-                                callerActivity.getHandler(), 
-                                callerActivity);
+            mFileActivity.showLoadingDialog();
+            
+            Intent service = new Intent(mFileActivity, OperationsService.class);
+            service.setAction(OperationsService.ACTION_CREATE_SHARE);
+            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);
             
         } else {
             Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
@@ -133,33 +145,104 @@ public class FileOperationsHelper {
     /**
      *  @return 'True' if the server supports the Share API
      */
-    public boolean isSharedSupported(FileActivity callerActivity) {
-        if (callerActivity.getAccount() != null) {
-            AccountManager accountManager = AccountManager.get(callerActivity);
-            return Boolean.parseBoolean(accountManager.getUserData(callerActivity.getAccount(), OwnCloudAccount.Constants.KEY_SUPPORTS_SHARE_API));
+    public boolean isSharedSupported() {
+        if (mFileActivity.getAccount() != null) {
+            AccountManager accountManager = AccountManager.get(mFileActivity);
+
+            String version = accountManager.getUserData(mFileActivity.getAccount(), Constants.KEY_OC_VERSION);
+            return (new OwnCloudVersion(version)).isSharedSupported();
         }
         return false;
     }
-
     
-    public void unshareFileWithLink(OCFile file, FileActivity callerActivity) {
+    
+    public void unshareFileWithLink(OCFile file) {
         
-        if (isSharedSupported(callerActivity)) {
+        if (isSharedSupported()) {
             // Unshare the file
-            UnshareLinkOperation unshare = new UnshareLinkOperation(file);
-            unshare.execute(callerActivity.getStorageManager(), 
-                    callerActivity, 
-                    callerActivity.getRemoteOperationListener(), 
-                    callerActivity.getHandler(), 
-                    callerActivity);
-         
-            callerActivity.showLoadingDialog();
+            Intent service = new Intent(mFileActivity, OperationsService.class);
+            service.setAction(OperationsService.ACTION_UNSHARE);
+            service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+            service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+            mFileActivity.getOperationsServiceBinder().newOperation(service);
+            
+            mFileActivity.showLoadingDialog();
             
         } else {
             // Show a Message
-            Toast t = Toast.makeText(callerActivity, callerActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
+            Toast t = Toast.makeText(mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
             t.show();
             
         }
     }
+    
+    public void sendDownloadedFile(OCFile file) {
+        if (file != null) {
+            Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
+            // set MimeType
+            sendIntent.setType(file.getMimetype());
+            sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + file.getStoragePath()));
+            sendIntent.putExtra(Intent.ACTION_SEND, true);      // Send Action
+            
+            // Show dialog, without the own app
+            String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+            DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
+            chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+
+        } else {
+            Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
+        }
+    }
+    
+    
+    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);
+        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);
+        
+        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);
+        
+        mFileActivity.showLoadingDialog();
+    }
+    
 }