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