diff options
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; |