summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java7
-rw-r--r--src/com/android/documentsui/ActionHandler.java12
-rw-r--r--src/com/android/documentsui/ActionModeAddons.java3
-rw-r--r--src/com/android/documentsui/ActionModeController.java22
-rw-r--r--src/com/android/documentsui/clipping/UrisSupplier.java9
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryFragment.java2
-rw-r--r--src/com/android/documentsui/files/ActionHandler.java74
-rw-r--r--src/com/android/documentsui/files/DeleteDocumentFragment.java107
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java4
-rw-r--r--src/com/android/documentsui/picker/PickActivity.java2
-rw-r--r--src/com/android/documentsui/ui/DialogController.java56
-rw-r--r--tests/common/com/android/documentsui/TestActionModeAddons.java8
-rw-r--r--tests/common/com/android/documentsui/testing/TestActionHandler.java2
-rw-r--r--tests/common/com/android/documentsui/ui/TestDialogController.java19
-rw-r--r--tests/unit/com/android/documentsui/files/ActionHandlerTest.java32
-rw-r--r--tests/unit/com/android/documentsui/picker/ActionHandlerTest.java6
16 files changed, 196 insertions, 169 deletions
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index c156260cf..555d13c50 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -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!");
}
diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java
index 5f74b583e..437b45603 100644
--- a/src/com/android/documentsui/ActionHandler.java
+++ b/src/com/android/documentsui/ActionHandler.java
@@ -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();
diff --git a/src/com/android/documentsui/ActionModeAddons.java b/src/com/android/documentsui/ActionModeAddons.java
index 83eba78bb..d49313e8f 100644
--- a/src/com/android/documentsui/ActionModeAddons.java
+++ b/src/com/android/documentsui/ActionModeAddons.java
@@ -19,8 +19,5 @@ package com.android.documentsui;
* Extra ActionMode functionality required by ActionHandlers.
*/
public interface ActionModeAddons {
-
void finishActionMode();
-
- void finishOnConfirmed(int code);
}
diff --git a/src/com/android/documentsui/ActionModeController.java b/src/com/android/documentsui/ActionModeController.java
index 754825006..49aeeab5c 100644
--- a/src/com/android/documentsui/ActionModeController.java
+++ b/src/com/android/documentsui/ActionModeController.java
@@ -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);
diff --git a/src/com/android/documentsui/clipping/UrisSupplier.java b/src/com/android/documentsui/clipping/UrisSupplier.java
index 6679347d6..67120d256 100644
--- a/src/com/android/documentsui/clipping/UrisSupplier.java
+++ b/src/com/android/documentsui/clipping/UrisSupplier.java
@@ -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);
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index 18d618c79..b43a798c6 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -656,7 +656,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
case R.id.dir_menu_delete:
// deleteDocuments will end action mode if the documents are deleted.
// It won't end action mode if user cancels the delete.
- mActions.deleteSelectedDocuments();
+ mActions.showDeleteDialog();
return true;
case R.id.action_menu_copy_to:
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index ce2608ef6..9fb6e69eb 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -51,7 +51,6 @@ import com.android.documentsui.Metrics;
import com.android.documentsui.Model;
import com.android.documentsui.R;
import com.android.documentsui.TimeoutTask;
-import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DebugFlags;
import com.android.documentsui.base.DocumentFilters;
import com.android.documentsui.base.DocumentInfo;
@@ -299,56 +298,55 @@ public class ActionHandler<T extends FragmentActivity & Addons> extends Abstract
}
}
-
@Override
- public void deleteSelectedDocuments() {
- Metrics.logUserAction(MetricConsts.USER_ACTION_DELETE);
+ public void showDeleteDialog() {
Selection selection = getSelectedOrFocused();
-
if (selection.isEmpty()) {
return;
}
- final @Nullable DocumentInfo srcParent = mState.stack.peek();
+ DeleteDocumentFragment.show(mActivity.getSupportFragmentManager(),
+ mModel.getDocuments(selection),
+ mState.stack.peek());
+ }
- // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
- List<DocumentInfo> docs = mModel.getDocuments(selection);
- ConfirmationCallback result = (@ConfirmationCallback.Result int code) -> {
- // share the news with our caller, be it good or bad.
- mActionModeAddons.finishOnConfirmed(code);
+ @Override
+ public void deleteSelectedDocuments(List<DocumentInfo> docs, DocumentInfo srcParent) {
+ if (docs == null || docs.isEmpty()) {
+ return;
+ }
- if (code != ConfirmationCallback.CONFIRM) {
- return;
- }
+ mActionModeAddons.finishActionMode();
- UrisSupplier srcs;
- try {
- srcs = UrisSupplier.create(
- selection,
- mModel::getItemUri,
- mClipStore);
- } catch (Exception e) {
- Log.e(TAG,"Failed to delete a file because we were unable to get item URIs.", e);
- mDialogs.showFileOperationStatus(
- FileOperations.Callback.STATUS_FAILED,
- FileOperationService.OPERATION_DELETE,
- selection.size());
- return;
- }
+ List<Uri> uris = new ArrayList<>(docs.size());
+ for (DocumentInfo doc : docs) {
+ uris.add(doc.derivedUri);
+ }
- FileOperation operation = new FileOperation.Builder()
- .withOpType(FileOperationService.OPERATION_DELETE)
- .withDestination(mState.stack)
- .withSrcs(srcs)
- .withSrcParent(srcParent == null ? null : srcParent.derivedUri)
- .build();
+ UrisSupplier srcs;
+ try {
+ srcs = UrisSupplier.create(
+ uris,
+ mClipStore);
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to delete a file because we were unable to get item URIs.", e);
+ mDialogs.showFileOperationStatus(
+ FileOperations.Callback.STATUS_FAILED,
+ FileOperationService.OPERATION_DELETE,
+ uris.size());
+ return;
+ }
- FileOperations.start(mActivity, operation, mDialogs::showFileOperationStatus,
- FileOperations.createJobId());
- };
+ FileOperation operation = new FileOperation.Builder()
+ .withOpType(FileOperationService.OPERATION_DELETE)
+ .withDestination(mState.stack)
+ .withSrcs(srcs)
+ .withSrcParent(srcParent == null ? null : srcParent.derivedUri)
+ .build();
- mDialogs.confirmDelete(docs, result);
+ FileOperations.start(mActivity, operation, mDialogs::showFileOperationStatus,
+ FileOperations.createJobId());
}
@Override
diff --git a/src/com/android/documentsui/files/DeleteDocumentFragment.java b/src/com/android/documentsui/files/DeleteDocumentFragment.java
new file mode 100644
index 000000000..12f7b3c48
--- /dev/null
+++ b/src/com/android/documentsui/files/DeleteDocumentFragment.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.documentsui.files;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+
+import com.android.documentsui.Injector;
+import com.android.documentsui.R;
+import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.Shared;
+
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog to delete file or directory.
+ */
+public class DeleteDocumentFragment extends DialogFragment {
+ private static final String TAG_DELETE_DOCUMENT = "delete_document";
+
+ private List<DocumentInfo> mDocuments;
+ private DocumentInfo mSrcParent;
+
+ /**
+ * Show the dialog UI.
+ *
+ * @param fm the fragment manager
+ * @param docs the selected documents
+ * @param srcParent the parent document of the selection
+ */
+ public static void show(FragmentManager fm, List<DocumentInfo> docs, DocumentInfo srcParent) {
+ final DeleteDocumentFragment dialog = new DeleteDocumentFragment();
+ dialog.mDocuments = docs;
+ dialog.mSrcParent = srcParent;
+ dialog.show(fm, TAG_DELETE_DOCUMENT);
+ }
+
+ /**
+ * Creates the dialog UI.
+ *
+ * @param savedInstanceState
+ * @return
+ */
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ if (savedInstanceState != null) {
+ mSrcParent = savedInstanceState.getParcelable(Shared.EXTRA_DOC);
+ mDocuments = savedInstanceState.getParcelableArrayList(Shared.EXTRA_SELECTION);
+ }
+
+ Context context = getActivity();
+ Injector<?> injector = ((FilesActivity) getActivity()).getInjector();
+ LayoutInflater dialogInflater = LayoutInflater.from(context);
+ TextView message = (TextView) dialogInflater.inflate(
+ R.layout.dialog_delete_confirmation, null, false);
+ message.setText(injector.messages.generateDeleteMessage(mDocuments));
+
+ final AlertDialog alertDialog = new MaterialAlertDialogBuilder(context)
+ .setView(message)
+ .setPositiveButton(
+ android.R.string.ok,
+ (dialog, id) ->
+ injector.actions.deleteSelectedDocuments(mDocuments, mSrcParent))
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+
+ alertDialog.setOnShowListener(
+ (dialogInterface) -> {
+ Button positive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
+ positive.setFocusable(true);
+ positive.requestFocus();
+ });
+ return alertDialog;
+ }
+
+ @Override
+ public void onSaveInstanceState(@NonNull Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putParcelable(Shared.EXTRA_DOC, mSrcParent);
+ outState.putParcelableArrayList(Shared.EXTRA_SELECTION, (ArrayList) mDocuments);
+ }
+}
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index d93e5dbac..a9da4a7fb 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -94,7 +94,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
new Config(),
ScopedPreferences.create(this, PREFERENCES_SCOPE),
messages,
- DialogController.create(features, this, messages),
+ DialogController.create(features, this),
DocumentsApplication.getFileTypeLookup(this),
new ShortcutsUpdater(this, prefs)::update);
@@ -150,7 +150,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
mInjector.appsRowManager = mAppsRowManager;
mActivityInputHandler =
- new ActivityInputHandler(mInjector.actions::deleteSelectedDocuments);
+ new ActivityInputHandler(mInjector.actions::showDeleteDialog);
mSharedInputHandler =
new SharedInputHandler(
mInjector.focusManager,
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index 773607775..794e78515 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -93,7 +93,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
new Config(),
prefs,
new MessageBuilder(this),
- DialogController.create(features, this, null),
+ DialogController.create(features, this),
DocumentsApplication.getFileTypeLookup(this),
(Collection<RootInfo> roots) -> {});
diff --git a/src/com/android/documentsui/ui/DialogController.java b/src/com/android/documentsui/ui/DialogController.java
index 8e9673932..10de21621 100644
--- a/src/com/android/documentsui/ui/DialogController.java
+++ b/src/com/android/documentsui/ui/DialogController.java
@@ -16,15 +16,10 @@
package com.android.documentsui.ui;
import android.app.Activity;
-import android.content.DialogInterface;
-import android.widget.Button;
-import android.widget.TextView;
-import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import com.android.documentsui.R;
-import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Features;
import com.android.documentsui.picker.ConfirmFragment;
@@ -34,15 +29,11 @@ import com.android.documentsui.services.FileOperationService.OpType;
import com.android.documentsui.services.FileOperations;
import com.android.documentsui.services.FileOperations.Callback.Status;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.snackbar.Snackbar;
-import java.util.List;
-
public interface DialogController {
// Dialogs used in FilesActivity
- void confirmDelete(List<DocumentInfo> docs, ConfirmationCallback callback);
void showFileOperationStatus(int status, int opType, int docCount);
/**
@@ -63,50 +54,12 @@ public interface DialogController {
public static final class RuntimeDialogController implements DialogController {
private final Activity mActivity;
- private final MessageBuilder mMessages;
private final Features mFeatures;
private OperationProgressDialog mCurrentProgressDialog = null;
- public RuntimeDialogController(Features features, Activity activity, MessageBuilder messages) {
+ public RuntimeDialogController(Features features, Activity activity) {
mFeatures = features;
mActivity = activity;
- mMessages = messages;
- }
-
- @Override
- public void confirmDelete(List<DocumentInfo> docs, ConfirmationCallback callback) {
- assert(!docs.isEmpty());
-
- TextView message =
- (TextView) mActivity.getLayoutInflater().inflate(
- R.layout.dialog_delete_confirmation, null);
- message.setText(mMessages.generateDeleteMessage(docs));
-
- // For now, we implement this dialog NOT
- // as a fragment (which can survive rotation and have its own state),
- // but as a simple runtime dialog. So rotating a device with an
- // active delete dialog...results in that dialog disappearing.
- // We can do better, but don't have cycles for it now.
- final AlertDialog alertDialog = new MaterialAlertDialogBuilder(mActivity)
- .setView(message)
- .setPositiveButton(
- android.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- callback.accept(ConfirmationCallback.CONFIRM);
- }
- })
- .setNegativeButton(android.R.string.cancel, null)
- .create();
-
- alertDialog.setOnShowListener(
- (DialogInterface) -> {
- Button positive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
- positive.setFocusable(true);
- positive.requestFocus();
- });
- alertDialog.show();
}
@Override
@@ -205,7 +158,10 @@ public interface DialogController {
}
}
- static DialogController create(Features features, Activity activity, MessageBuilder messages) {
- return new RuntimeDialogController(features, activity, messages);
+ /**
+ * Create DialogController Impl.
+ */
+ static DialogController create(Features features, Activity activity) {
+ return new RuntimeDialogController(features, activity);
}
}
diff --git a/tests/common/com/android/documentsui/TestActionModeAddons.java b/tests/common/com/android/documentsui/TestActionModeAddons.java
index 5379bbb4c..c928d6f23 100644
--- a/tests/common/com/android/documentsui/TestActionModeAddons.java
+++ b/tests/common/com/android/documentsui/TestActionModeAddons.java
@@ -15,20 +15,12 @@
*/
package com.android.documentsui;
-import com.android.documentsui.testing.TestConfirmationCallback;
-
public class TestActionModeAddons implements ActionModeAddons {
public boolean finishActionModeCalled;
- public final TestConfirmationCallback finishOnConfirmed = new TestConfirmationCallback();
@Override
public void finishActionMode() {
finishActionModeCalled = true;
}
-
- @Override
- public void finishOnConfirmed(int code) {
- finishOnConfirmed.accept(code);
- }
}
diff --git a/tests/common/com/android/documentsui/testing/TestActionHandler.java b/tests/common/com/android/documentsui/testing/TestActionHandler.java
index 7b11d41f4..f28234203 100644
--- a/tests/common/com/android/documentsui/testing/TestActionHandler.java
+++ b/tests/common/com/android/documentsui/testing/TestActionHandler.java
@@ -59,7 +59,7 @@ public class TestActionHandler extends AbstractActionHandler<TestActivity> {
}
@Override
- public void deleteSelectedDocuments() {
+ public void showDeleteDialog() {
mDeleteHappened = true;
}
diff --git a/tests/common/com/android/documentsui/ui/TestDialogController.java b/tests/common/com/android/documentsui/ui/TestDialogController.java
index 190ce7235..17916b2df 100644
--- a/tests/common/com/android/documentsui/ui/TestDialogController.java
+++ b/tests/common/com/android/documentsui/ui/TestDialogController.java
@@ -17,7 +17,6 @@ package com.android.documentsui.ui;
import androidx.fragment.app.FragmentManager;
-import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.picker.ConfirmFragment;
import com.android.documentsui.services.FileOperation;
@@ -25,11 +24,8 @@ import com.android.documentsui.services.FileOperations;
import junit.framework.Assert;
-import java.util.List;
-
public class TestDialogController implements DialogController {
- public int mNextConfirmationCode;
private int mFileOpStatus;
private boolean mNoApplicationFound;
private boolean mDocumentsClipped;
@@ -39,13 +35,6 @@ public class TestDialogController implements DialogController {
private int mConfrimType;
public TestDialogController() {
- // by default, always confirm
- mNextConfirmationCode = ConfirmationCallback.CONFIRM;
- }
-
- @Override
- public void confirmDelete(List<DocumentInfo> docs, ConfirmationCallback callback) {
- callback.accept(mNextConfirmationCode);
}
@Override
@@ -116,12 +105,4 @@ public class TestDialogController implements DialogController {
Assert.assertEquals(expected, mTarget);
Assert.assertEquals(ConfirmFragment.TYPE_OEPN_TREE, mConfrimType);
}
-
- public void confirmNext() {
- mNextConfirmationCode = ConfirmationCallback.CONFIRM;
- }
-
- public void rejectNext() {
- mNextConfirmationCode = ConfirmationCallback.REJECT;
- }
}
diff --git a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
index e4a6e3125..bde2fe258 100644
--- a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
@@ -73,7 +73,9 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
@RunWith(AndroidJUnit4.class)
@MediumTest
@@ -105,8 +107,6 @@ public class ActionHandlerTest {
mHandler = createHandler();
- mDialogs.confirmNext();
-
mEnv.selectDocument(TestEnv.FILE_GIF);
}
@@ -160,36 +160,28 @@ public class ActionHandlerTest {
}
@Test
- public void testDeleteSelectedDocuments_NoSelection() {
+ public void testShowDeleteDialog_NoSelection() {
mEnv.populateStack();
mEnv.selectionMgr.clearSelection();
- mHandler.deleteSelectedDocuments();
- mDialogs.assertNoFileFailures();
+ mHandler.showDeleteDialog();
mActivity.startService.assertNotCalled();
- mActionModeAddons.finishOnConfirmed.assertNeverCalled();
+ assertFalse(mActionModeAddons.finishActionModeCalled);
}
@Test
- public void testDeleteSelectedDocuments_Cancelable() {
+ public void testDeleteSelectedDocuments() {
mEnv.populateStack();
- mDialogs.rejectNext();
- mHandler.deleteSelectedDocuments();
- mDialogs.assertNoFileFailures();
- mActivity.startService.assertNotCalled();
- mActionModeAddons.finishOnConfirmed.assertRejected();
- }
+ mEnv.selectionMgr.clearSelection();
+ mEnv.selectDocument(TestEnv.FILE_PNG);
- // Recents root means when deleting the srcParent will be null.
- @Test
- public void testDeleteSelectedDocuments_RecentsRoot() {
- mEnv.state.stack.changeRoot(TestProvidersAccess.RECENTS);
+ List<DocumentInfo> docs = new ArrayList<>();
+ docs.add(TestEnv.FILE_PNG);
+ mHandler.deleteSelectedDocuments(docs, mEnv.state.stack.peek());
- mHandler.deleteSelectedDocuments();
- mDialogs.assertNoFileFailures();
mActivity.startService.assertCalled();
- mActionModeAddons.finishOnConfirmed.assertCalled();
+ assertTrue(mActionModeAddons.finishActionModeCalled);
}
@Test
diff --git a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
index 0d070611d..eb8835e2e 100644
--- a/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/picker/ActionHandlerTest.java
@@ -16,10 +16,10 @@
package com.android.documentsui.picker;
-import static org.mockito.Mockito.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import android.app.Activity;
import android.content.ClipData;
@@ -52,13 +52,13 @@ import com.android.documentsui.testing.TestLastAccessedStorage;
import com.android.documentsui.testing.TestProvidersAccess;
import com.android.documentsui.testing.TestResolveInfo;
-import java.util.concurrent.Executor;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
+import java.util.concurrent.Executor;
@RunWith(AndroidJUnit4.class)
@MediumTest
@@ -91,8 +91,6 @@ public class ActionHandlerTest {
mPickCountRecord
);
- mEnv.dialogs.confirmNext();
-
mEnv.selectionMgr.select("1");
AsyncTask.setDefaultExecutor(mEnv.mExecutor);