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
2145f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescupublic class FilterSource extends MediaSource {
227817979db0c52ffeacb951625b1e821eba303285Ahbong Chang    @SuppressWarnings("unused")
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "FilterSource";
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int FILTER_BY_MEDIATYPE = 0;
256b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang    private static final int FILTER_BY_DELETE = 1;
26c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu    private static final int FILTER_BY_EMPTY = 2;
27c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu    private static final int FILTER_BY_EMPTY_ITEM = 3;
2845f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu    private static final int FILTER_BY_CAMERA_SHORTCUT = 4;
2945f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu    private static final int FILTER_BY_CAMERA_SHORTCUT_ITEM = 5;
30c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu
31c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu    public static final String FILTER_EMPTY_ITEM = "/filter/empty_prompt";
3245f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu    public static final String FILTER_CAMERA_SHORTCUT = "/filter/camera_shortcut";
3345f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu    private static final String FILTER_CAMERA_SHORTCUT_ITEM = "/filter/camera_shortcut_item";
34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private GalleryApp mApplication;
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private PathMatcher mMatcher;
37c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu    private MediaItem mEmptyItem;
3845f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu    private MediaItem mCameraShortcutItem;
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public FilterSource(GalleryApp application) {
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super("filter");
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mApplication = application;
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMatcher = new PathMatcher();
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMatcher.add("/filter/mediatype/*/*", FILTER_BY_MEDIATYPE);
456b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang        mMatcher.add("/filter/delete/*", FILTER_BY_DELETE);
46c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu        mMatcher.add("/filter/empty/*", FILTER_BY_EMPTY);
4745f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu        mMatcher.add(FILTER_EMPTY_ITEM, FILTER_BY_EMPTY_ITEM);
4845f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu        mMatcher.add(FILTER_CAMERA_SHORTCUT, FILTER_BY_CAMERA_SHORTCUT);
4945f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu        mMatcher.add(FILTER_CAMERA_SHORTCUT_ITEM, FILTER_BY_CAMERA_SHORTCUT_ITEM);
50c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu
51c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu        mEmptyItem = new EmptyAlbumImage(Path.fromString(FILTER_EMPTY_ITEM),
52c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu                mApplication);
5345f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu        mCameraShortcutItem = new CameraShortcutImage(
5445f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu                Path.fromString(FILTER_CAMERA_SHORTCUT_ITEM), mApplication);
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
576b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang    // The name we accept are:
586b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang    // /filter/mediatype/k/{set}    where k is the media type we want.
596b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang    // /filter/delete/{set}
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public MediaObject createMediaObject(Path path) {
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        int matchType = mMatcher.match(path);
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        DataManager dataManager = mApplication.getDataManager();
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        switch (matchType) {
656b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang            case FILTER_BY_MEDIATYPE: {
666b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                int mediaType = mMatcher.getIntVar(0);
676b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                String setsName = mMatcher.getVar(1);
686b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                MediaSet[] sets = dataManager.getMediaSetsFromString(setsName);
696b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                return new FilterTypeSet(path, dataManager, sets[0], mediaType);
706b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang            }
716b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang            case FILTER_BY_DELETE: {
726b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                String setsName = mMatcher.getVar(0);
736b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                MediaSet[] sets = dataManager.getMediaSetsFromString(setsName);
746b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang                return new FilterDeleteSet(path, sets[0]);
756b891c6a3739f8c49d42f9db6fc76cb92c7c5f25Chih-Chung Chang            }
76c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu            case FILTER_BY_EMPTY: {
77c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu                String setsName = mMatcher.getVar(0);
78c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu                MediaSet[] sets = dataManager.getMediaSetsFromString(setsName);
79c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu                return new FilterEmptyPromptSet(path, sets[0], mEmptyItem);
80c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu            }
81c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu            case FILTER_BY_EMPTY_ITEM: {
82c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu                return mEmptyItem;
83c7e3c76d6965f520a9651d309052c5f01726cd58Bobby Georgescu            }
8445f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu            case FILTER_BY_CAMERA_SHORTCUT: {
8545f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu                return new SingleItemAlbum(path, mCameraShortcutItem);
8645f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu            }
8745f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu            case FILTER_BY_CAMERA_SHORTCUT_ITEM: {
8845f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu                return mCameraShortcutItem;
8945f089d69141e3fb0dfaad9bc34d275b61eb2aeeBobby Georgescu            }
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            default:
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                throw new RuntimeException("bad path: " + path);
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
95