1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.data; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.app.GalleryApp; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linclass ClusterSource extends MediaSource { 22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUMSET_TIME = 0; 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUMSET_LOCATION = 1; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUMSET_TAG = 2; 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUMSET_SIZE = 3; 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUMSET_FACE = 4; 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUM_TIME = 0x100; 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUM_LOCATION = 0x101; 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUM_TAG = 0x102; 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUM_SIZE = 0x103; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin static final int CLUSTER_ALBUM_FACE = 0x104; 33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryApp mApplication; 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PathMatcher mMatcher; 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public ClusterSource(GalleryApp application) { 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super("cluster"); 39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mApplication = application; 40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher = new PathMatcher(); 41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/time", CLUSTER_ALBUMSET_TIME); 42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/location", CLUSTER_ALBUMSET_LOCATION); 43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/tag", CLUSTER_ALBUMSET_TAG); 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/size", CLUSTER_ALBUMSET_SIZE); 45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/face", CLUSTER_ALBUMSET_FACE); 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/time/*", CLUSTER_ALBUM_TIME); 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/location/*", CLUSTER_ALBUM_LOCATION); 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/tag/*", CLUSTER_ALBUM_TAG); 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/size/*", CLUSTER_ALBUM_SIZE); 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMatcher.add("/cluster/*/face/*", CLUSTER_ALBUM_FACE); 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // The names we accept are: 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // /cluster/{set}/time /cluster/{set}/time/k 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // /cluster/{set}/location /cluster/{set}/location/k 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // /cluster/{set}/tag /cluster/{set}/tag/encoded_tag 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // /cluster/{set}/size /cluster/{set}/size/min_size 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public MediaObject createMediaObject(Path path) { 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int matchType = mMatcher.match(path); 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String setsName = mMatcher.getVar(0); 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin DataManager dataManager = mApplication.getDataManager(); 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet[] sets = dataManager.getMediaSetsFromString(setsName); 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (matchType) { 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUMSET_TIME: 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUMSET_LOCATION: 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUMSET_TAG: 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUMSET_SIZE: 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUMSET_FACE: 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return new ClusterAlbumSet(path, mApplication, sets[0], matchType); 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUM_TIME: 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUM_LOCATION: 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUM_TAG: 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUM_SIZE: 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case CLUSTER_ALBUM_FACE: { 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet parent = dataManager.getMediaSet(path.getParent()); 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // The actual content in the ClusterAlbum will be filled later 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // when the reload() method in the parent is run. 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return new ClusterAlbum(path, dataManager, parent); 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin default: 83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new RuntimeException("bad path: " + path); 84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 87