SnailSource.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 Changpackage com.android.gallery3d.data; 1715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 1815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changimport com.android.gallery3d.app.GalleryApp; 1915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changpublic class SnailSource extends MediaSource { 2115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final String TAG = "SnailSource"; 2215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final int SNAIL_ALBUM = 0; 2315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final int SNAIL_ITEM = 1; 2415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private GalleryApp mApplication; 2615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private PathMatcher mMatcher; 2715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static int sNextId; 2815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public SnailSource(GalleryApp application) { 3015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang super("snail"); 3115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mApplication = application; 3215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher = new PathMatcher(); 3315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher.add("/snail/set/*", SNAIL_ALBUM); 3415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher.add("/snail/item/*", SNAIL_ITEM); 3515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 3615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 3715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // The only path we accept is "/snail/set/id" and "/snail/item/id" 3815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 3915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public MediaObject createMediaObject(Path path) { 4015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang DataManager dataManager = mApplication.getDataManager(); 4115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang switch (mMatcher.match(path)) { 4215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang case SNAIL_ALBUM: 4315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang String itemPath = "/snail/item/" + mMatcher.getVar(0); 4415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang MediaItem item = 4515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang (MediaItem) dataManager.getMediaObject(itemPath); 4615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return new SnailAlbum(path, item); 4715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang case SNAIL_ITEM: { 4815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang int id = mMatcher.getIntVar(0); 493b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang return new SnailItem(path); 5015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return null; 5315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 553b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang // Registers a new SnailAlbum containing a SnailItem and returns the id of 563b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang // them. You can obtain the Path of the SnailAlbum and SnailItem associated 573b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang // with the id by getSetPath and getItemPath(). 583b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang public static synchronized int newId() { 593b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang return sNextId++; 60b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang } 61b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang 62b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang public static Path getSetPath(int id) { 6315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return Path.fromString("/snail/set").getChild(id); 6415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 6515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 66b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang public static Path getItemPath(int id) { 67b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang return Path.fromString("/snail/item").getChild(id); 68b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang } 6915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang} 70