diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java index 5feaf3be3dcbd..e7b2ed1782beb 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -1410,7 +1410,7 @@ public class DirectoryFragment extends Fragment // Handle range selection adjustments. Extending the selection will adjust the // bounds of the in-progress range selection. Each time an unshifted navigation // event is received, the range selection is restarted. - if (shouldExtendSelection(event)) { + if (shouldExtendSelection(doc, event)) { if (!mSelectionManager.isRangeSelectionActive()) { // Start a range selection if one isn't active mSelectionManager.startRangeSelection(doc.getAdapterPosition()); @@ -1447,9 +1447,22 @@ public class DirectoryFragment extends Fragment return false; } - private boolean shouldExtendSelection(KeyEvent event) { - return Events.isNavigationKeyCode(event.getKeyCode()) && - event.isShiftPressed(); + private boolean shouldExtendSelection(DocumentHolder doc, KeyEvent event) { + if (!Events.isNavigationKeyCode(event.getKeyCode()) || !event.isShiftPressed()) { + return false; + } + + // TODO: Combine this method with onBeforeItemStateChange, as both of them are almost + // the same, and responsible for the same thing (whether to select or not). + final Cursor cursor = mModel.getItem(doc.modelId); + if (cursor == null) { + Log.w(TAG, "Couldn't obtain cursor for modelId: " + doc.modelId); + return false; + } + + final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE); + final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS); + return mTuner.canSelectType(docMimeType, docFlags); } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java index 1285b34ce313f..758815371b80f 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java @@ -378,8 +378,8 @@ public final class MultiSelectManager { * @param pos The anchor position for the selection range. */ void startRangeSelection(int pos) { - attemptSelect(mAdapter.getModelId(pos)); - setSelectionRangeBegin(pos); + attemptSelect(mAdapter.getModelId(pos)); + setSelectionRangeBegin(pos); } /**