Loading src/com/android/documentsui/selection/SelectionManager.java +18 −2 Original line number Diff line number Diff line Loading @@ -426,7 +426,12 @@ public final class SelectionManager { } private void notifyDataChanged() { int lastListener = mItemCallbacks.size() - 1; final int lastListener = mItemCallbacks.size() - 1; for (int i = lastListener; i >= 0; i--) { mItemCallbacks.get(i).onSelectionReset(); } for (String id : mSelection) { if (!canSetState(id, true)) { attemptDeselect(id); Loading Loading @@ -513,21 +518,32 @@ public final class SelectionManager { if (id == null) { continue; } boolean changedState = false; if (selected) { boolean canSelect = canSetState(id, true); if (canSelect && !mSelection.mSelection.contains(id)) { mSelection.mProvisionalSelection.add(id); changedState = true; } } else { mSelection.mProvisionalSelection.remove(id); changedState = true; } // Only notify item callbacks when something's state is actually changed in provisional // selection. if (changedState) { notifyItemStateChanged(id, selected); } } notifySelectionChanged(); } public interface ItemCallback { void onItemStateChanged(String id, boolean selected); void onSelectionReset(); } public interface Callback { Loading src/com/android/documentsui/selection/SelectionMetadata.java +10 −9 Original line number Diff line number Diff line Loading @@ -58,15 +58,6 @@ public class SelectionMetadata mDocFinder = docFinder; } public void reset(){ mFileCount = 0; mDirectoryCount = 0; mPartialCount = 0; mWritableDirectoryCount = 0; mNoDeleteCount = 0; mNoRenameCount = 0; } @Override public void onItemStateChanged(String modelId, boolean selected) { final Cursor cursor = mDocFinder.apply(modelId); Loading Loading @@ -111,6 +102,16 @@ public class SelectionMetadata } } @Override public void onSelectionReset() { mFileCount = 0; mDirectoryCount = 0; mPartialCount = 0; mWritableDirectoryCount = 0; mNoDeleteCount = 0; mNoRenameCount = 0; } @Override public boolean containsDirectories() { return mDirectoryCount > 0; Loading tests/common/com/android/documentsui/dirlist/TestDocumentsAdapter.java +2 −0 Original line number Diff line number Diff line Loading @@ -73,5 +73,7 @@ public class TestDocumentsAdapter extends DocumentsAdapter { public void updateTestModelIds(List<String> modelIds) { mModelIds = modelIds; notifyDataSetChanged(); } } tests/common/com/android/documentsui/selection/SelectionProbe.java +22 −1 Original line number Diff line number Diff line Loading @@ -24,14 +24,25 @@ import com.android.documentsui.selection.SelectionManager; import com.android.documentsui.selection.Selection; /** * Helper class for making assertions against the state of a MultiSelectManager instance. * Helper class for making assertions against the state of a {@link SelectionManager} instance and * the consistency of states between {@link SelectionManager} and * {@link SelectionManager.ItemCallback}. */ public final class SelectionProbe { private final SelectionManager mMgr; private final TestItemSelectionListener mTestCallback; public SelectionProbe(SelectionManager mgr) { mMgr = mgr; mTestCallback = new TestItemSelectionListener(); mMgr.addItemCallback(mTestCallback); } public SelectionProbe(SelectionManager mgr, TestItemSelectionListener testCallback) { mMgr = mgr; mTestCallback = testCallback; } public void assertRangeSelected(int begin, int end) { Loading @@ -54,15 +65,21 @@ public final class SelectionProbe { public void assertSelectionSize(int expected) { Selection selection = mMgr.getSelection(); assertEquals(selection.toString(), expected, selection.size()); mTestCallback.assertSelectionSize(expected); } public void assertNoSelection() { assertSelectionSize(0); mTestCallback.assertNoSelection(); } public void assertSelection(int... ids) { assertSelected(ids); assertEquals(ids.length, mMgr.getSelection().size()); mTestCallback.assertSelectionSize(ids.length); } public void assertSelected(int... ids) { Loading @@ -70,6 +87,8 @@ public final class SelectionProbe { for (int id : ids) { String sid = String.valueOf(id); assertTrue(sid + " is not in selection " + sel, sel.contains(sid)); mTestCallback.assertSelected(sid); } } Loading @@ -78,6 +97,8 @@ public final class SelectionProbe { for (int id : ids) { String sid = String.valueOf(id); assertFalse(sid + " is in selection " + sel, sel.contains(sid)); mTestCallback.assertNotSelected(sid); } } Loading tests/common/com/android/documentsui/selection/TestItemSelectionListener.java 0 → 100644 +61 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.selection; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import java.util.HashSet; import java.util.Set; public class TestItemSelectionListener implements SelectionManager.ItemCallback { private final Set<String> mSelected = new HashSet<>(); @Override public void onItemStateChanged(String id, boolean selected) { if (selected) { assertNotSelected(id); mSelected.add(id); } else { assertSelected(id); mSelected.remove(id); } } @Override public void onSelectionReset() { mSelected.clear(); } void assertNoSelection() { assertTrue(mSelected.isEmpty()); } void assertSelectionSize(int expected) { assertEquals(expected, mSelected.size()); } void assertSelected(String id) { assertTrue(id + " is not selected.", mSelected.contains(id)); } void assertNotSelected(String id) { assertFalse(id + " is already selected", mSelected.contains(id)); } } Loading
src/com/android/documentsui/selection/SelectionManager.java +18 −2 Original line number Diff line number Diff line Loading @@ -426,7 +426,12 @@ public final class SelectionManager { } private void notifyDataChanged() { int lastListener = mItemCallbacks.size() - 1; final int lastListener = mItemCallbacks.size() - 1; for (int i = lastListener; i >= 0; i--) { mItemCallbacks.get(i).onSelectionReset(); } for (String id : mSelection) { if (!canSetState(id, true)) { attemptDeselect(id); Loading Loading @@ -513,21 +518,32 @@ public final class SelectionManager { if (id == null) { continue; } boolean changedState = false; if (selected) { boolean canSelect = canSetState(id, true); if (canSelect && !mSelection.mSelection.contains(id)) { mSelection.mProvisionalSelection.add(id); changedState = true; } } else { mSelection.mProvisionalSelection.remove(id); changedState = true; } // Only notify item callbacks when something's state is actually changed in provisional // selection. if (changedState) { notifyItemStateChanged(id, selected); } } notifySelectionChanged(); } public interface ItemCallback { void onItemStateChanged(String id, boolean selected); void onSelectionReset(); } public interface Callback { Loading
src/com/android/documentsui/selection/SelectionMetadata.java +10 −9 Original line number Diff line number Diff line Loading @@ -58,15 +58,6 @@ public class SelectionMetadata mDocFinder = docFinder; } public void reset(){ mFileCount = 0; mDirectoryCount = 0; mPartialCount = 0; mWritableDirectoryCount = 0; mNoDeleteCount = 0; mNoRenameCount = 0; } @Override public void onItemStateChanged(String modelId, boolean selected) { final Cursor cursor = mDocFinder.apply(modelId); Loading Loading @@ -111,6 +102,16 @@ public class SelectionMetadata } } @Override public void onSelectionReset() { mFileCount = 0; mDirectoryCount = 0; mPartialCount = 0; mWritableDirectoryCount = 0; mNoDeleteCount = 0; mNoRenameCount = 0; } @Override public boolean containsDirectories() { return mDirectoryCount > 0; Loading
tests/common/com/android/documentsui/dirlist/TestDocumentsAdapter.java +2 −0 Original line number Diff line number Diff line Loading @@ -73,5 +73,7 @@ public class TestDocumentsAdapter extends DocumentsAdapter { public void updateTestModelIds(List<String> modelIds) { mModelIds = modelIds; notifyDataSetChanged(); } }
tests/common/com/android/documentsui/selection/SelectionProbe.java +22 −1 Original line number Diff line number Diff line Loading @@ -24,14 +24,25 @@ import com.android.documentsui.selection.SelectionManager; import com.android.documentsui.selection.Selection; /** * Helper class for making assertions against the state of a MultiSelectManager instance. * Helper class for making assertions against the state of a {@link SelectionManager} instance and * the consistency of states between {@link SelectionManager} and * {@link SelectionManager.ItemCallback}. */ public final class SelectionProbe { private final SelectionManager mMgr; private final TestItemSelectionListener mTestCallback; public SelectionProbe(SelectionManager mgr) { mMgr = mgr; mTestCallback = new TestItemSelectionListener(); mMgr.addItemCallback(mTestCallback); } public SelectionProbe(SelectionManager mgr, TestItemSelectionListener testCallback) { mMgr = mgr; mTestCallback = testCallback; } public void assertRangeSelected(int begin, int end) { Loading @@ -54,15 +65,21 @@ public final class SelectionProbe { public void assertSelectionSize(int expected) { Selection selection = mMgr.getSelection(); assertEquals(selection.toString(), expected, selection.size()); mTestCallback.assertSelectionSize(expected); } public void assertNoSelection() { assertSelectionSize(0); mTestCallback.assertNoSelection(); } public void assertSelection(int... ids) { assertSelected(ids); assertEquals(ids.length, mMgr.getSelection().size()); mTestCallback.assertSelectionSize(ids.length); } public void assertSelected(int... ids) { Loading @@ -70,6 +87,8 @@ public final class SelectionProbe { for (int id : ids) { String sid = String.valueOf(id); assertTrue(sid + " is not in selection " + sel, sel.contains(sid)); mTestCallback.assertSelected(sid); } } Loading @@ -78,6 +97,8 @@ public final class SelectionProbe { for (int id : ids) { String sid = String.valueOf(id); assertFalse(sid + " is in selection " + sel, sel.contains(sid)); mTestCallback.assertNotSelected(sid); } } Loading
tests/common/com/android/documentsui/selection/TestItemSelectionListener.java 0 → 100644 +61 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.selection; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import java.util.HashSet; import java.util.Set; public class TestItemSelectionListener implements SelectionManager.ItemCallback { private final Set<String> mSelected = new HashSet<>(); @Override public void onItemStateChanged(String id, boolean selected) { if (selected) { assertNotSelected(id); mSelected.add(id); } else { assertSelected(id); mSelected.remove(id); } } @Override public void onSelectionReset() { mSelected.clear(); } void assertNoSelection() { assertTrue(mSelected.isEmpty()); } void assertSelectionSize(int expected) { assertEquals(expected, mSelected.size()); } void assertSelected(String id) { assertTrue(id + " is not selected.", mSelected.contains(id)); } void assertNotSelected(String id) { assertFalse(id + " is already selected", mSelected.contains(id)); } }