Loading src/com/android/documentsui/services/DeleteJob.java +27 −8 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.documentsui.base.Features; import com.android.documentsui.clipping.UrisSupplier; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import javax.annotation.Nullable; Loading @@ -55,6 +56,8 @@ public final class DeleteJob extends ResolvedResourcesJob { private final Messenger mMessenger; private final ArrayList<Uri> mDeletionFailedUris = new ArrayList<>(); /** * Moves files to a destination identified by {@code destination}. * Performs most work by delegating to CopyJob, then deleting Loading @@ -67,6 +70,21 @@ public final class DeleteJob extends ResolvedResourcesJob { super(service, listener, id, OPERATION_DELETE, stack, srcs, features); mParentUri = srcParent; mMessenger = messenger; initDeletionFailedUrisList(); } private void initDeletionFailedUrisList() { Iterable<Uri> uris; try { uris = mResourceUris.getUris(appContext); } catch (IOException e) { Log.e(TAG, "Failed to read list of target resource Uris.", e); failureCount = this.mResourceUris.getItemCount(); return; } for (Uri uri : uris) { mDeletionFailedUris.add(uri); } } @Override Loading Loading @@ -125,6 +143,7 @@ public final class DeleteJob extends ResolvedResourcesJob { if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri); try { deleteDocument(doc, parentDoc); mDeletionFailedUris.remove(doc.derivedUri); } catch (ResourceException e) { Metrics.logFileOperationFailure( appContext, Metrics.SUBFILEOP_DELETE_DOCUMENT, doc.derivedUri); Loading @@ -147,15 +166,15 @@ public final class DeleteJob extends ResolvedResourcesJob { try { Message message = Message.obtain(); message.what = MESSAGE_FINISH; message.arg1 = failureCount; if (failureCount > 0 && failureCount < mResourceUris.getItemCount()) { // If the size of mDeletionFailedUris is 0, it means either 1). all deletions succeeded // or 2). reading all uris from mResourceUris failed. For case 2). We also need to check // the failureCount to get the correct count. message.arg1 = mDeletionFailedUris.size() == 0 ? (failureCount == mResourceUris.getItemCount() ? failureCount : 0) : mDeletionFailedUris.size(); if (message.arg1 > 0 && message.arg1 < mResourceUris.getItemCount()) { Bundle b = new Bundle(); ArrayList<Uri> uris = new ArrayList<>(); uris.addAll(failedUris); for (DocumentInfo documentInfo : failedDocs) { uris.add(documentInfo.derivedUri); } b.putParcelableArrayList(KEY_FAILED_URIS, uris); b.putParcelableArrayList(KEY_FAILED_URIS, mDeletionFailedUris); message.setData(b); } mMessenger.send(message); Loading Loading
src/com/android/documentsui/services/DeleteJob.java +27 −8 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.documentsui.base.Features; import com.android.documentsui.clipping.UrisSupplier; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import javax.annotation.Nullable; Loading @@ -55,6 +56,8 @@ public final class DeleteJob extends ResolvedResourcesJob { private final Messenger mMessenger; private final ArrayList<Uri> mDeletionFailedUris = new ArrayList<>(); /** * Moves files to a destination identified by {@code destination}. * Performs most work by delegating to CopyJob, then deleting Loading @@ -67,6 +70,21 @@ public final class DeleteJob extends ResolvedResourcesJob { super(service, listener, id, OPERATION_DELETE, stack, srcs, features); mParentUri = srcParent; mMessenger = messenger; initDeletionFailedUrisList(); } private void initDeletionFailedUrisList() { Iterable<Uri> uris; try { uris = mResourceUris.getUris(appContext); } catch (IOException e) { Log.e(TAG, "Failed to read list of target resource Uris.", e); failureCount = this.mResourceUris.getItemCount(); return; } for (Uri uri : uris) { mDeletionFailedUris.add(uri); } } @Override Loading Loading @@ -125,6 +143,7 @@ public final class DeleteJob extends ResolvedResourcesJob { if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri); try { deleteDocument(doc, parentDoc); mDeletionFailedUris.remove(doc.derivedUri); } catch (ResourceException e) { Metrics.logFileOperationFailure( appContext, Metrics.SUBFILEOP_DELETE_DOCUMENT, doc.derivedUri); Loading @@ -147,15 +166,15 @@ public final class DeleteJob extends ResolvedResourcesJob { try { Message message = Message.obtain(); message.what = MESSAGE_FINISH; message.arg1 = failureCount; if (failureCount > 0 && failureCount < mResourceUris.getItemCount()) { // If the size of mDeletionFailedUris is 0, it means either 1). all deletions succeeded // or 2). reading all uris from mResourceUris failed. For case 2). We also need to check // the failureCount to get the correct count. message.arg1 = mDeletionFailedUris.size() == 0 ? (failureCount == mResourceUris.getItemCount() ? failureCount : 0) : mDeletionFailedUris.size(); if (message.arg1 > 0 && message.arg1 < mResourceUris.getItemCount()) { Bundle b = new Bundle(); ArrayList<Uri> uris = new ArrayList<>(); uris.addAll(failedUris); for (DocumentInfo documentInfo : failedDocs) { uris.add(documentInfo.derivedUri); } b.putParcelableArrayList(KEY_FAILED_URIS, uris); b.putParcelableArrayList(KEY_FAILED_URIS, mDeletionFailedUris); message.setData(b); } mMessenger.send(message); Loading