Эх сурвалжийг харах

Merge pull request #12142 from nextcloud/847-upload-view-clicking-on-an-pendinguploaded-item-should-do-something

Open app internal preview for files in upload section
Tobias Kaminsky 1 жил өмнө
parent
commit
574cfae5b6

+ 12 - 7
app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -2507,8 +2507,7 @@ public class FileDisplayActivity extends FileActivity
         setUser(user);
 
         if (fileId == null) {
-            dismissLoadingDialog();
-            DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file));
+            onFileRequestError(null);
             return;
         }
 
@@ -2529,8 +2528,7 @@ public class FileDisplayActivity extends FileActivity
         setUser(user);
 
         if (filepath == null) {
-            dismissLoadingDialog();
-            DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file));
+            onFileRequestError(null);
             return;
         }
 
@@ -2544,8 +2542,7 @@ public class FileDisplayActivity extends FileActivity
         try {
             client = clientFactory.create(user);
         } catch (ClientFactory.CreationException e) {
-            dismissLoadingDialog();
-            DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file));
+            onFileRequestError(null);
             return;
         }
 
@@ -2554,9 +2551,17 @@ public class FileDisplayActivity extends FileActivity
                                                                     client,
                                                                     storageManager,
                                                                     user);
-        asyncRunner.postQuickTask(getRemoteFileTask, this::onFileRequestResult, null);
+        asyncRunner.postQuickTask(getRemoteFileTask, this::onFileRequestResult, this::onFileRequestError);
+    }
+
+    private Unit onFileRequestError(Throwable throwable) {
+        dismissLoadingDialog();
+        DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file));
+        Log_OC.e(TAG, "Requesting file from remote failed!", throwable);
+        return null;
     }
 
+
     private Unit onFileRequestResult(GetRemoteFileTask.Result result) {
         dismissLoadingDialog();
 

+ 41 - 6
app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

@@ -62,6 +62,8 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.RefreshFolderOperation;
 import com.owncloud.android.ui.activity.ConflictsResolveActivity;
 import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.MimeTypeUtil;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
@@ -346,12 +348,15 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                 itemViewHolder.binding.uploadRightButton.setOnClickListener(v -> removeUpload(item));
             }
             itemViewHolder.binding.uploadRightButton.setVisibility(View.VISIBLE);
-        } else {    // UploadStatus.UPLOAD_SUCCESS
+        } else {    // UploadStatus.UPLOAD_SUCCEEDED
             itemViewHolder.binding.uploadRightButton.setVisibility(View.INVISIBLE);
         }
 
         itemViewHolder.binding.uploadListItemLayout.setOnClickListener(null);
 
+        // Set icon or thumbnail
+        itemViewHolder.binding.thumbnail.setImageResource(R.drawable.file);
+
         // click on item
         if (item.getUploadStatus() == UploadStatus.UPLOAD_FAILED) {
             final UploadResult uploadResult = item.getLastResult();
@@ -381,12 +386,15 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                     );
                 }
             });
-        } else {
-            itemViewHolder.binding.uploadListItemLayout.setOnClickListener(v -> onUploadItemClick(item));
+        } else if (item.getUploadStatus() == UploadStatus.UPLOAD_SUCCEEDED){
+            itemViewHolder.binding.uploadListItemLayout.setOnClickListener(v -> onUploadedItemClick(item));
         }
 
-        // Set icon or thumbnail
-        itemViewHolder.binding.thumbnail.setImageResource(R.drawable.file);
+
+        // click on thumbnail to open locally
+        if (item.getUploadStatus() != UploadStatus.UPLOAD_SUCCEEDED){
+            itemViewHolder.binding.thumbnail.setOnClickListener(v -> onUploadingItemClick(item));
+        }
 
         /*
          * Cancellation needs do be checked and done before changing the drawable in fileIcon, or
@@ -738,7 +746,10 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         notifyDataSetChanged();
     }
 
-    private void onUploadItemClick(OCUpload file) {
+    /**
+     * Open local file.
+     */
+    private void onUploadingItemClick(OCUpload file) {
         File f = new File(file.getLocalPath());
         if (!f.exists()) {
             DisplayUtils.showSnackMessage(parentActivity, R.string.local_file_not_found_message);
@@ -747,6 +758,30 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         }
     }
 
+    /**
+     * Open remote file.
+     */
+    private void onUploadedItemClick(OCUpload upload) {
+        final OCFile file = parentActivity.getStorageManager().getFileByEncryptedRemotePath(upload.getRemotePath());
+        if (file == null){
+            DisplayUtils.showSnackMessage(parentActivity, R.string.error_retrieving_file);
+            Log_OC.i(TAG, "Could not find uploaded file on remote.");
+            return;
+        }
+
+        if (PreviewImageFragment.canBePreviewed(file)){
+            //show image preview and stay in uploads tab
+            Intent intent = FileDisplayActivity.openFileIntent(parentActivity, parentActivity.getUser().get(), file);
+            parentActivity.startActivity(intent);
+        }else{
+            Intent intent = new Intent(parentActivity, FileDisplayActivity.class);
+            intent.setAction(Intent.ACTION_VIEW);
+            intent.putExtra(FileDisplayActivity.KEY_FILE_PATH, upload.getRemotePath());
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+            parentActivity.startActivity(intent);
+        }
+    }
+
 
     /**
      * Open file with app associates with its MIME type. If MIME type unknown, show list with all apps.