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

Commit e7d51782 authored by shawnlin's avatar shawnlin
Browse files

Fixed UI not updated after canceling delete notification.

The fail count didn't take cancel into account.

Add all items which is not deleted(failed & canceled) into fail list.

Fixes: 113576416
Test: atest DocumentsUITests
Test: manual 1) create over 1k files, 2) delete all files 3) click
cancel from delete notification and observe the UI

Change-Id: I85de56b337b45436797008dab528ba255b093f1e
parent 65bbe793
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);