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