فهرست منبع

implement changes sharing data / fixed unsetting of exp. date

AndyScherzinger 7 سال پیش
والد
کامیت
1a32758e27

+ 16 - 0
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -93,6 +93,8 @@ import com.owncloud.android.operations.RefreshFolderOperation;
 import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.RenameFileOperation;
 import com.owncloud.android.operations.SynchronizeFileOperation;
+import com.owncloud.android.operations.UpdateSharePermissionsOperation;
+import com.owncloud.android.operations.UpdateShareViaLinkOperation;
 import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.providers.UsersAndGroupsSearchProvider;
 import com.owncloud.android.syncadapter.FileSyncAdapter;
@@ -1698,6 +1700,9 @@ public class FileDisplayActivity extends HookActivity
             onCreateShareViaLinkOperationFinish((CreateShareViaLinkOperation) operation, result);
         } else if (operation instanceof CreateShareWithShareeOperation) {
             onCreateShareWithShareeOperationFinish(result);
+        } else if (operation instanceof UpdateSharePermissionsOperation
+                || operation instanceof UpdateShareViaLinkOperation) {
+            onUpdateSharePermissionsFinished(result);
         }
     }
 
@@ -1887,6 +1892,17 @@ public class FileDisplayActivity extends HookActivity
         }
     }
 
+    private void onUpdateSharePermissionsFinished(RemoteOperationResult result) {
+        Fragment fileDetailFragment = getSecondFragment();
+
+        if (result.isSuccess()) {
+            if (fileDetailFragment instanceof FileDetailFragment) {
+                ((FileDetailFragment) fileDetailFragment).getFileDetailSharingFragment()
+                        .onUpdateSharePermissionsFinished(result);
+            }
+        }
+    }
+
     /**
      * Shortcut to get access to the {@link FileDetailFragment} instance, if any
      *

+ 1 - 1
src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java

@@ -105,7 +105,7 @@ public class ExpirationDatePickerDialogFragment
                 getText(R.string.share_via_link_unset_password),
                 (dialog1, which) -> {
                     ((FileActivity) getActivity()).getFileOperationsHelper()
-                            .setExpirationDateToShareViaLink(file, 0);
+                            .setExpirationDateToShareViaLink(file, -1);
                 });
 
         // Prevent days in the past may be chosen

+ 44 - 5
src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

@@ -30,7 +30,9 @@ import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.Snackbar;
 import android.support.v4.app.Fragment;
+import android.support.v7.widget.AppCompatCheckBox;
 import android.support.v7.widget.SearchView;
+import android.support.v7.widget.SwitchCompat;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -46,18 +48,22 @@ import android.widget.PopupMenu;
 import android.widget.TextView;
 
 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.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.SharePermissionsBuilder;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.status.OCCapability;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.adapter.UserListAdapter;
 import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
 import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
 import com.owncloud.android.ui.fragment.util.FileDetailSharingFragmentHelper;
+import com.owncloud.android.utils.ThemeUtils;
 
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -177,7 +183,11 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
 
     private void setLinkDetailVisible(boolean visible) {
         if (visible) {
-            shareByLinkAllowEditing.setVisibility(View.VISIBLE);
+            if (file.isFolder()) {
+                shareByLinkAllowEditing.setVisibility(View.VISIBLE);
+            } else {
+                shareByLinkAllowEditing.setVisibility(View.INVISIBLE);
+            }
             overflowMenuShareLink.setVisibility(View.VISIBLE);
         } else {
             shareByLinkAllowEditing.setVisibility(View.INVISIBLE);
@@ -244,7 +254,8 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
     @OnClick(R.id.share_by_link_allow_editing)
     public void toggleShareLinkAllowEditing() {
         if (file.isSharedViaLink()) {
-            ((FileActivity) getActivity()).getFileOperationsHelper().setUploadPermissionsToShare(file, shareByLinkAllowEditing.isChecked());
+            ((FileActivity) getActivity()).getFileOperationsHelper()
+                    .setUploadPermissionsToShare(file, shareByLinkAllowEditing.isChecked());
         }
     }
 
@@ -280,7 +291,7 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
     private boolean optionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.action_share_link_hide_file_listing: {
-                // TODO refresh share object after file listing has been set
+                item.setChecked(!item.isChecked());
                 if (capabilities.getFilesFileDrop().isTrue()) {
                     ((FileActivity) getActivity()).getFileOperationsHelper().
                             setHideFileListingPermissionsToShare(publicShare, item.isChecked());
@@ -297,12 +308,10 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
                 return true;
             }
             case R.id.action_share_link_password: {
-                // TODO refresh share object after password has been set
                 requestPasswordForShareViaLink(false);
                 return true;
             }
             case R.id.action_share_link_expiration_date: {
-                // TODO refresh share object after new exp. date has been set
                 ExpirationDatePickerDialogFragment dialog = ExpirationDatePickerDialogFragment.newInstance(file, -1);
                 dialog.show(
                         getActivity().getSupportFragmentManager(),
@@ -315,6 +324,36 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
         }
     }
 
+    /**
+     * Updates the UI after the result of an update operation on the edited {@link OCShare} permissions.
+     *
+     * @param result Result of an update on the edited {@link OCShare} permissions.
+     */
+    public void onUpdateSharePermissionsFinished(RemoteOperationResult result) {
+        if (result.isSuccess()) {
+            refreshUiFromDB();
+        } else {
+            setupView();
+        }
+    }
+
+    /**
+     * Get {@link OCShare} instance from DB and updates the UI.
+     *
+     * Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
+     * instance ready to use. If not ready, does nothing.
+     */
+    private void refreshUiFromDB() {
+        FileDataStorageManager storageManager = ((FileActivity) getActivity()).getStorageManager();
+        if (storageManager != null) {
+            // Get edited share
+            publicShare = storageManager.getShareById(publicShare.getId());
+
+            // Updates UI with new state
+            setupView();
+        }
+    }
+
     @Override
     public void unshareWith(OCShare share) {
         ((FileActivity) getActivity()).getFileOperationsHelper()