Browse Source

proper error snackbars for sharing errors, move feed back results to the sharing fragment+refresh

AndyScherzinger 7 years ago
parent
commit
f2dd5ea2a6

+ 4 - 0
src/main/java/com/owncloud/android/operations/UnshareOperation.java

@@ -109,4 +109,8 @@ public class UnshareOperation extends SyncOperation {
         return result.isSuccess();
     }
 
+    public ShareType getShareType() {
+        return mShareType;
+    }
+
 }

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

@@ -45,6 +45,7 @@ import android.os.Bundle;
 import android.os.IBinder;
 import android.os.Parcelable;
 import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
 import android.support.design.widget.BottomNavigationView;
 import android.support.design.widget.Snackbar;
 import android.support.v4.app.DialogFragment;
@@ -93,6 +94,7 @@ 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.UnshareOperation;
 import com.owncloud.android.operations.UpdateSharePermissionsOperation;
 import com.owncloud.android.operations.UpdateShareViaLinkOperation;
 import com.owncloud.android.operations.UploadFileOperation;
@@ -1715,10 +1717,12 @@ public class FileDisplayActivity extends HookActivity
         } else if (operation instanceof CreateShareViaLinkOperation) {
             onCreateShareViaLinkOperationFinish((CreateShareViaLinkOperation) operation, result);
         } else if (operation instanceof CreateShareWithShareeOperation) {
-            onCreateShareWithShareeOperationFinish(result);
+            onUpdateShareInformation(result, R.string.sharee_add_failed);
         } else if (operation instanceof UpdateSharePermissionsOperation
                 || operation instanceof UpdateShareViaLinkOperation) {
-            onUpdateSharePermissionsFinished(result);
+            onUpdateShareInformation(result, R.string.updating_share_failed);
+        } else if (operation instanceof UnshareOperation) {
+            onUpdateShareInformation(result, R.string.unsharing_failed);
         }
     }
 
@@ -1814,6 +1818,7 @@ public class FileDisplayActivity extends HookActivity
 
     private void onCreateShareViaLinkOperationFinish(CreateShareViaLinkOperation operation,
                                                      RemoteOperationResult result) {
+        FileDetailFragment fileDetailFragment = getShareFileFragment();
         if (result.isSuccess()) {
             updateFileFromDB();
 
@@ -1869,6 +1874,7 @@ public class FileDisplayActivity extends HookActivity
             DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intentToShareLink, packagesToExclude);
             chooserDialog.show(getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
 
+            fileDetailFragment.getFileDetailSharingFragment().refreshPublicShareFromDB();
         } else {
             // Detect Failure (403) --> maybe needs password
             String password = operation.getPassword();
@@ -1878,7 +1884,6 @@ public class FileDisplayActivity extends HookActivity
                 // Was tried without password, but not sure that it's optional.
 
                 // Try with password before giving up; see also ShareFileFragment#OnShareViaLinkListener
-                FileDetailFragment fileDetailFragment = getShareFileFragment();
                 if (fileDetailFragment != null
                         && fileDetailFragment.isAdded()) {   // only if added to the view hierarchy!!
 
@@ -1886,6 +1891,7 @@ public class FileDisplayActivity extends HookActivity
                 }
 
             } else {
+                fileDetailFragment.getFileDetailSharingFragment().refreshPublicShareFromDB();
                 Snackbar.make(
                         findViewById(android.R.id.content),
                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
@@ -1895,25 +1901,18 @@ public class FileDisplayActivity extends HookActivity
         }
     }
 
-    private void onCreateShareWithShareeOperationFinish(RemoteOperationResult result) {
-
+    private void onUpdateShareInformation(RemoteOperationResult result, @StringRes int errorString) {
         Fragment fileDetailFragment = getSecondFragment();
 
         if (result.isSuccess()) {
-            if (fileDetailFragment instanceof FileDetailFragment) {
-                ((FileDetailFragment) fileDetailFragment).getFileDetailSharingFragment().setShareWithUserInfo();
-            }
-        } else {
-            Snackbar.make(fileDetailFragment.getView(), R.string.sharee_add_failed, Snackbar.LENGTH_LONG).show();
+            updateFileFromDB();
+        } else if (fileDetailFragment.getView() != null){
+            Snackbar.make(fileDetailFragment.getView(), errorString, Snackbar.LENGTH_LONG).show();
         }
-    }
-
-    private void onUpdateSharePermissionsFinished(RemoteOperationResult result) {
-        Fragment fileDetailFragment = getSecondFragment();
 
-        if (result.isSuccess() && fileDetailFragment instanceof FileDetailFragment) {
+        if (fileDetailFragment!=null && fileDetailFragment instanceof FileDetailFragment) {
             ((FileDetailFragment) fileDetailFragment).getFileDetailSharingFragment()
-                    .onUpdateSharePermissionsFinished(result);
+                    .onUpdateShareInformations(result, getFile());
         }
     }
 

+ 19 - 3
src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

@@ -166,7 +166,7 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
      *
      * @param isShareByLink flag is share by link is enable
      */
-    private void setShareByLinkInfo(boolean isShareByLink) {
+    public void setShareByLinkInfo(boolean isShareByLink) {
         shareByLink.setChecked(isShareByLink);
         ThemeUtils.tintCheckbox(shareByLink, ThemeUtils.primaryAccentColor(getContext()));
         ThemeUtils.tintCheckbox(shareByLinkAllowEditing, ThemeUtils.primaryAccentColor(getContext()));
@@ -329,6 +329,16 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
         }
     }
 
+    public void onUpdateShareInformations(RemoteOperationResult result, OCFile file) {
+        this.file = file;
+
+        if (result.isSuccess()) {
+            refreshUiFromDB();
+        } else {
+            setupView();
+        }
+    }
+
     /**
      * Get {@link OCShare} instance from DB and updates the UI.
      *
@@ -338,8 +348,10 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
     private void refreshUiFromDB() {
         FileDataStorageManager storageManager = ((FileActivity) getActivity()).getStorageManager();
         if (storageManager != null) {
-            // Get edited share
-            publicShare = storageManager.getShareById(publicShare.getId());
+            if (publicShare != null) {
+                // Get edited shared by link
+                publicShare = storageManager.getShareById(publicShare.getId());
+            }
 
             // Updates UI with new state
             setupView();
@@ -438,6 +450,10 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
             } else {
                 shareByLinkAllowEditing.setChecked(false);
             }
+
+            setShareByLinkInfo(true);
+        } else {
+            setShareByLinkInfo(false);
         }
     }
 }

+ 2 - 0
src/main/res/values/strings.xml

@@ -788,4 +788,6 @@
     <string name="uploads_view_upload_status_virus_detected">Virus detected. Upload cannot be completed!</string>
     <string name="tags">Tags</string>
     <string name="sharee_add_failed">Adding sharee failed</string>
+    <string name="unsharing_failed">Unsharing failed</string>
+    <string name="updating_share_failed">Updateing share failed</string>
 </resources>