Do not allow to select non-selectable items via mouse.

Bug: 28101625
Change-Id: I9f6cd4e259f7860bbc6c74c4d24c43e2c3ba1047
This commit is contained in:
Tomasz Mikolajewski
2016-04-11 13:44:01 +09:00
parent 566c595d4d
commit 5e02d303c0
2 changed files with 29 additions and 1 deletions

View File

@@ -1268,6 +1268,11 @@ public final class MultiSelectManager {
notifySelectionChanged();
}
@Override
public boolean onBeforeItemStateChange(String id, boolean nextState) {
return notifyBeforeItemStateChange(id, nextState);
}
private class ViewScroller implements Runnable {
/**
* The number of milliseconds of scrolling at which scroll speed continues to increase.
@@ -1655,7 +1660,9 @@ public final class MultiSelectManager {
if (id != null) {
// The adapter inserts items for UI layout purposes that aren't associated
// with files. Those will have a null model ID. Don't select them.
mSelection.add(id);
if (canSelect(id)) {
mSelection.add(id);
}
}
if (isPossiblePositionNearestOrigin(column, columnStartIndex, columnEndIndex,
row, rowStartIndex, rowEndIndex)) {
@@ -1668,6 +1675,21 @@ public final class MultiSelectManager {
}
}
/**
* @return True if the item is selectable.
*/
private boolean canSelect(String id) {
// TODO: Simplify the logic, so the check whether we can select is done in one place.
// Consider injecting FragmentTuner, or move the checks from MultiSelectManager to
// Selection.
for (OnSelectionChangedListener listener : mOnSelectionChangedListeners) {
if (!listener.onBeforeItemStateChange(id, true)) {
return false;
}
}
return true;
}
/**
* @return Returns true if the position is the nearest to the origin, or, in the case of the
* lower-right corner, whether it is possible that the position is the nearest to the
@@ -1700,6 +1722,7 @@ public final class MultiSelectManager {
*/
static interface OnSelectionChangedListener {
public void onSelectionChanged(Set<String> updatedSelection);
public boolean onBeforeItemStateChange(String id, boolean nextState);
}
void addOnSelectionChangedListener(OnSelectionChangedListener listener) {

View File

@@ -76,6 +76,11 @@ public class MultiSelectManager_GridModelTest extends AndroidTestCase {
public void onSelectionChanged(Set<String> updatedSelection) {
lastSelection = updatedSelection;
}
@Override
public boolean onBeforeItemStateChange(String id, boolean nextState) {
return true;
}
});
}