SelectionManager.java revision faf2f040f38532213fa237cf45c9794cf1a85859
1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.ui; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.android.gallery3d.app.AbstractGalleryActivity; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.DataManager; 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaItem; 22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaSet; 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.Path; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport java.util.ArrayList; 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport java.util.HashSet; 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport java.util.Set; 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class SelectionManager { 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @SuppressWarnings("unused") 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "SelectionManager"; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int ENTER_SELECTION_MODE = 1; 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int LEAVE_SELECTION_MODE = 2; 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SELECT_ALL_MODE = 3; 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private Set<Path> mClickedSet; 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private MediaSet mSourceMediaSet; 39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private SelectionListener mListener; 40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private DataManager mDataManager; 41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mInverseSelection; 42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mIsAlbumSet; 43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mInSelectionMode; 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mAutoLeave = true; 45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private int mTotal; 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public interface SelectionListener { 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSelectionModeChange(int mode); 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSelectionChange(Path path, boolean selected); 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 52b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin public SelectionManager(AbstractGalleryActivity activity, boolean isAlbumSet) { 53b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin mDataManager = activity.getDataManager(); 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet = new HashSet<Path>(); 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIsAlbumSet = isAlbumSet; 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mTotal = -1; 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // Whether we will leave selection mode automatically once the number of 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // selected items is down to zero. 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void setAutoLeaveSelectionMode(boolean enable) { 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAutoLeave = enable; 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void setSelectionListener(SelectionListener listener) { 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mListener = listener; 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void selectAll() { 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInverseSelection = true; 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.clear(); 72e3c968f892585490b938ea2bcef81f8dca4a81f8Ray Chen enterSelectionMode(); 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionModeChange(SELECT_ALL_MODE); 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void deSelectAll() { 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin leaveSelectionMode(); 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInverseSelection = false; 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.clear(); 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean inSelectAllMode() { 83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mInverseSelection; 84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean inSelectionMode() { 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mInSelectionMode; 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void enterSelectionMode() { 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInSelectionMode) return; 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInSelectionMode = true; 94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionModeChange(ENTER_SELECTION_MODE); 95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void leaveSelectionMode() { 98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mInSelectionMode) return; 99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInSelectionMode = false; 101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInverseSelection = false; 102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.clear(); 103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionModeChange(LEAVE_SELECTION_MODE); 104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean isItemSelected(Path itemId) { 107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mInverseSelection ^ mClickedSet.contains(itemId); 108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 11021c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen private int getTotalCount() { 11121c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (mSourceMediaSet == null) return -1; 11221c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen 11321c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (mTotal < 0) { 11421c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen mTotal = mIsAlbumSet 11521c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen ? mSourceMediaSet.getSubMediaSetCount() 11621c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen : mSourceMediaSet.getMediaItemCount(); 11721c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen } 11821c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen return mTotal; 11921c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen } 12021c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen 121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getSelectedCount() { 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = mClickedSet.size(); 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInverseSelection) { 12421c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen count = getTotalCount() - count; 125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return count; 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void toggle(Path path) { 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mClickedSet.contains(path)) { 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.remove(path); 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin enterSelectionMode(); 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.add(path); 135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 13721c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen // Convert to inverse selection mode if everything is selected. 13821c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen int count = getSelectedCount(); 13921c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (count == getTotalCount()) { 14021c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen selectAll(); 14121c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen } 14221c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen 143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionChange(path, isItemSelected(path)); 14421c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (count == 0 && mAutoLeave) { 145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin leaveSelectionMode(); 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 149549c968947cccc8bacca994f954629228b6b877fBobby Georgescu private static boolean expandMediaSet(ArrayList<Path> items, MediaSet set, int maxSelection) { 150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int subCount = set.getSubMediaSetCount(); 151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (int i = 0; i < subCount; i++) { 152549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (!expandMediaSet(items, set.getSubMediaSet(i), maxSelection)) { 153549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return false; 154549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int total = set.getMediaItemCount(); 157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int batch = 50; 158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int index = 0; 159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin while (index < total) { 161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = index + batch < total 162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? batch 163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : total - index; 164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ArrayList<MediaItem> list = set.getMediaItem(index, count); 165549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (list != null 166549c968947cccc8bacca994f954629228b6b877fBobby Georgescu && list.size() > (maxSelection - items.size())) { 167549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return false; 168549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (MediaItem item : list) { 170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin items.add(item.getPath()); 171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin index += batch; 173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 174549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return true; 175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public ArrayList<Path> getSelected(boolean expandSet) { 178549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return getSelected(expandSet, Integer.MAX_VALUE); 179549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 180549c968947cccc8bacca994f954629228b6b877fBobby Georgescu 181549c968947cccc8bacca994f954629228b6b877fBobby Georgescu public ArrayList<Path> getSelected(boolean expandSet, int maxSelection) { 182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ArrayList<Path> selected = new ArrayList<Path>(); 183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mIsAlbumSet) { 184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInverseSelection) { 18521c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen int total = getTotalCount(); 18621c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen for (int i = 0; i < total; i++) { 187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet set = mSourceMediaSet.getSubMediaSet(i); 188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path id = set.getPath(); 189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mClickedSet.contains(id)) { 190faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (expandSet) { 191faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (!expandMediaSet(selected, set, maxSelection)) { 192faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu return null; 193faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu } 194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selected.add(id); 196549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 197549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 198549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (Path id : mClickedSet) { 204faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (expandSet) { 205faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (!expandMediaSet(selected, mDataManager.getMediaSet(id), 206faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu maxSelection)) { 207faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu return null; 208faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu } 209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selected.add(id); 211549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 212549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 213549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInverseSelection) { 21921c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen int total = getTotalCount(); 220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int index = 0; 221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin while (index < total) { 222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = Math.min(total - index, MediaSet.MEDIAITEM_BATCH_FETCH_COUNT); 223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ArrayList<MediaItem> list = mSourceMediaSet.getMediaItem(index, count); 224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (MediaItem item : list) { 225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path id = item.getPath(); 226549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (!mClickedSet.contains(id)) { 227549c968947cccc8bacca994f954629228b6b877fBobby Georgescu selected.add(id); 228549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 229549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 230549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 231549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 232f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin index += count; 234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 235f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (Path id : mClickedSet) { 237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selected.add(id); 238549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 239549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 240549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 241f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 244f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return selected; 245f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 246f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void setSourceMediaSet(MediaSet set) { 248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSourceMediaSet = set; 249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mTotal = -1; 250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 252