MtpServer.java revision a3f8514492cb4bc8fa7c36e2c0f720342796ada7
198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood/*
298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Copyright (C) 2010 The Android Open Source Project
398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *
498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * you may not use this file except in compliance with the License.
698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * You may obtain a copy of the License at
798ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *
898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood *
1098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Unless required by applicable law or agreed to in writing, software
1198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * See the License for the specific language governing permissions and
1498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * limitations under the License.
1598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood */
1698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
170cd0136d440cf6ad9d5fab430269116786e671ecMike Lockwoodpackage android.mtp;
1898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
1998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwoodimport android.util.Log;
2098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
2198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood/**
2298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * Java wrapper for MTP/PTP support as USB responder.
2398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood * {@hide}
2498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood */
2598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwoodpublic class MtpServer {
2698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
27a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood    private final Object mLock = new Object();
28a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood    private boolean mStarted;
29a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood
3098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    private static final String TAG = "MtpServer";
3198ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
3298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    static {
3398ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood        System.loadLibrary("media_jni");
3498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
3598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
367f36b19b6b78c83f1c52edd153d64295ee3840ceMike Lockwood    public MtpServer(MtpDatabase database, String storagePath, long reserveSpace) {
377f36b19b6b78c83f1c52edd153d64295ee3840ceMike Lockwood        native_setup(database, storagePath, reserveSpace);
3898ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
3998ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
4098ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    public void start() {
41a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood        synchronized (mLock) {
42a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood            native_start();
43a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood            mStarted = true;
44a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood        }
4598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
4698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
4798ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    public void stop() {
48a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood        synchronized (mLock) {
49a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood            if (mStarted) {
50a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood                native_stop();
51a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood                mStarted = false;
52a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood            }
53a3f8514492cb4bc8fa7c36e2c0f720342796ada7Mike Lockwood        }
5498ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    }
5598ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood
56be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    public void sendObjectAdded(int handle) {
57be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood        native_send_object_added(handle);
58be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    }
59be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood
60be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    public void sendObjectRemoved(int handle) {
61be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood        native_send_object_removed(handle);
62be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    }
63be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood
64eabe8bfaf8c45289a4cfd880f4107d1a9b17e38bMike Lockwood    public void setPtpMode(boolean usePtp) {
65eabe8bfaf8c45289a4cfd880f4107d1a9b17e38bMike Lockwood        native_set_ptp_mode(usePtp);
66eabe8bfaf8c45289a4cfd880f4107d1a9b17e38bMike Lockwood    }
67eabe8bfaf8c45289a4cfd880f4107d1a9b17e38bMike Lockwood
6866e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood    // Used to disable MTP by removing all storage units.
6966e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood    // This is done to disable access to file transfer when the device is locked.
7066e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood    public void setLocked(boolean locked) {
7166e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood        native_set_locked(locked);
7266e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood    }
7366e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood
747f36b19b6b78c83f1c52edd153d64295ee3840ceMike Lockwood    private native final void native_setup(MtpDatabase database, String storagePath,
757f36b19b6b78c83f1c52edd153d64295ee3840ceMike Lockwood            long reserveSpace);
7698ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    private native final void native_start();
7798ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood    private native final void native_stop();
78be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    private native final void native_send_object_added(int handle);
79be125a50b41f15810145671e0fcbdaf13b363e03Mike Lockwood    private native final void native_send_object_removed(int handle);
80eabe8bfaf8c45289a4cfd880f4107d1a9b17e38bMike Lockwood    private native final void native_set_ptp_mode(boolean usePtp);
8166e57f6aa9d206552e9b154bf00a17d6efae7fb0Mike Lockwood    private native final void native_set_locked(boolean locked);
8298ef64e4a89ced79094d4ff3dc0123c1989f9e10Mike Lockwood}
83