SnailAlbum.java revision 3b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13
115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang/* 215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * Copyright (C) 2012 The Android Open Source Project 315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * 415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License"); 515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * you may not use this file except in compliance with the License. 615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * You may obtain a copy of the License at 715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * 815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * http://www.apache.org/licenses/LICENSE-2.0 915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * 1015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * Unless required by applicable law or agreed to in writing, software 1115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS, 1215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * See the License for the specific language governing permissions and 1415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang * limitations under the License. 1515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang */ 1615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 1715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changpackage com.android.gallery3d.data; 1815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 1915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changimport java.util.ArrayList; 203b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Changimport java.util.concurrent.atomic.AtomicBoolean; 2115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang// This is a simple MediaSet which contains only one MediaItem -- a SnailItem. 2315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changpublic class SnailAlbum extends MediaSet { 243b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang private static final String TAG = "SnailAlbum"; 253b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang private SnailItem mItem; 263b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang private AtomicBoolean mDirty = new AtomicBoolean(false); 2715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public SnailAlbum(Path path, MediaItem item) { 2915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang super(path, nextVersionNumber()); 303b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang mItem = (SnailItem) item; 3115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 3215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 3315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 3415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public int getMediaItemCount() { 3515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return 1; 3615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 3715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 3815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 3915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public ArrayList<MediaItem> getMediaItem(int start, int count) { 4015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang ArrayList<MediaItem> result = new ArrayList<MediaItem>(); 4115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 4215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // If [start, start+count) contains the index 0, return the item. 4315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang if (start <= 0 && start + count > 0) { 4415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang result.add(mItem); 4515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 4615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 4715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return result; 4815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 4915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 5015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 5115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public boolean isLeafAlbum() { 5215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return true; 5315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 5515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 5615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public String getName() { 5715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return "SnailAlbum"; 5815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 6015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 6115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public long reload() { 623b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang if (mDirty.compareAndSet(true, false)) { 633b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang mItem.updateVersion(); 643b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang mDataVersion = nextVersionNumber(); 653b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang } 6615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return mDataVersion; 6715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 683b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang 693b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang public void notifyChange() { 703b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang mDirty.set(true); 713b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang notifyContentChanged(); 723b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang } 7315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang} 74