diff options
author | 2019-08-14 20:10:18 +0800 | |
---|---|---|
committer | 2019-08-21 15:42:29 +0800 | |
commit | 8dafe614b5c62c31a26b4d9081a29b7b8b6bf8ff (patch) | |
tree | 885f5039ef4e433d266c2f2664dfceda83602d2e | |
parent | e6771c2cb8bc8eb4e6cdf596e6f67a4a84d3f20b (diff) |
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
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); |