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 { 217817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @SuppressWarnings("unused") 2215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final String TAG = "SnailSource"; 2315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final int SNAIL_ALBUM = 0; 2415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static final int SNAIL_ITEM = 1; 2515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 2615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private GalleryApp mApplication; 2715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private PathMatcher mMatcher; 2815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang private static int sNextId; 2915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 3015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public SnailSource(GalleryApp application) { 3115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang super("snail"); 3215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mApplication = application; 3315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher = new PathMatcher(); 3415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher.add("/snail/set/*", SNAIL_ALBUM); 3515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang mMatcher.add("/snail/item/*", SNAIL_ITEM); 3615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 3715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 3815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // The only path we accept is "/snail/set/id" and "/snail/item/id" 3915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang @Override 4015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public MediaObject createMediaObject(Path path) { 4115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang DataManager dataManager = mApplication.getDataManager(); 4215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang switch (mMatcher.match(path)) { 4315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang case SNAIL_ALBUM: 4415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang String itemPath = "/snail/item/" + mMatcher.getVar(0); 4545f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu SnailItem item = 4645f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu (SnailItem) dataManager.getMediaObject(itemPath); 4715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return new SnailAlbum(path, item); 4815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang case SNAIL_ITEM: { 4915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang int id = mMatcher.getIntVar(0); 503b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang return new SnailItem(path); 5115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5215b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return null; 5415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 5515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 563b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang // Registers a new SnailAlbum containing a SnailItem and returns the id of 573b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang // them. You can obtain the Path of the SnailAlbum and SnailItem associated 583b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang // with the id by getSetPath and getItemPath(). 593b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang public static synchronized int newId() { 603b4a8aeb0353fa18a2b5267b3952a80a6c6d4d13Chih-Chung Chang return sNextId++; 61b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang } 62b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang 63b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang public static Path getSetPath(int id) { 6415b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return Path.fromString("/snail/set").getChild(id); 6515b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 6615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 67b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang public static Path getItemPath(int id) { 68b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang return Path.fromString("/snail/item").getChild(id); 69b29a27f475a2c449abdda8d4e03d30914feed8c6Chih-Chung Chang } 7015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang} 71