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

Commit 8dafe614 authored by shawnlin's avatar shawnlin
Browse files

Use DialogFragment for delete dialog

There is a chance that apps would crash by dismissing a dialog that is
already removed when an activity with dialog shown got relaunched.

Use DialogFragment for delete dialog to prevent such issue.

Bug: 138417682
Test: atest DocumentsUITest

Change-Id: I3d072e76cfe6a1654aac7dc91ded7b9504292aa1
parent e6771c2c
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -462,7 +462,12 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
    }

    @Override
    public void deleteSelectedDocuments() {
    public void showDeleteDialog() {
        throw new UnsupportedOperationException("Delete not supported!");
    }

    @Override
    public void deleteSelectedDocuments(List<DocumentInfo> docs, DocumentInfo srcParent) {
        throw new UnsupportedOperationException("Delete not supported!");
    }

+9 −3
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.documentsui;

import androidx.annotation.IntDef;
import android.app.PendingIntent;
import android.content.ContentProvider;
import android.content.Intent;
@@ -24,6 +23,7 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.view.DragEvent;

import androidx.annotation.IntDef;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;

import com.android.documentsui.base.BooleanConsumer;
@@ -33,6 +33,7 @@ import com.android.documentsui.base.RootInfo;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.function.Consumer;

import javax.annotation.Nullable;
@@ -137,9 +138,14 @@ public interface ActionHandler {
    void copyToClipboard();

    /**
     * In general, selected = selection or single focused item
     * Show delete dialog
     */
    void showDeleteDialog();

    /**
     * Delete the selected document(s)
     */
    void deleteSelectedDocuments();
    void deleteSelectedDocuments(List<DocumentInfo> docs, DocumentInfo srcParent);

    void shareSelectedDocuments();

+0 −3
Original line number Diff line number Diff line
@@ -19,8 +19,5 @@ package com.android.documentsui;
 * Extra ActionMode functionality required by ActionHandlers.
 */
public interface ActionModeAddons {

    void finishActionMode();

    void finishOnConfirmed(int code);
}
+6 −16
Original line number Diff line number Diff line
@@ -18,27 +18,24 @@ package com.android.documentsui;

import static com.android.documentsui.base.SharedMinimal.DEBUG;

import androidx.annotation.IdRes;
import androidx.annotation.Nullable;
import android.app.Activity;
import android.text.TextUtils;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import androidx.annotation.IdRes;
import androidx.annotation.Nullable;
import androidx.recyclerview.selection.MutableSelection;
import androidx.recyclerview.selection.SelectionTracker;
import androidx.recyclerview.selection.SelectionTracker.SelectionObserver;

import com.android.documentsui.MenuManager.SelectionDetails;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.ConfirmationCallback.Result;
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.Menus;
import com.android.documentsui.ui.MessageBuilder;

import androidx.recyclerview.selection.MutableSelection;
import androidx.recyclerview.selection.SelectionTracker;
import androidx.recyclerview.selection.SelectionTracker.SelectionObserver;

/**
 * A controller that listens to selection changes and manages life cycles of action modes.
 */
@@ -194,13 +191,6 @@ public class ActionModeController extends SelectionObserver<String>
        }
    }

    @Override
    public void finishOnConfirmed(@Result int code) {
        if (code == ConfirmationCallback.CONFIRM) {
            finishActionMode();
        }
    }

    public ActionModeController reset(
            SelectionDetails selectionDetails, EventHandler<MenuItem> menuItemClicker) {
        assert(mActionMode == null);
+7 −2
Original line number Diff line number Diff line
@@ -94,8 +94,13 @@ public abstract class UrisSupplier implements Parcelable {
        return create(uris, storage);
    }

    @VisibleForTesting
    static UrisSupplier create(List<Uri> uris, ClipStore storage) throws IOException {
    /**
     * Get a uri supplier.
     *
     * @param uris uris of the selection.
     * @param storage the ClipStorage.
     */
    public static UrisSupplier create(List<Uri> uris, ClipStore storage) throws IOException {
        UrisSupplier urisSupplier = (uris.size() > Shared.MAX_DOCS_IN_INTENT)
                ? new JumboUrisSupplier(uris, storage)
                : new StandardUrisSupplier(uris);
Loading