SnailSource.java revision 15b351a22d02e89d882fc9fe32b3f4c512080e0a
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 Changpackage com.android.gallery3d.data; 1715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 1815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changimport android.util.SparseArray; 1915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changimport com.android.gallery3d.app.GalleryApp; 2015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changimport com.android.gallery3d.ui.ScreenNail; 2115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changpublic class SnailSource extends MediaSource { 2315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final String TAG = "SnailSource"; 2415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final int SNAIL_ALBUM = 0; 2515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final int SNAIL_ITEM = 1; 2615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private GalleryApp mApplication; 2815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private PathMatcher mMatcher; 2915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static int sNextId; 3015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static SparseArray<ScreenNail> sRegistry = new SparseArray<ScreenNail>(); 3115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 3215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public SnailSource(GalleryApp application) { 3315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang super("snail"); 3415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mApplication = application; 3515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher = new PathMatcher(); 3615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher.add("/snail/set/*", SNAIL_ALBUM); 3715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher.add("/snail/item/*", SNAIL_ITEM); 3815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 3915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 4015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // The only path we accept is "/snail/set/id" and "/snail/item/id" 4115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 4215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public MediaObject createMediaObject(Path path) { 4315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang DataManager dataManager = mApplication.getDataManager(); 4415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang switch (mMatcher.match(path)) { 4515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang case SNAIL_ALBUM: 4615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang String itemPath = "/snail/item/" + mMatcher.getVar(0); 4715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang MediaItem item = 4815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang (MediaItem) dataManager.getMediaObject(itemPath); 4915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return new SnailAlbum(path, item); 5015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang case SNAIL_ITEM: { 5115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang int id = mMatcher.getIntVar(0); 5215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return new SnailItem(path, lookupScreenNail(id)); 5315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return null; 5615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 5815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // Register a ScreenNail. Returns the Path of the MediaSet 5915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // containing the MediaItem associated with the ScreenNail. 6015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public static synchronized Path registerScreenNail(ScreenNail s) { 6115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang int id = sNextId++; 6215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang sRegistry.put(id, s); 6315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return Path.fromString("/snail/set").getChild(id); 6415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 6515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 6615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public static synchronized void unregisterScreenNail(ScreenNail s) { 6715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang int index = sRegistry.indexOfValue(s); 6815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang sRegistry.removeAt(index); 6915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 7015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 7115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static synchronized ScreenNail lookupScreenNail(int id) { 7215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return sRegistry.get(id); 7315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 7415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang} 75