Browse Source

Merge pull request #13745 from nextcloud/bugfix/check-existence-of-oc-upload

BugFix - Check Existence of OCUpload
Tobias Kaminsky 8 months ago
parent
commit
9b698074eb

+ 34 - 14
app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

@@ -56,7 +56,6 @@ import com.owncloud.android.utils.theme.ViewThemeUtils;
 
 import java.io.File;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Optional;
 
 import androidx.annotation.NonNull;
@@ -119,14 +118,20 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
 
         headerViewHolder.binding.uploadListAction.setOnClickListener(v -> {
             switch (group.type) {
-                case CURRENT -> {
-                    new Thread(() -> {
-                        uploadHelper.cancelFileUploads(
-                            Arrays.asList(group.items),
-                            group.getItem(0).getAccountName());
-                        parentActivity.runOnUiThread(this::loadUploadItemsFromDb);
-                    }).start();
-                }
+                case CURRENT -> new Thread(() -> {
+                    OCUpload ocUpload = group.getItem(0);
+                    if (ocUpload == null) {
+                        return;
+                    }
+
+                    String accountName = ocUpload.getAccountName();
+                    if (accountName == null) {
+                        return;
+                    }
+
+                    uploadHelper.cancelFileUploads(Arrays.asList(group.items), accountName);
+                    parentActivity.runOnUiThread(this::loadUploadItemsFromDb);
+                }).start();
                 case FINISHED -> {
                     uploadsStorageManager.clearSuccessfulUploads();
                     loadUploadItemsFromDb();
@@ -287,16 +292,27 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
 
     @Override
     public void onBindViewHolder(SectionedViewHolder holder, int section, int relativePosition, int absolutePosition) {
-        ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
+        if (uploadGroups.length == 0 || section < 0 || section >= uploadGroups.length) {
+            return;
+        }
+
+        UploadGroup uploadGroup = uploadGroups[section];
+        if (uploadGroup == null) {
+            return;
+        }
 
-        OCUpload item = uploadGroups[section].getItem(relativePosition);
+        OCUpload item = uploadGroup.getItem(relativePosition);
+        if (item == null) {
+            return;
+        }
 
+        ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
         itemViewHolder.binding.uploadName.setText(item.getLocalPath());
 
         // local file name
         File remoteFile = new File(item.getRemotePath());
         String fileName = remoteFile.getName();
-        if (fileName.length() == 0) {
+        if (fileName.isEmpty()) {
             fileName = File.separator;
         }
         itemViewHolder.binding.uploadName.setText(fileName);
@@ -937,9 +953,9 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
     }
 
     abstract class UploadGroup implements Refresh {
-        private Type type;
+        private final Type type;
         private OCUpload[] items;
-        private String name;
+        private final String name;
 
         UploadGroup(Type type, String groupName) {
             this.type = type;
@@ -956,6 +972,10 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         }
 
         public OCUpload getItem(int position) {
+            if (items.length == 0 || position < 0 || position >= items.length) {
+                return null;
+            }
+
             return items[position];
         }