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 public class FilterSource extends MediaSource {
22     @SuppressWarnings("unused")
23     private static final String TAG = "FilterSource";
24     private static final int FILTER_BY_MEDIATYPE = 0;
25     private static final int FILTER_BY_DELETE = 1;
26     private static final int FILTER_BY_EMPTY = 2;
27     private static final int FILTER_BY_EMPTY_ITEM = 3;
28     private static final int FILTER_BY_CAMERA_SHORTCUT = 4;
29     private static final int FILTER_BY_CAMERA_SHORTCUT_ITEM = 5;
30 
31     public static final String FILTER_EMPTY_ITEM = "/filter/empty_prompt";
32     public static final String FILTER_CAMERA_SHORTCUT = "/filter/camera_shortcut";
33     private static final String FILTER_CAMERA_SHORTCUT_ITEM = "/filter/camera_shortcut_item";
34 
35     private GalleryApp mApplication;
36     private PathMatcher mMatcher;
37     private MediaItem mEmptyItem;
38     private MediaItem mCameraShortcutItem;
39 
FilterSource(GalleryApp application)40     public FilterSource(GalleryApp application) {
41         super("filter");
42         mApplication = application;
43         mMatcher = new PathMatcher();
44         mMatcher.add("/filter/mediatype/*/*", FILTER_BY_MEDIATYPE);
45         mMatcher.add("/filter/delete/*", FILTER_BY_DELETE);
46         mMatcher.add("/filter/empty/*", FILTER_BY_EMPTY);
47         mMatcher.add(FILTER_EMPTY_ITEM, FILTER_BY_EMPTY_ITEM);
48         mMatcher.add(FILTER_CAMERA_SHORTCUT, FILTER_BY_CAMERA_SHORTCUT);
49         mMatcher.add(FILTER_CAMERA_SHORTCUT_ITEM, FILTER_BY_CAMERA_SHORTCUT_ITEM);
50 
51         mEmptyItem = new EmptyAlbumImage(Path.fromString(FILTER_EMPTY_ITEM),
52                 mApplication);
53         mCameraShortcutItem = new CameraShortcutImage(
54                 Path.fromString(FILTER_CAMERA_SHORTCUT_ITEM), mApplication);
55     }
56 
57     // The name we accept are:
58     // /filter/mediatype/k/{set}    where k is the media type we want.
59     // /filter/delete/{set}
60     @Override
createMediaObject(Path path)61     public MediaObject createMediaObject(Path path) {
62         int matchType = mMatcher.match(path);
63         DataManager dataManager = mApplication.getDataManager();
64         switch (matchType) {
65             case FILTER_BY_MEDIATYPE: {
66                 int mediaType = mMatcher.getIntVar(0);
67                 String setsName = mMatcher.getVar(1);
68                 MediaSet[] sets = dataManager.getMediaSetsFromString(setsName);
69                 return new FilterTypeSet(path, dataManager, sets[0], mediaType);
70             }
71             case FILTER_BY_DELETE: {
72                 String setsName = mMatcher.getVar(0);
73                 MediaSet[] sets = dataManager.getMediaSetsFromString(setsName);
74                 return new FilterDeleteSet(path, sets[0]);
75             }
76             case FILTER_BY_EMPTY: {
77                 String setsName = mMatcher.getVar(0);
78                 MediaSet[] sets = dataManager.getMediaSetsFromString(setsName);
79                 return new FilterEmptyPromptSet(path, sets[0], mEmptyItem);
80             }
81             case FILTER_BY_EMPTY_ITEM: {
82                 return mEmptyItem;
83             }
84             case FILTER_BY_CAMERA_SHORTCUT: {
85                 return new SingleItemAlbum(path, mCameraShortcutItem);
86             }
87             case FILTER_BY_CAMERA_SHORTCUT_ITEM: {
88                 return mCameraShortcutItem;
89             }
90             default:
91                 throw new RuntimeException("bad path: " + path);
92         }
93     }
94 }
95