Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8cafac18 authored by Shawn Lin's avatar Shawn Lin Committed by Android (Google) Code Review
Browse files

Merge "Fixed UI not updated after canceling delete notification."

parents 36b7b5b4 e7d51782
Loading
Loading
Loading
Loading
+27 −8
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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
@@ -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);
@@ -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);