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
17package com.android.gallery3d.data;
18
19import com.android.gallery3d.app.GalleryApp;
20
21public 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
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
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