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(); 7261c634ab70a10cbd68482ad03caa4470e9e9ecc5John Hoford mTotal = -1; 73e3c968f892585490b938ea2bcef81f8dca4a81f8Ray Chen enterSelectionMode(); 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionModeChange(SELECT_ALL_MODE); 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void deSelectAll() { 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin leaveSelectionMode(); 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInverseSelection = false; 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.clear(); 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean inSelectAllMode() { 84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mInverseSelection; 85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean inSelectionMode() { 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mInSelectionMode; 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void enterSelectionMode() { 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInSelectionMode) return; 93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInSelectionMode = true; 95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionModeChange(ENTER_SELECTION_MODE); 96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void leaveSelectionMode() { 99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mInSelectionMode) return; 100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInSelectionMode = false; 102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mInverseSelection = false; 103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.clear(); 104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionModeChange(LEAVE_SELECTION_MODE); 105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean isItemSelected(Path itemId) { 108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mInverseSelection ^ mClickedSet.contains(itemId); 109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 11121c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen private int getTotalCount() { 11221c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (mSourceMediaSet == null) return -1; 11321c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen 11421c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (mTotal < 0) { 11521c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen mTotal = mIsAlbumSet 11621c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen ? mSourceMediaSet.getSubMediaSetCount() 11721c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen : mSourceMediaSet.getMediaItemCount(); 11821c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen } 11921c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen return mTotal; 12021c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen } 12121c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getSelectedCount() { 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = mClickedSet.size(); 124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInverseSelection) { 12521c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen count = getTotalCount() - count; 126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return count; 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void toggle(Path path) { 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mClickedSet.contains(path)) { 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.remove(path); 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin enterSelectionMode(); 135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mClickedSet.add(path); 136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 13821c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen // Convert to inverse selection mode if everything is selected. 13921c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen int count = getSelectedCount(); 14021c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (count == getTotalCount()) { 14121c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen selectAll(); 14221c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen } 14321c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen 144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mListener != null) mListener.onSelectionChange(path, isItemSelected(path)); 14521c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen if (count == 0 && mAutoLeave) { 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin leaveSelectionMode(); 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 150549c968947cccc8bacca994f954629228b6b877fBobby Georgescu private static boolean expandMediaSet(ArrayList<Path> items, MediaSet set, int maxSelection) { 151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int subCount = set.getSubMediaSetCount(); 152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (int i = 0; i < subCount; i++) { 153549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (!expandMediaSet(items, set.getSubMediaSet(i), maxSelection)) { 154549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return false; 155549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int total = set.getMediaItemCount(); 158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int batch = 50; 159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int index = 0; 160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin while (index < total) { 162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = index + batch < total 163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? batch 164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : total - index; 165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ArrayList<MediaItem> list = set.getMediaItem(index, count); 166549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (list != null 167549c968947cccc8bacca994f954629228b6b877fBobby Georgescu && list.size() > (maxSelection - items.size())) { 168549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return false; 169549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (MediaItem item : list) { 171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin items.add(item.getPath()); 172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin index += batch; 174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 175549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return true; 176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public ArrayList<Path> getSelected(boolean expandSet) { 179549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return getSelected(expandSet, Integer.MAX_VALUE); 180549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 181549c968947cccc8bacca994f954629228b6b877fBobby Georgescu 182549c968947cccc8bacca994f954629228b6b877fBobby Georgescu public ArrayList<Path> getSelected(boolean expandSet, int maxSelection) { 183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ArrayList<Path> selected = new ArrayList<Path>(); 184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mIsAlbumSet) { 185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInverseSelection) { 18621c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen int total = getTotalCount(); 18721c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen for (int i = 0; i < total; i++) { 188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet set = mSourceMediaSet.getSubMediaSet(i); 189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path id = set.getPath(); 190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mClickedSet.contains(id)) { 191faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (expandSet) { 192faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (!expandMediaSet(selected, set, maxSelection)) { 193faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu return null; 194faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu } 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selected.add(id); 197549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 198549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 199549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (Path id : mClickedSet) { 205faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (expandSet) { 206faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu if (!expandMediaSet(selected, mDataManager.getMediaSet(id), 207faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu maxSelection)) { 208faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu return null; 209faf2f040f38532213fa237cf45c9794cf1a85859Bobby Georgescu } 210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selected.add(id); 212549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 213549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 214549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mInverseSelection) { 22021c2e665fdc1d1af0c91ab9c104d13fb7dc2444eRay Chen int total = getTotalCount(); 221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int index = 0; 222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin while (index < total) { 223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = Math.min(total - index, MediaSet.MEDIAITEM_BATCH_FETCH_COUNT); 224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ArrayList<MediaItem> list = mSourceMediaSet.getMediaItem(index, count); 225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (MediaItem item : list) { 226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path id = item.getPath(); 227549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (!mClickedSet.contains(id)) { 228549c968947cccc8bacca994f954629228b6b877fBobby Georgescu selected.add(id); 229549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 230549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 231549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 232549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin index += count; 235f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (Path id : mClickedSet) { 238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selected.add(id); 239549c968947cccc8bacca994f954629228b6b877fBobby Georgescu if (selected.size() > maxSelection) { 240549c968947cccc8bacca994f954629228b6b877fBobby Georgescu return null; 241549c968947cccc8bacca994f954629228b6b877fBobby Georgescu } 242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 244f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 245f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return selected; 246f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void setSourceMediaSet(MediaSet set) { 249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSourceMediaSet = set; 250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mTotal = -1; 251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 252f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 253