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 MtpSource extends MediaSource {
22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "MtpSource";
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int MTP_DEVICESET = 0;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int MTP_DEVICE = 1;
26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int MTP_ITEM = 2;
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    GalleryApp mApplication;
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    PathMatcher mMatcher;
30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    MtpContext mMtpContext;
31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public MtpSource(GalleryApp application) {
33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super("mtp");
34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mApplication = application;
35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMatcher = new PathMatcher();
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMatcher.add("/mtp", MTP_DEVICESET);
37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMatcher.add("/mtp/*", MTP_DEVICE);
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMatcher.add("/mtp/item/*/*", MTP_ITEM);
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMtpContext = new MtpContext(mApplication.getAndroidContext());
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public MediaObject createMediaObject(Path path) {
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        switch (mMatcher.match(path)) {
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            case MTP_DEVICESET: {
46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                return new MtpDeviceSet(path, mApplication, mMtpContext);
47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            case MTP_DEVICE: {
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                int deviceId = mMatcher.getIntVar(0);
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                return new MtpDevice(path, mApplication, deviceId, mMtpContext);
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            case MTP_ITEM: {
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                int deviceId = mMatcher.getIntVar(0);
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                int objectId = mMatcher.getIntVar(1);
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                return new MtpImage(path, mApplication, deviceId, objectId, mMtpContext);
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            default:
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                throw new RuntimeException("bad path: " + path);
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void pause() {
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMtpContext.pause();
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void resume() {
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mMtpContext.resume();
70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
72