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