tobiasKaminsky 8 lat temu
rodzic
commit
5890f554cd

+ 30 - 0
src/com/owncloud/android/files/FileOperationsHelper.java

@@ -36,6 +36,7 @@ import android.widget.Toast;
 
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.db.OCUpload;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
@@ -397,6 +398,35 @@ public class FileOperationsHelper {
         queueShareIntent(updateShareIntent);
     }
 
+    /**
+     * Updates a public share on a folder to set its hide file listing permission.
+     * Starts a request to do it in {@link OperationsService}
+     *
+     * @param share                    {@link OCShare} instance which permissions will be updated.
+     * @param hideFileListing          New state of the permission for editing the folder shared via link.
+     */
+    public void setHideFileListingPermissionsToShare(OCShare share, boolean hideFileListing) {
+        Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
+
+        int permission = share.getPermissions();
+        share.setPermissions(permission);
+
+        if(!hideFileListing) {
+            permission |= OCShare.READ_PERMISSION_FLAG;
+        } else {
+            permission &= ~OCShare.READ_PERMISSION_FLAG;
+        }
+
+        updateShareIntent.putExtra(
+                OperationsService.EXTRA_SHARE_PERMISSIONS,
+                permission
+        );
+        queueShareIntent(updateShareIntent);
+    }
+
 
     /**
      * @return 'True' if the server supports the Search Users API

+ 42 - 4
src/com/owncloud/android/ui/fragment/ShareFileFragment.java

@@ -142,6 +142,11 @@ public class ShareFileFragment extends Fragment
      */
     private OnEditPermissionInteractionListener mOnEditPermissionInteractionListener = null;
 
+    /**
+     * Listener for user actions to set or unset hide file listing permission on public link
+     */
+    private OnHideFileListingPermissionInteractionListener mOnHideFileListingPermissionInteractionListener = null;
+
 
     /**
      * Public factory method to create new ShareFileFragment instances.
@@ -509,6 +514,40 @@ public class ShareFileFragment extends Fragment
 
     }
 
+    /**
+     * Listener for user actions that start any update on the hide file listing permissions for the public link.
+     */
+    private class OnHideFileListingPermissionInteractionListener
+            implements CompoundButton.OnCheckedChangeListener {
+
+        /**
+         * Called by R.id.shareViaLinkHideListPermissionSwitch to set or clear the edit permission.
+         *
+         * @param switchView {@link SwitchCompat} toggled by the user, R.id.shareViaLinkHideListPermissionSwitch
+         * @param isChecked  New switch state.
+         */
+        @Override
+        public void onCheckedChanged(CompoundButton switchView, boolean isChecked) {
+            if (!isResumed()) {
+                // very important, setChecked(...) is called automatically during
+                // Fragment recreation on device rotations
+                return;
+            }
+
+            ((FileActivity) getActivity()).getFileOperationsHelper().
+                    setHideFileListingPermissionsToShare(
+                            mPublicShare,
+                            isChecked
+                    );
+            ;
+
+            // undo the toggle to grant the view will be correct if the dialog is cancelled
+            switchView.setOnCheckedChangeListener(null);
+            switchView.toggle();
+            switchView.setOnCheckedChangeListener(mOnHideFileListingPermissionInteractionListener);
+        }
+    }
+
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
@@ -770,10 +809,9 @@ public class ShareFileFragment extends Fragment
                 }
             }
             // recover listener
-            // TODO Tobi
-//            hideFileListingPermissionSwitch.setOnCheckedChangeListener(
-//                    mOnEditPermissionInteractionListener
-//            );
+            hideFileListingPermissionSwitch.setOnCheckedChangeListener(
+                    mOnHideFileListingPermissionInteractionListener
+            );
 
         } else {
             /// no public share -> collapse section