/* * Copyright (C) 2010 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.gallery3d.data; import java.util.ArrayList; public class ClusterAlbum extends MediaSet implements ContentListener { @SuppressWarnings("unused") private static final String TAG = "ClusterAlbum"; private ArrayList mPaths = new ArrayList(); private String mName = ""; private DataManager mDataManager; private MediaSet mClusterAlbumSet; private MediaItem mCover; public ClusterAlbum(Path path, DataManager dataManager, MediaSet clusterAlbumSet) { super(path, nextVersionNumber()); mDataManager = dataManager; mClusterAlbumSet = clusterAlbumSet; mClusterAlbumSet.addContentListener(this); } public void setCoverMediaItem(MediaItem cover) { mCover = cover; } @Override public MediaItem getCoverMediaItem() { return mCover != null ? mCover : super.getCoverMediaItem(); } void setMediaItems(ArrayList paths) { mPaths = paths; } ArrayList getMediaItems() { return mPaths; } public void setName(String name) { mName = name; } @Override public String getName() { return mName; } @Override public int getMediaItemCount() { return mPaths.size(); } @Override public ArrayList getMediaItem(int start, int count) { return getMediaItemFromPath(mPaths, start, count, mDataManager); } public static ArrayList getMediaItemFromPath( ArrayList paths, int start, int count, DataManager dataManager) { if (start >= paths.size()) { return new ArrayList(); } int end = Math.min(start + count, paths.size()); ArrayList subset = new ArrayList(paths.subList(start, end)); final MediaItem[] buf = new MediaItem[end - start]; ItemConsumer consumer = new ItemConsumer() { @Override public void consume(int index, MediaItem item) { buf[index] = item; } }; dataManager.mapMediaItems(subset, consumer, 0); ArrayList result = new ArrayList(end - start); for (int i = 0; i < buf.length; i++) { result.add(buf[i]); } return result; } @Override protected int enumerateMediaItems(ItemConsumer consumer, int startIndex) { mDataManager.mapMediaItems(mPaths, consumer, startIndex); return mPaths.size(); } @Override public int getTotalMediaItemCount() { return mPaths.size(); } @Override public long reload() { if (mClusterAlbumSet.reload() > mDataVersion) { mDataVersion = nextVersionNumber(); } return mDataVersion; } @Override public void onContentDirty() { notifyContentChanged(); } @Override public int getSupportedOperations() { return SUPPORT_SHARE | SUPPORT_DELETE | SUPPORT_INFO; } @Override public void delete() { ItemConsumer consumer = new ItemConsumer() { @Override public void consume(int index, MediaItem item) { if ((item.getSupportedOperations() & SUPPORT_DELETE) != 0) { item.delete(); } } }; mDataManager.mapMediaItems(mPaths, consumer, 0); } @Override public boolean isLeafAlbum() { return true; } }