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