summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steve McKay <smckay@google.com> 2016-10-10 10:18:36 -0700
committer Steve McKay <smckay@google.com> 2016-10-10 11:16:30 -0700
commitbd9f05aa36bf19d8b34d0d73a59e9bd65d3d26eb (patch)
tree6063a6c70fc461c058998fe5359fcf93ca3fd80d
parent5b0a2c187a9e446b683687817d22cbe443585223 (diff)
Move full delete logic into ActionHandler.
Was spread across DirectoryFragment and UserInputHandlers. Drop "android" test package in favor of the generic "testing". Add an interface for ActionModeController (ActionModeAddons), so can be tested. Moved ActionModeHandler out of dirlist ../up d dir. Change-Id: Id915519656f163d3c413fe5d440d866c3ce4e2ca
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java4
-rw-r--r--src/com/android/documentsui/ActionHandler.java4
-rw-r--r--src/com/android/documentsui/ActionModeAddons.java26
-rw-r--r--src/com/android/documentsui/ActionModeController.java (renamed from src/com/android/documentsui/dirlist/ActionModeController.java)55
-rw-r--r--src/com/android/documentsui/BaseActivity.java1
-rw-r--r--src/com/android/documentsui/MenuManager.java1
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryFragment.java149
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryState.java101
-rw-r--r--src/com/android/documentsui/dirlist/UserInputHandler.java19
-rw-r--r--src/com/android/documentsui/files/ActionHandler.java12
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java16
-rw-r--r--src/com/android/documentsui/picker/PickActivity.java2
-rw-r--r--tests/common/com/android/documentsui/TestActionModeAddons.java36
-rw-r--r--tests/common/com/android/documentsui/TestActivity.java4
-rw-r--r--tests/common/com/android/documentsui/selection/SelectionProbe.java (renamed from tests/common/com/android/documentsui/testing/dirlist/SelectionProbe.java)2
-rw-r--r--tests/common/com/android/documentsui/selection/TestSelectionListener.java (renamed from tests/common/com/android/documentsui/testing/dirlist/TestSelectionListener.java)2
-rw-r--r--tests/common/com/android/documentsui/testing/TestPackageManager.java (renamed from tests/common/com/android/documentsui/testing/android/TestPackageManager.java)2
-rw-r--r--tests/common/com/android/documentsui/testing/TestResources.java (renamed from tests/common/com/android/documentsui/testing/android/TestResources.java)2
-rw-r--r--tests/common/com/android/documentsui/testing/TestRootsAccess.java1
-rw-r--r--tests/unit/com/android/documentsui/dirlist/UserInputHandler_KeyboardTest.java7
-rw-r--r--tests/unit/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java5
-rw-r--r--tests/unit/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java5
-rw-r--r--tests/unit/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java5
-rw-r--r--tests/unit/com/android/documentsui/files/ActionHandlerTest.java12
-rw-r--r--tests/unit/com/android/documentsui/selection/SelectionManagerTest.java2
-rw-r--r--tests/unit/com/android/documentsui/selection/SelectionManager_SingleSelectTest.java2
26 files changed, 272 insertions, 205 deletions
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index d626b708c..508814980 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -25,7 +25,6 @@ import android.os.Parcelable;
import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.base.BooleanConsumer;
-import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.Lookup;
@@ -34,7 +33,6 @@ import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.DocumentDetails;
-import com.android.documentsui.dirlist.Model;
import com.android.documentsui.files.LauncherActivity;
import com.android.documentsui.files.OpenUriForViewTask;
import com.android.documentsui.roots.LoadRootTask;
@@ -153,7 +151,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
}
@Override
- public void deleteSelectedDocuments(Model model, ConfirmationCallback callback) {
+ public void deleteSelectedDocuments() {
throw new UnsupportedOperationException("Delete not supported!");
}
diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java
index 15ee5bc37..fe6be0e58 100644
--- a/src/com/android/documentsui/ActionHandler.java
+++ b/src/com/android/documentsui/ActionHandler.java
@@ -22,12 +22,10 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import com.android.documentsui.base.BooleanConsumer;
-import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.dirlist.DocumentDetails;
-import com.android.documentsui.dirlist.Model;
public interface ActionHandler {
@@ -67,7 +65,7 @@ public interface ActionHandler {
void showChooserForDoc(DocumentInfo doc);
- void deleteSelectedDocuments(Model model, ConfirmationCallback callback);
+ void deleteSelectedDocuments();
/**
* Called when initial activity setup is complete. Implementations
diff --git a/src/com/android/documentsui/ActionModeAddons.java b/src/com/android/documentsui/ActionModeAddons.java
new file mode 100644
index 000000000..83eba78bb
--- /dev/null
+++ b/src/com/android/documentsui/ActionModeAddons.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2016 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;
+
+/**
+ * Extra ActionMode functionality required by ActionHandlers.
+ */
+public interface ActionModeAddons {
+
+ void finishActionMode();
+
+ void finishOnConfirmed(int code);
+}
diff --git a/src/com/android/documentsui/dirlist/ActionModeController.java b/src/com/android/documentsui/ActionModeController.java
index 03582f4bc..a6fe7f13c 100644
--- a/src/com/android/documentsui/dirlist/ActionModeController.java
+++ b/src/com/android/documentsui/ActionModeController.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.documentsui.dirlist;
+package com.android.documentsui;
import static com.android.documentsui.base.Shared.DEBUG;
@@ -29,9 +29,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import com.android.documentsui.MenuManager;
import com.android.documentsui.MenuManager.SelectionDetails;
-import com.android.documentsui.R;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.ConfirmationCallback.Result;
import com.android.documentsui.base.EventHandler;
@@ -46,7 +44,8 @@ import java.util.function.IntConsumer;
/**
* A controller that listens to selection changes and manages life cycles of action modes.
*/
-public class ActionModeController implements SelectionManager.Callback, ActionMode.Callback {
+public class ActionModeController
+ implements SelectionManager.Callback, ActionMode.Callback, ActionModeAddons {
private static final String TAG = "ActionModeController";
@@ -55,7 +54,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
private final MenuManager mMenuManager;
private final MessageBuilder mMessages;
- private final Config mConfig = new Config();
+ private final ContentScope mScope = new ContentScope();
private final Selection mSelected = new Selection();
private @Nullable ActionMode mActionMode;
@@ -80,7 +79,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
if (mActionMode == null) {
if (DEBUG) Log.d(TAG, "Starting action mode.");
mActionMode = mActivity.startActionMode(this);
- mConfig.hapticPerformer.accept(HapticFeedbackConstants.LONG_PRESS);
+ mScope.hapticPerformer.accept(HapticFeedbackConstants.LONG_PRESS);
}
updateActionMenu();
} else {
@@ -95,7 +94,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
final String title = mMessages.getQuantityString(
R.plurals.elements_selected, mSelected.size());
mActionMode.setTitle(title);
- mConfig.accessibilityAnnouncer.accept(title);
+ mScope.accessibilityAnnouncer.accept(title);
}
}
@@ -120,16 +119,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
final String title = mMessages.getQuantityString(
R.plurals.elements_selected, mSelected.size());
mActionMode.setTitle(title);
- mConfig.accessibilityAnnouncer.accept(title);
- }
- }
-
- void finishActionMode() {
- if (mActionMode != null) {
- mActionMode.finish();
- mActionMode = null;
- } else {
- Log.w(TAG, "Tried to finish a null action mode.");
+ mScope.accessibilityAnnouncer.accept(title);
}
}
@@ -151,7 +141,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
mSelected.clear();
// Re-enable TalkBack for the toolbars, as they are no longer covered by action mode.
- mConfig.accessibilityImportanceSetter.setAccessibilityImportance(
+ mScope.accessibilityImportanceSetter.setAccessibilityImportance(
View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, R.id.toolbar, R.id.roots_toolbar);
}
@@ -165,7 +155,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
// Hide the toolbars if action mode is enabled, so TalkBack doesn't navigate to
// these controls when using linear navigation.
- mConfig.accessibilityImportanceSetter.setAccessibilityImportance(
+ mScope.accessibilityImportanceSetter.setAccessibilityImportance(
View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
R.id.toolbar,
R.id.roots_toolbar);
@@ -184,13 +174,13 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
private void updateActionMenu() {
assert(mMenu != null);
- mMenuManager.updateActionMenu(mMenu, mConfig.selectionDetails);
+ mMenuManager.updateActionMenu(mMenu, mScope.selectionDetails);
Menus.disableHiddenItems(mMenu);
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- return mConfig.menuItemClicker.accept(item);
+ return mScope.menuItemClicker.accept(item);
}
private static void setImportantForAccessibility(
@@ -208,6 +198,17 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
void setAccessibilityImportance(int accessibilityImportance, @IdRes int... viewIds);
}
+ @Override
+ public void finishActionMode() {
+ if (mActionMode != null) {
+ mActionMode.finish();
+ mActionMode = null;
+ } else {
+ Log.w(TAG, "Tried to finish a null action mode.");
+ }
+ }
+
+ @Override
public void finishOnConfirmed(@Result int code) {
if (code == ConfirmationCallback.CONFIRM) {
finishActionMode();
@@ -219,11 +220,11 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
assert(mActionMode == null);
assert(mMenu == null);
- mConfig.menuItemClicker = menuItemClicker;
- mConfig.selectionDetails = selectionDetails;
- mConfig.hapticPerformer = view::performHapticFeedback;
- mConfig.accessibilityAnnouncer = view::announceForAccessibility;
- mConfig.accessibilityImportanceSetter =
+ mScope.menuItemClicker = menuItemClicker;
+ mScope.selectionDetails = selectionDetails;
+ mScope.hapticPerformer = view::performHapticFeedback;
+ mScope.accessibilityAnnouncer = view::announceForAccessibility;
+ mScope.accessibilityImportanceSetter =
(int accessibilityImportance, @IdRes int[] viewIds) -> {
setImportantForAccessibility(
mActivity, accessibilityImportance, viewIds);
@@ -232,7 +233,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
return this;
}
- private static final class Config {
+ private static final class ContentScope {
private EventHandler<MenuItem> menuItemClicker;
private SelectionDetails selectionDetails;
private IntConsumer hapticPerformer;
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 0f285f51d..005f88795 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -64,7 +64,6 @@ import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.base.State.ViewMode;
-import com.android.documentsui.dirlist.ActionModeController;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.dirlist.DocumentsAdapter;
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 5bf360fde..c6e95142f 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -27,7 +27,6 @@ import com.android.documentsui.base.Menus;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
-import com.android.documentsui.dirlist.ActionModeController;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.sidebar.RootsFragment;
import com.android.internal.annotations.VisibleForTesting;
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index cb6ffbcba..306644d27 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -61,6 +61,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.documentsui.ActionHandler;
+import com.android.documentsui.ActionModeController;
import com.android.documentsui.ActivityConfig;
import com.android.documentsui.BaseActivity;
import com.android.documentsui.BaseActivity.RetainedState;
@@ -100,7 +101,6 @@ import com.android.documentsui.services.FileOperationService;
import com.android.documentsui.services.FileOperationService.OpType;
import com.android.documentsui.services.FileOperations;
import com.android.documentsui.sorting.SortDimension;
-import com.android.documentsui.sorting.SortDimension.SortDirection;
import com.android.documentsui.sorting.SortModel;
import com.android.documentsui.ui.DialogController;
import com.android.documentsui.ui.Snackbars;
@@ -182,7 +182,7 @@ public class DirectoryFragment extends Fragment
private MessageBar mMessageBar;
private View mProgressBar;
- private Config mConfig;
+ private DirectoryState mLocalState;
// Note, we use !null to indicate that selection was restored (from rotation).
// So don't fiddle with this field unless you've got the bigger picture in mind.
@@ -257,8 +257,8 @@ public class DirectoryFragment extends Fragment
// Restore state if fragment recreated.
Bundle args = savedInstanceState == null ? getArguments() : savedInstanceState;
- mConfig = new Config();
- mConfig.restore(args);
+ mLocalState = new DirectoryState();
+ mLocalState.restore(args);
// Restore any selection we may have squirreled away in retained state.
@Nullable RetainedState retained = getBaseActivity().getRetainedState();
@@ -298,7 +298,7 @@ public class DirectoryFragment extends Fragment
final BaseActivity activity = getBaseActivity();
mSelectionMgr = activity.getSelectionManager(mAdapter, this::canSetSelectionState);
mFocusManager = activity.getFocusManager(mRecView, mModel);
- mActions = activity.getActionHandler(mModel, mConfig.mSearchMode);
+ mActions = activity.getActionHandler(mModel, mLocalState.mSearchMode);
mMenuManager = activity.getMenuManager();
mDialogs = activity.getDialogController();
@@ -343,7 +343,6 @@ public class DirectoryFragment extends Fragment
(MotionEvent t) -> MotionInputEvent.obtain(t, mRecView),
this::canSelect,
this::onRightClick,
- (DocumentDetails ignored) -> onDeleteSelectedDocuments(), // delete handler
mDragStartListener::onTouchDragEvent,
gestureHandler);
@@ -367,13 +366,13 @@ public class DirectoryFragment extends Fragment
final ActivityManager am = (ActivityManager) context.getSystemService(
Context.ACTIVITY_SERVICE);
- boolean svelte = am.isLowRamDevice() && (mConfig.mType == TYPE_RECENT_OPEN);
+ boolean svelte = am.isLowRamDevice() && (mLocalState.mType == TYPE_RECENT_OPEN);
mIconHelper.setThumbnailsEnabled(!svelte);
// If mDocument is null, we sort it by last modified by default because it's in Recents.
final boolean prefersLastModified =
- (mConfig.mDocument != null)
- ? (mConfig.mDocument.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0
+ (mLocalState.mDocument != null)
+ ? (mLocalState.mDocument.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0
: true;
// Call this before adding the listener to avoid restarting the loader one more time
state.sortModel.setDefaultDimension(
@@ -403,7 +402,7 @@ public class DirectoryFragment extends Fragment
final SparseArray<Parcelable> container = new SparseArray<>();
getView().saveHierarchyState(container);
final State state = getDisplayState();
- state.dirConfigs.put(mConfig.getConfigKey(), container);
+ state.dirConfigs.put(mLocalState.getConfigKey(), container);
}
public void retainState(RetainedState state) {
@@ -414,7 +413,7 @@ public class DirectoryFragment extends Fragment
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- mConfig.save(outState);
+ mLocalState.save(outState);
}
@Override
@@ -453,7 +452,7 @@ public class DirectoryFragment extends Fragment
private void handleCopyResult(int resultCode, Intent data) {
- FileOperation operation = mConfig.claimPendingOperation();
+ FileOperation operation = mLocalState.claimPendingOperation();
if (resultCode == Activity.RESULT_CANCELED || data == null) {
// User pressed the back button or otherwise cancelled the destination pick. Don't
@@ -585,8 +584,7 @@ public class DirectoryFragment extends Fragment
case R.id.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(
- mModel, mActionModeController::finishOnConfirmed);
+ mActions.deleteSelectedDocuments();
return true;
case R.id.menu_copy_to:
@@ -726,15 +724,8 @@ public class DirectoryFragment extends Fragment
startActivity(intent);
}
- private boolean onDeleteSelectedDocuments() {
- if (mSelectionMgr.hasSelection()) {
- mActions.deleteSelectedDocuments(mModel, mActionModeController::finishOnConfirmed);
- }
- return false;
- }
-
private void transferDocuments(final Selection selected, final @OpType int mode) {
- if(mode == FileOperationService.OPERATION_COPY) {
+ if (mode == FileOperationService.OPERATION_COPY) {
Metrics.logUserAction(getContext(), Metrics.USER_ACTION_COPY_TO);
} else if (mode == FileOperationService.OPERATION_MOVE) {
Metrics.logUserAction(getContext(), Metrics.USER_ACTION_MOVE_TO);
@@ -757,7 +748,7 @@ public class DirectoryFragment extends Fragment
}
Uri srcParent = getDisplayState().stack.peek().derivedUri;
- mConfig.mPendingOperation = new FileOperation.Builder()
+ mLocalState.mPendingOperation = new FileOperation.Builder()
.withOpType(mode)
.withSrcParent(srcParent)
.withSrcs(srcs)
@@ -1146,7 +1137,7 @@ public class DirectoryFragment extends Fragment
mProgressBar.setVisibility(mModel.isLoading() ? View.VISIBLE : View.GONE);
if (mModel.isEmpty()) {
- if (mConfig.mSearchMode) {
+ if (mLocalState.mSearchMode) {
showNoResults(getDisplayState().stack.root);
} else {
showEmptyDirectory();
@@ -1201,7 +1192,7 @@ public class DirectoryFragment extends Fragment
String query) {
DirectoryFragment df = get(fm);
- df.mConfig.update(root, doc, query);
+ df.mLocalState.update(root, doc, query);
df.getLoaderManager().restartLoader(LOADER_ID, null, df);
}
@@ -1210,7 +1201,7 @@ public class DirectoryFragment extends Fragment
if (DEBUG) Log.d(TAG, "Reloading directory: " + DocumentInfo.debugString(doc));
DirectoryFragment df = get(fm);
- df.mConfig.update(type, root, doc, query);
+ df.mLocalState.update(type, root, doc, query);
df.getLoaderManager().restartLoader(LOADER_ID, null, df);
}
@@ -1281,39 +1272,39 @@ public class DirectoryFragment extends Fragment
State state = getDisplayState();
Uri contentsUri;
- switch (mConfig.mType) {
+ switch (mLocalState.mType) {
case TYPE_NORMAL:
- contentsUri = mConfig.mSearchMode ? DocumentsContract.buildSearchDocumentsUri(
- mConfig.mRoot.authority, mConfig.mRoot.rootId, mConfig.mQuery)
+ contentsUri = mLocalState.mSearchMode ? DocumentsContract.buildSearchDocumentsUri(
+ mLocalState.mRoot.authority, mLocalState.mRoot.rootId, mLocalState.mQuery)
: DocumentsContract.buildChildDocumentsUri(
- mConfig.mDocument.authority, mConfig.mDocument.documentId);
+ mLocalState.mDocument.authority, mLocalState.mDocument.documentId);
if (mActivityConfig.managedModeEnabled(state.stack)) {
contentsUri = DocumentsContract.setManageMode(contentsUri);
}
if (DEBUG) Log.d(TAG, "Creating new directory loader for: "
- + DocumentInfo.debugString(mConfig.mDocument));
+ + DocumentInfo.debugString(mLocalState.mDocument));
return new DirectoryLoader(
- context, mConfig.mRoot, mConfig.mDocument, contentsUri, state.sortModel,
- mConfig.mSearchMode);
+ context, mLocalState.mRoot, mLocalState.mDocument, contentsUri, state.sortModel,
+ mLocalState.mSearchMode);
case TYPE_RECENT_OPEN:
if (DEBUG) Log.d(TAG, "Creating new loader recents.");
final RootsAccess roots = DocumentsApplication.getRootsCache(context);
return new RecentsLoader(context, roots, state);
default:
- throw new IllegalStateException("Unknown type " + mConfig.mType);
+ throw new IllegalStateException("Unknown type " + mLocalState.mType);
}
}
@Override
public void onLoadFinished(Loader<DirectoryResult> loader, DirectoryResult result) {
if (DEBUG) Log.d(TAG, "Loader has finished for: "
- + DocumentInfo.debugString(mConfig.mDocument));
+ + DocumentInfo.debugString(mLocalState.mDocument));
assert(result != null);
if (!isAdded()) return;
- if (mConfig.mSearchMode) {
+ if (mLocalState.mSearchMode) {
Metrics.logUserAction(getContext(), Metrics.USER_ACTION_SEARCH);
}
@@ -1332,22 +1323,22 @@ public class DirectoryFragment extends Fragment
}
// Restore any previous instance state
- final SparseArray<Parcelable> container = state.dirConfigs.remove(mConfig.getConfigKey());
+ final SparseArray<Parcelable> container = state.dirConfigs.remove(mLocalState.getConfigKey());
final int curSortedDimensionId = state.sortModel.getSortedDimensionId();
final SortDimension curSortedDimension =
state.sortModel.getDimensionById(curSortedDimensionId);
if (container != null && !getArguments().getBoolean(Shared.EXTRA_IGNORE_STATE, false)) {
getView().restoreHierarchyState(container);
- } else if (mConfig.mLastSortDimensionId != curSortedDimension.getId()
- || mConfig.mLastSortDimensionId == SortModel.SORT_DIMENSION_ID_UNKNOWN
- || mConfig.mLastSortDirection != curSortedDimension.getSortDirection()) {
+ } else if (mLocalState.mLastSortDimensionId != curSortedDimension.getId()
+ || mLocalState.mLastSortDimensionId == SortModel.SORT_DIMENSION_ID_UNKNOWN
+ || mLocalState.mLastSortDirection != curSortedDimension.getSortDirection()) {
// Scroll to the top if the sort order actually changed.
mRecView.smoothScrollToPosition(0);
}
- mConfig.mLastSortDimensionId = curSortedDimension.getId();
- mConfig.mLastSortDirection = curSortedDimension.getSortDirection();
+ mLocalState.mLastSortDimensionId = curSortedDimension.getId();
+ mLocalState.mLastSortDirection = curSortedDimension.getSortDirection();
if (mRefreshLayout.isRefreshing()) {
new Handler().postDelayed(
@@ -1359,81 +1350,9 @@ public class DirectoryFragment extends Fragment
@Override
public void onLoaderReset(Loader<DirectoryResult> loader) {
if (DEBUG) Log.d(TAG, "Resetting loader for: "
- + DocumentInfo.debugString(mConfig.mDocument));
+ + DocumentInfo.debugString(mLocalState.mDocument));
mModel.onLoaderReset();
mRefreshLayout.setRefreshing(false);
}
-
- private static final class Config {
-
- private static final String EXTRA_SORT_DIMENSION_ID = "sortDimensionId";
- private static final String EXTRA_SORT_DIRECTION = "sortDirection";
-
- // Directory fragment state is defined by: root, document, query, type, selection
- private @ResultType int mType = TYPE_NORMAL;
- private RootInfo mRoot;
- // Null when viewing Recents directory.
- private @Nullable DocumentInfo mDocument;
- private String mQuery = null;
- // Here we save the clip details of moveTo/copyTo actions when picker shows up.
- // This will be written to saved instance.
- private @Nullable FileOperation mPendingOperation;
- private boolean mSearchMode;
- private int mLastSortDimensionId = SortModel.SORT_DIMENSION_ID_UNKNOWN;
- private @SortDirection int mLastSortDirection;
-
- private String mConfigKey;
-
- public void restore(Bundle bundle) {
- mRoot = bundle.getParcelable(Shared.EXTRA_ROOT);
- mDocument = bundle.getParcelable(Shared.EXTRA_DOC);
- mQuery = bundle.getString(Shared.EXTRA_QUERY);
- mType = bundle.getInt(Shared.EXTRA_TYPE);
- mSearchMode = bundle.getBoolean(Shared.EXTRA_SEARCH_MODE);
- mPendingOperation = bundle.getParcelable(FileOperationService.EXTRA_OPERATION);
- mLastSortDimensionId = bundle.getInt(EXTRA_SORT_DIMENSION_ID);
- mLastSortDirection = bundle.getInt(EXTRA_SORT_DIRECTION);
- }
-
- public void save(Bundle bundle) {
- bundle.putInt(Shared.EXTRA_TYPE, mType);
- bundle.putParcelable(Shared.EXTRA_ROOT, mRoot);
- bundle.putParcelable(Shared.EXTRA_DOC, mDocument);
- bundle.putString(Shared.EXTRA_QUERY, mQuery);
- bundle.putBoolean(Shared.EXTRA_SEARCH_MODE, mSearchMode);
- bundle.putParcelable(FileOperationService.EXTRA_OPERATION, mPendingOperation);
- bundle.putInt(EXTRA_SORT_DIMENSION_ID, mLastSortDimensionId);
- bundle.putInt(EXTRA_SORT_DIRECTION, mLastSortDirection);
- }
-
- public FileOperation claimPendingOperation() {
- FileOperation op = mPendingOperation;
- mPendingOperation = null;
- return op;
- }
-
- public void update(int type, RootInfo root, DocumentInfo doc, String query) {
- mType = type;
- update(root, doc, query);
- }
-
- public void update(RootInfo root, DocumentInfo doc, String query) {
- mQuery = query;
- mRoot = root;
- mDocument = doc;
- mSearchMode = query != null;
- }
-
- private String getConfigKey() {
- if (mConfigKey == null) {
- final StringBuilder builder = new StringBuilder();
- builder.append(mRoot != null ? mRoot.authority : "null").append(';');
- builder.append(mRoot != null ? mRoot.rootId : "null").append(';');
- builder.append(mDocument != null ? mDocument.documentId : "null");
- mConfigKey = builder.toString();
- }
- return mConfigKey;
- }
- }
}
diff --git a/src/com/android/documentsui/dirlist/DirectoryState.java b/src/com/android/documentsui/dirlist/DirectoryState.java
new file mode 100644
index 000000000..6b849a2b4
--- /dev/null
+++ b/src/com/android/documentsui/dirlist/DirectoryState.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2016 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.dirlist;
+
+import android.os.Bundle;
+
+import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.RootInfo;
+import com.android.documentsui.base.Shared;
+import com.android.documentsui.dirlist.DirectoryFragment.ResultType;
+import com.android.documentsui.services.FileOperation;
+import com.android.documentsui.services.FileOperationService;
+import com.android.documentsui.sorting.SortModel;
+import com.android.documentsui.sorting.SortDimension.SortDirection;
+
+import javax.annotation.Nullable;
+
+final class DirectoryState {
+
+ private static final String EXTRA_SORT_DIMENSION_ID = "sortDimensionId";
+ private static final String EXTRA_SORT_DIRECTION = "sortDirection";
+
+ // Directory fragment state is defined by: root, document, query, type, selection
+ @ResultType int mType = DirectoryFragment.TYPE_NORMAL;
+ RootInfo mRoot;
+ // Null when viewing Recents directory.
+ @Nullable DocumentInfo mDocument;
+ String mQuery = null;
+ // Here we save the clip details of moveTo/copyTo actions when picker shows up.
+ // This will be written to saved instance.
+ @Nullable FileOperation mPendingOperation;
+ boolean mSearchMode;
+ int mLastSortDimensionId = SortModel.SORT_DIMENSION_ID_UNKNOWN;
+ @SortDirection int mLastSortDirection;
+
+ private String mConfigKey;
+
+ public void restore(Bundle bundle) {
+ mRoot = bundle.getParcelable(Shared.EXTRA_ROOT);
+ mDocument = bundle.getParcelable(Shared.EXTRA_DOC);
+ mQuery = bundle.getString(Shared.EXTRA_QUERY);
+ mType = bundle.getInt(Shared.EXTRA_TYPE);
+ mSearchMode = bundle.getBoolean(Shared.EXTRA_SEARCH_MODE);
+ mPendingOperation = bundle.getParcelable(FileOperationService.EXTRA_OPERATION);
+ mLastSortDimensionId = bundle.getInt(EXTRA_SORT_DIMENSION_ID);
+ mLastSortDirection = bundle.getInt(EXTRA_SORT_DIRECTION);
+ }
+
+ public void save(Bundle bundle) {
+ bundle.putInt(Shared.EXTRA_TYPE, mType);
+ bundle.putParcelable(Shared.EXTRA_ROOT, mRoot);
+ bundle.putParcelable(Shared.EXTRA_DOC, mDocument);
+ bundle.putString(Shared.EXTRA_QUERY, mQuery);
+ bundle.putBoolean(Shared.EXTRA_SEARCH_MODE, mSearchMode);
+ bundle.putParcelable(FileOperationService.EXTRA_OPERATION, mPendingOperation);
+ bundle.putInt(EXTRA_SORT_DIMENSION_ID, mLastSortDimensionId);
+ bundle.putInt(EXTRA_SORT_DIRECTION, mLastSortDirection);
+ }
+
+ public FileOperation claimPendingOperation() {
+ FileOperation op = mPendingOperation;
+ mPendingOperation = null;
+ return op;
+ }
+
+ public void update(int type, RootInfo root, DocumentInfo doc, String query) {
+ mType = type;
+ update(root, doc, query);
+ }
+
+ public void update(RootInfo root, DocumentInfo doc, String query) {
+ mQuery = query;
+ mRoot = root;
+ mDocument = doc;
+ mSearchMode = query != null;
+ }
+
+ String getConfigKey() {
+ if (mConfigKey == null) {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(mRoot != null ? mRoot.authority : "null").append(';');
+ builder.append(mRoot != null ? mRoot.rootId : "null").append(';');
+ builder.append(mDocument != null ? mDocument.documentId : "null");
+ mConfigKey = builder.toString();
+ }
+ return mConfigKey;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/documentsui/dirlist/UserInputHandler.java b/src/com/android/documentsui/dirlist/UserInputHandler.java
index 4af1fcdfb..03d40fa38 100644
--- a/src/com/android/documentsui/dirlist/UserInputHandler.java
+++ b/src/com/android/documentsui/dirlist/UserInputHandler.java
@@ -45,14 +45,13 @@ public final class UserInputHandler<T extends InputEvent>
private static final String TAG = "UserInputHandler";
- private ActionHandler mActionHandler;
+ private ActionHandler mActions;
private final FocusHandler mFocusHandler;
private final SelectionManager mSelectionMgr;
private final Function<MotionEvent, T> mEventConverter;
private final Predicate<DocumentDetails> mSelectable;
private final EventHandler<InputEvent> mRightClickHandler;
- private final EventHandler<DocumentDetails> mDeleteHandler;
private final EventHandler<InputEvent> mTouchDragListener;
private final EventHandler<InputEvent> mGestureSelectHandler;
@@ -62,23 +61,21 @@ public final class UserInputHandler<T extends InputEvent>
private final KeyInputHandler mKeyListener;
public UserInputHandler(
- ActionHandler actionHandler,
+ ActionHandler actions,
FocusHandler focusHandler,
SelectionManager selectionMgr,
Function<MotionEvent, T> eventConverter,
Predicate<DocumentDetails> selectable,
EventHandler<InputEvent> rightClickHandler,
- EventHandler<DocumentDetails> deleteHandler,
EventHandler<InputEvent> touchDragListener,
EventHandler<InputEvent> gestureSelectHandler) {
- mActionHandler = actionHandler;
+ mActions = actions;
mFocusHandler = focusHandler;
mSelectionMgr = selectionMgr;
mEventConverter = eventConverter;
mSelectable = selectable;
mRightClickHandler = rightClickHandler;
- mDeleteHandler = deleteHandler;
mTouchDragListener = touchDragListener;
mGestureSelectHandler = gestureSelectHandler;
@@ -246,7 +243,7 @@ public final class UserInputHandler<T extends InputEvent>
// otherwise they activate.
return doc.isInSelectionHotspot(event)
? selectDocument(doc)
- : mActionHandler.openDocument(doc);
+ : mActions.openDocument(doc);
}
boolean onSingleTapConfirmed(T event) {
@@ -380,7 +377,7 @@ public final class UserInputHandler<T extends InputEvent>
}
DocumentDetails doc = event.getDocumentDetails();
- return mActionHandler.viewDocument(doc);
+ return mActions.viewDocument(doc);
}
final void onLongPress(T event) {
@@ -447,14 +444,14 @@ public final class UserInputHandler<T extends InputEvent>
// For non-shifted enter keypresses, fall through.
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_BUTTON_A:
- return mActionHandler.viewDocument(doc);
+ return mActions.viewDocument(doc);
case KeyEvent.KEYCODE_SPACE:
- return mActionHandler.previewDocument(doc);
+ return mActions.previewDocument(doc);
case KeyEvent.KEYCODE_FORWARD_DEL:
// This has to be handled here instead of in a keyboard shortcut, because
// keyboard shortcuts all have to be modified with the 'Ctrl' key.
if (mSelectionMgr.hasSelection()) {
- mDeleteHandler.accept(doc);
+ mActions.deleteSelectedDocuments();
}
// Always handle the key, even if there was nothing to delete. This is a
// precaution to prevent other handlers from potentially picking up the event
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index e31d58733..993af3641 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -27,6 +27,7 @@ import android.provider.DocumentsContract;
import android.util.Log;
import com.android.documentsui.AbstractActionHandler;
+import com.android.documentsui.ActionModeAddons;
import com.android.documentsui.ActivityConfig;
import com.android.documentsui.DocumentsAccess;
import com.android.documentsui.DocumentsApplication;
@@ -69,6 +70,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
private static final String TAG = "ManagerActionHandler";
+ private final ActionModeAddons mActionModeAddons;
private final DialogController mDialogs;
private final ActivityConfig mActConfig;
private final DocumentClipper mClipper;
@@ -82,6 +84,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
DocumentsAccess docs,
SelectionManager selectionMgr,
Lookup<String, Executor> executors,
+ ActionModeAddons actionModeAddons,
DialogController dialogs,
ActivityConfig tuner,
DocumentClipper clipper,
@@ -89,6 +92,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
super(activity, state, roots, docs, selectionMgr, executors);
+ mActionModeAddons = actionModeAddons;
mDialogs = dialogs;
mActConfig = tuner;
mClipper = clipper;
@@ -181,7 +185,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
}
@Override
- public void deleteSelectedDocuments(Model model, ConfirmationCallback callback) {
+ public void deleteSelectedDocuments() {
assert(mSelectionMgr.hasSelection());
Metrics.logUserAction(mActivity, Metrics.USER_ACTION_DELETE);
@@ -193,11 +197,11 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
assert(srcParent != null);
// Model must be accessed in UI thread, since underlying cursor is not threadsafe.
- List<DocumentInfo> docs = model.getDocuments(selection);
+ List<DocumentInfo> docs = mScope.model.getDocuments(selection);
ConfirmationCallback result = (@Result int code) -> {
// share the news with our caller, be it good or bad.
- callback.accept(code);
+ mActionModeAddons.finishOnConfirmed(code);
if (code != ConfirmationCallback.CONFIRM) {
return;
@@ -207,7 +211,7 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
try {
srcs = UrisSupplier.create(
selection,
- model::getItemUri,
+ mScope.model::getItemUri,
mClipStore);
} catch (IOException e) {
throw new RuntimeException("Failed to create uri supplier.", e);
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index 448b7e9ac..500bcf74a 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -32,6 +32,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import com.android.documentsui.ActionModeController;
import com.android.documentsui.ActivityConfig;
import com.android.documentsui.BaseActivity;
import com.android.documentsui.DocumentsAccess;
@@ -49,7 +50,6 @@ import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.clipping.DocumentClipper;
-import com.android.documentsui.dirlist.ActionModeController;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.dirlist.DocumentsAdapter;
@@ -100,6 +100,13 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
});
mDialogs = DialogController.create(this, getMessages());
+
+ mActionModeController = new ActionModeController(
+ this,
+ mSelectionMgr,
+ mMenuManager,
+ getMessages());
+
mActions = new ActionHandler<>(
this,
mState,
@@ -107,17 +114,12 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
DocumentsAccess.create(this),
mSelectionMgr,
ProviderExecutor::forAuthority,
+ mActionModeController,
mDialogs,
mConfig,
mClipper,
DocumentsApplication.getClipStore(this));
- mActionModeController = new ActionModeController(
- this,
- mSelectionMgr,
- mMenuManager,
- getMessages());
-
RootsFragment.show(getFragmentManager(), null);
final Intent intent = getIntent();
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index 12dd19b18..42d32ae15 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -43,6 +43,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import com.android.documentsui.ActionModeController;
import com.android.documentsui.ActivityConfig;
import com.android.documentsui.BaseActivity;
import com.android.documentsui.DocumentsAccess;
@@ -58,7 +59,6 @@ import com.android.documentsui.base.PairedTask;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
-import com.android.documentsui.dirlist.ActionModeController;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.dirlist.DocumentsAdapter;
import com.android.documentsui.dirlist.Model;
diff --git a/tests/common/com/android/documentsui/TestActionModeAddons.java b/tests/common/com/android/documentsui/TestActionModeAddons.java
new file mode 100644
index 000000000..5e7b7d768
--- /dev/null
+++ b/tests/common/com/android/documentsui/TestActionModeAddons.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2016 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;
+
+import com.android.documentsui.testing.TestConfirmationCallback;
+
+/**
+ *
+ */
+public class TestActionModeAddons implements ActionModeAddons {
+
+ public final TestConfirmationCallback finishOnConfimed = new TestConfirmationCallback();
+
+ @Override
+ public void finishActionMode() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void finishOnConfirmed(int code) {
+ finishOnConfimed.accept(code);
+ }
+}
diff --git a/tests/common/com/android/documentsui/TestActivity.java b/tests/common/com/android/documentsui/TestActivity.java
index a2a7b55d5..9fc4fcaed 100644
--- a/tests/common/com/android/documentsui/TestActivity.java
+++ b/tests/common/com/android/documentsui/TestActivity.java
@@ -29,8 +29,8 @@ import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.testing.TestEventListener;
-import com.android.documentsui.testing.android.TestPackageManager;
-import com.android.documentsui.testing.android.TestResources;
+import com.android.documentsui.testing.TestPackageManager;
+import com.android.documentsui.testing.TestResources;
import org.mockito.Mockito;
diff --git a/tests/common/com/android/documentsui/testing/dirlist/SelectionProbe.java b/tests/common/com/android/documentsui/selection/SelectionProbe.java
index 9cadf71b2..c0973d61b 100644
--- a/tests/common/com/android/documentsui/testing/dirlist/SelectionProbe.java
+++ b/tests/common/com/android/documentsui/selection/SelectionProbe.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.documentsui.testing.dirlist;
+package com.android.documentsui.selection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
diff --git a/tests/common/com/android/documentsui/testing/dirlist/TestSelectionListener.java b/tests/common/com/android/documentsui/selection/TestSelectionListener.java
index 14eac8f09..62a86b0bd 100644
--- a/tests/common/com/android/documentsui/testing/dirlist/TestSelectionListener.java
+++ b/tests/common/com/android/documentsui/selection/TestSelectionListener.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.documentsui.testing.dirlist;
+package com.android.documentsui.selection;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
diff --git a/tests/common/com/android/documentsui/testing/android/TestPackageManager.java b/tests/common/com/android/documentsui/testing/TestPackageManager.java
index a5b28b1f2..7b1d8dc32 100644
--- a/tests/common/com/android/documentsui/testing/android/TestPackageManager.java
+++ b/tests/common/com/android/documentsui/testing/TestPackageManager.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.documentsui.testing.android;
+package com.android.documentsui.testing;
import android.annotation.UserIdInt;
import android.content.Intent;
diff --git a/tests/common/com/android/documentsui/testing/android/TestResources.java b/tests/common/com/android/documentsui/testing/TestResources.java
index c962e77c0..206d46b88 100644
--- a/tests/common/com/android/documentsui/testing/android/TestResources.java
+++ b/tests/common/com/android/documentsui/testing/TestResources.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.documentsui.testing.android;
+package com.android.documentsui.testing;
import android.annotation.BoolRes;
import android.annotation.NonNull;
diff --git a/tests/common/com/android/documentsui/testing/TestRootsAccess.java b/tests/common/com/android/documentsui/testing/TestRootsAccess.java
index 734d52193..0a2fbd21b 100644
--- a/tests/common/com/android/documentsui/testing/TestRootsAccess.java
+++ b/tests/common/com/android/documentsui/testing/TestRootsAccess.java
@@ -18,7 +18,6 @@ package com.android.documentsui.testing;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
import com.android.documentsui.roots.RootsAccess;
-import com.android.documentsui.testing.android.TestPackageManager;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_KeyboardTest.java b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_KeyboardTest.java
index 0777f2f49..98d3cc00c 100644
--- a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_KeyboardTest.java
+++ b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_KeyboardTest.java
@@ -23,13 +23,13 @@ import android.view.MotionEvent;
import com.android.documentsui.base.Events.InputEvent;
import com.android.documentsui.selection.SelectionManager;
+import com.android.documentsui.selection.SelectionProbe;
import com.android.documentsui.testing.SelectionManagers;
import com.android.documentsui.testing.TestActionHandler;
import com.android.documentsui.testing.TestEvent;
+import com.android.documentsui.testing.TestEvent.Builder;
import com.android.documentsui.testing.TestEventHandler;
import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.TestEvent.Builder;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
import org.junit.Before;
import org.junit.Test;
@@ -50,7 +50,6 @@ public final class UserInputHandler_KeyboardTest {
private TestPredicate<DocumentDetails> mCanSelect;
private TestEventHandler<InputEvent> mRightClickHandler;
- private TestEventHandler<DocumentDetails> mDeleteHandler;
private TestEventHandler<InputEvent> mDragAndDropHandler;
private TestEventHandler<InputEvent> mGestureSelectHandler;
@@ -65,7 +64,6 @@ public final class UserInputHandler_KeyboardTest {
mFocusHandler = new TestFocusHandler();
mCanSelect = new TestPredicate<>();
mRightClickHandler = new TestEventHandler<>();
- mDeleteHandler = new TestEventHandler<>();
mDragAndDropHandler = new TestEventHandler<>();
mGestureSelectHandler = new TestEventHandler<>();
@@ -78,7 +76,6 @@ public final class UserInputHandler_KeyboardTest {
},
mCanSelect,
mRightClickHandler::accept,
- mDeleteHandler::accept,
mDragAndDropHandler::accept,
mGestureSelectHandler::accept);
diff --git a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java
index 787652a80..8d7ba82f7 100644
--- a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java
+++ b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java
@@ -25,13 +25,13 @@ import android.view.MotionEvent;
import com.android.documentsui.base.Events.InputEvent;
import com.android.documentsui.selection.SelectionManager;
+import com.android.documentsui.selection.SelectionProbe;
import com.android.documentsui.testing.SelectionManagers;
import com.android.documentsui.testing.TestActionHandler;
import com.android.documentsui.testing.TestEvent;
import com.android.documentsui.testing.TestEvent.Builder;
import com.android.documentsui.testing.TestEventHandler;
import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
import org.junit.Before;
import org.junit.Test;
@@ -50,7 +50,6 @@ public final class UserInputHandler_MouseTest {
private SelectionProbe mSelection;
private TestPredicate<DocumentDetails> mCanSelect;
private TestEventHandler<InputEvent> mRightClickHandler;
- private TestEventHandler<DocumentDetails> mDeleteHandler;
private TestEventHandler<InputEvent> mDragAndDropHandler;
private TestEventHandler<InputEvent> mGestureSelectHandler;
@@ -65,7 +64,6 @@ public final class UserInputHandler_MouseTest {
mSelection = new SelectionProbe(selectionMgr);
mCanSelect = new TestPredicate<>();
mRightClickHandler = new TestEventHandler<>();
- mDeleteHandler = new TestEventHandler<>();
mDragAndDropHandler = new TestEventHandler<>();
mGestureSelectHandler = new TestEventHandler<>();
@@ -78,7 +76,6 @@ public final class UserInputHandler_MouseTest {
},
mCanSelect,
mRightClickHandler::accept,
- mDeleteHandler::accept,
mDragAndDropHandler::accept,
mGestureSelectHandler::accept);
diff --git a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java
index c34322e91..f9ca6f603 100644
--- a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java
+++ b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java
@@ -22,13 +22,13 @@ import android.view.MotionEvent;
import com.android.documentsui.base.Events.InputEvent;
import com.android.documentsui.selection.SelectionManager;
+import com.android.documentsui.selection.SelectionProbe;
import com.android.documentsui.testing.SelectionManagers;
import com.android.documentsui.testing.TestActionHandler;
import com.android.documentsui.testing.TestEvent;
import com.android.documentsui.testing.TestEvent.Builder;
import com.android.documentsui.testing.TestEventHandler;
import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
import org.junit.Before;
import org.junit.Test;
@@ -52,7 +52,6 @@ public final class UserInputHandler_RangeTest {
private SelectionProbe mSelection;
private TestPredicate<DocumentDetails> mCanSelect;
private TestEventHandler<InputEvent> mRightClickHandler;
- private TestEventHandler<DocumentDetails> mDeleteHandler;
private TestEventHandler<InputEvent> mDragAndDropHandler;
private TestEventHandler<InputEvent> mGestureSelectHandler;
private Builder mEvent;
@@ -66,7 +65,6 @@ public final class UserInputHandler_RangeTest {
mSelection = new SelectionProbe(selectionMgr);
mCanSelect = new TestPredicate<>();
mRightClickHandler = new TestEventHandler<>();
- mDeleteHandler = new TestEventHandler<>();
mDragAndDropHandler = new TestEventHandler<>();
mGestureSelectHandler = new TestEventHandler<>();
@@ -79,7 +77,6 @@ public final class UserInputHandler_RangeTest {
},
mCanSelect,
mRightClickHandler::accept,
- mDeleteHandler::accept,
mDragAndDropHandler::accept,
mGestureSelectHandler::accept);
diff --git a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java
index f8ad916ed..797f11d1e 100644
--- a/tests/unit/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java
+++ b/tests/unit/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java
@@ -25,13 +25,13 @@ import android.view.MotionEvent;
import com.android.documentsui.base.Events.InputEvent;
import com.android.documentsui.selection.SelectionManager;
+import com.android.documentsui.selection.SelectionProbe;
import com.android.documentsui.testing.SelectionManagers;
import com.android.documentsui.testing.TestActionHandler;
import com.android.documentsui.testing.TestEvent;
import com.android.documentsui.testing.TestEvent.Builder;
import com.android.documentsui.testing.TestEventHandler;
import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
import org.junit.Before;
import org.junit.Test;
@@ -51,7 +51,6 @@ public final class UserInputHandler_TouchTest {
private SelectionProbe mSelection;
private TestPredicate<DocumentDetails> mCanSelect;
private TestEventHandler<InputEvent> mRightClickHandler;
- private TestEventHandler<DocumentDetails> mDeleteHandler;
private TestEventHandler<InputEvent> mDragAndDropHandler;
private TestEventHandler<InputEvent> mGestureSelectHandler;
@@ -66,7 +65,6 @@ public final class UserInputHandler_TouchTest {
mSelection = new SelectionProbe(selectionMgr);
mCanSelect = new TestPredicate<>();
mRightClickHandler = new TestEventHandler<>();
- mDeleteHandler = new TestEventHandler<>();
mDragAndDropHandler = new TestEventHandler<>();
mGestureSelectHandler = new TestEventHandler<>();
@@ -79,7 +77,6 @@ public final class UserInputHandler_TouchTest {
},
mCanSelect,
mRightClickHandler::accept,
- mDeleteHandler::accept,
mDragAndDropHandler::accept,
mGestureSelectHandler::accept);
diff --git a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
index 1583b4101..2620f14e9 100644
--- a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
@@ -27,6 +27,7 @@ import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
import com.android.documentsui.R;
+import com.android.documentsui.TestActionModeAddons;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.RootInfo;
@@ -47,6 +48,7 @@ public class ActionHandlerTest {
private TestEnv mEnv;
private TestActivity mActivity;
+ private TestActionModeAddons mActionModeAddons;
private TestDialogController mDialogs;
private TestConfirmationCallback mCallback;
private ActionHandler<TestActivity> mHandler;
@@ -55,6 +57,7 @@ public class ActionHandlerTest {
public void setUp() {
mEnv = TestEnv.create();
mActivity = TestActivity.create();
+ mActionModeAddons = new TestActionModeAddons();
mDialogs = new TestDialogController();
mCallback = new TestConfirmationCallback();
mEnv.roots.configurePm(mActivity.packageMgr);
@@ -66,6 +69,7 @@ public class ActionHandlerTest {
mEnv.docs,
mEnv.selectionMgr,
mEnv::lookupExecutor,
+ mActionModeAddons,
mDialogs,
null, // tuner, not currently used.
null, // clipper, only used in drag/drop
@@ -106,10 +110,10 @@ public class ActionHandlerTest {
public void testDeleteDocuments() {
mEnv.populateStack();
- mHandler.deleteSelectedDocuments(mEnv.model, mCallback);
+ mHandler.deleteSelectedDocuments();
mDialogs.assertNoFileFailures();
mActivity.startService.assertCalled();
- mCallback.assertConfirmed();
+ mActionModeAddons.finishOnConfimed.assertConfirmed();
}
@Test
@@ -117,10 +121,10 @@ public class ActionHandlerTest {
mEnv.populateStack();
mDialogs.rejectNext();
- mHandler.deleteSelectedDocuments(mEnv.model, mCallback);
+ mHandler.deleteSelectedDocuments();
mDialogs.assertNoFileFailures();
mActivity.startService.assertNotCalled();
- mCallback.assertRejected();
+ mActionModeAddons.finishOnConfimed.assertRejected();
}
@Test
diff --git a/tests/unit/com/android/documentsui/selection/SelectionManagerTest.java b/tests/unit/com/android/documentsui/selection/SelectionManagerTest.java
index d522efdf2..d25395a7d 100644
--- a/tests/unit/com/android/documentsui/selection/SelectionManagerTest.java
+++ b/tests/unit/com/android/documentsui/selection/SelectionManagerTest.java
@@ -24,8 +24,6 @@ import com.android.documentsui.selection.SelectionManager;
import com.android.documentsui.dirlist.TestData;
import com.android.documentsui.selection.Selection;
import com.android.documentsui.testing.SelectionManagers;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-import com.android.documentsui.testing.dirlist.TestSelectionListener;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/unit/com/android/documentsui/selection/SelectionManager_SingleSelectTest.java b/tests/unit/com/android/documentsui/selection/SelectionManager_SingleSelectTest.java
index d2a546c96..b25c1c072 100644
--- a/tests/unit/com/android/documentsui/selection/SelectionManager_SingleSelectTest.java
+++ b/tests/unit/com/android/documentsui/selection/SelectionManager_SingleSelectTest.java
@@ -25,8 +25,6 @@ import com.android.documentsui.dirlist.TestData;
import com.android.documentsui.dirlist.TestDocumentsAdapter;
import com.android.documentsui.selection.SelectionManager;
import com.android.documentsui.testing.SelectionManagers;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-import com.android.documentsui.testing.dirlist.TestSelectionListener;
import org.junit.Before;
import org.junit.Test;