Updated handling of enforced password for public shares depending on server capabilities
[pub/Android/ownCloud.git] / src / com / owncloud / android / files / FileOperationsHelper.java
index 15ec1fc..5ce6cc3 100644 (file)
@@ -48,7 +48,6 @@ import com.owncloud.android.ui.activity.ShareActivity;
 import com.owncloud.android.ui.dialog.ShareLinkToDialog;
 import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
 
-import org.apache.http.protocol.HTTP;
 
 import java.util.List;
 
@@ -144,18 +143,22 @@ public class FileOperationsHelper {
     /**
      * Helper method to share a file via a public link. Starts a request to do it in {@link OperationsService}
      *
-     * @param file      The file to share.
+     * @param file          The file to share.
+     * @param password      Optional password to protect the public share.
      */
-    public void shareFileViaLink(OCFile file) {
+    public void shareFileViaLink(OCFile file, String password) {
         if (isSharedSupported()) {
             if (file != null) {
                 mFileActivity.showLoadingDialog(
                         mFileActivity.getApplicationContext().
-                        getString(R.string.wait_a_moment)
+                                getString(R.string.wait_a_moment)
                 );
                 Intent service = new Intent(mFileActivity, OperationsService.class);
                 service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
                 service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+                if (password != null && password.length() > 0) {
+                    service.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, password);
+                }
                 service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
                 mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
 
@@ -174,22 +177,21 @@ public class FileOperationsHelper {
         }
     }
 
-
-    public void shareFileWithLinkOLD(OCFile file) {
-
+    public void getFileWithLink(OCFile file){
         if (isSharedSupported()) {
             if (file != null) {
-                String link = "https://fake.url";
-                Intent intent = createShareWithLinkIntent(link);
-                String[] packagesToExclude = new String[]{mFileActivity.getPackageName()};
-                DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent,
-                        packagesToExclude, file);
-                chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+                mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+                        getString(R.string.wait_a_moment));
+
+                Intent service = new Intent(mFileActivity, OperationsService.class);
+                service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
+                service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+                service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+                mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
 
             } else {
                 Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
             }
-
         } else {
             // Show a Message
             Toast t = Toast.makeText(
@@ -200,7 +202,6 @@ public class FileOperationsHelper {
         }
     }
 
-
     public void shareFileWithLinkToApp(OCFile file, String password, Intent sendIntent) {
         
         if (file != null) {
@@ -220,15 +221,6 @@ public class FileOperationsHelper {
         }
     }
 
-
-    private Intent createShareWithLinkIntent(String link) {
-        Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
-        intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
-        intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE);
-        return intentToShareLink;
-    }
-
-
     /**
      * Helper method to share a file with a known sharee. Starts a request to do it in {@link OperationsService}
      *
@@ -337,14 +329,14 @@ public class FileOperationsHelper {
     /**
      * Starts a dialog that requests a password to the user to protect a share link.
      *
-     * @param   file        File which public share will be protected by the requested password
+     * @param   file            File which public share will be protected by the requested password
+     * @param   createShare     When 'true', the request for password will be followed by the creation of a new
+     *                          public link; when 'false', a public share is assumed to exist, and the password
+     *                          is bound to it.
      */
-    public void requestPasswordForShareViaLink(OCFile file) {
+    public void requestPasswordForShareViaLink(OCFile file, boolean createShare) {
         SharePasswordDialogFragment dialog =
-                SharePasswordDialogFragment.newInstance(
-                        file,
-                        null
-                );
+                SharePasswordDialogFragment.newInstance(file, createShare);
         dialog.show(
                 mFileActivity.getSupportFragmentManager(),
                 SharePasswordDialogFragment.PASSWORD_FRAGMENT
@@ -378,20 +370,19 @@ public class FileOperationsHelper {
      * Updates a public share on a file to set its expiration date.
      * Starts a request to do it in {@link OperationsService}
      *
-     * @param file          File which public share will be constrained with an expiration date.
-     * @param year          Year of the date expiration chosen. Negative value to remove current
-     *                      expiration date and leave the link unrestricted.
-     * @param monthOfYear   Month of the date chosen [0, 11]
-     * @param dayOfMonth    Day of the date chosen
+     * @param file                      File which public share will be constrained with an expiration date.
+     * @param expirationTimeInMillis    Expiration date to set. A negative value clears the current expiration
+     *                                  date, leaving the link unrestricted. Zero makes no change.
      */
-    public void setExpirationDateToShareViaLink(OCFile file, int year, int monthOfYear, int dayOfMonth) {
+    public void setExpirationDateToShareViaLink(OCFile file, long expirationTimeInMillis) {
         Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class);
         updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
-        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_YEAR, year);
-        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_MONTH_OF_YEAR, monthOfYear);
-        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DAY_OF_MONTH, dayOfMonth);
+        updateShareIntent.putExtra(
+                OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS,
+                expirationTimeInMillis
+        );
         queueShareIntent(updateShareIntent);
     }
 
@@ -419,8 +410,7 @@ public class FileOperationsHelper {
 
             // Show dialog, without the own app
             String[] packagesToExclude = new String[]{mFileActivity.getPackageName()};
-            DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent,
-                    packagesToExclude, file);
+            DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude);
             chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
 
         } else {