MTP: Disable MTP when the keyguard is locked and secure

BUG:  3402847

Change-Id: I6c77efe18f525cd0af37911c8b6aac4f17352552
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index b27441f..e025ef1 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -60,6 +60,7 @@
     MtpStorage*     mStorage;
     Mutex           mMutex;
     bool            mUsePtp;
+    bool            mLocked;
     int             mFd;
 
 public:
@@ -67,6 +68,8 @@
         :   mDatabase(database),
             mServer(NULL),
             mStorage(storage),
+            mUsePtp(false),
+            mLocked(false),
             mFd(-1)
     {
     }
@@ -81,6 +84,20 @@
         mMutex.unlock();
     }
 
+    void setLocked(bool locked) {
+        mMutex.lock();
+        if (locked != mLocked) {
+            if (mServer) {
+                if (locked)
+                    mServer->removeStorage(mStorage);
+                else
+                    mServer->addStorage(mStorage);
+            }
+            mLocked = locked;
+        }
+        mMutex.unlock();
+    }
+
     virtual bool threadLoop() {
         mMutex.lock();
         mFd = open("/dev/mtp_usb", O_RDWR);
@@ -89,7 +106,8 @@
                     (mUsePtp ? MTP_INTERFACE_MODE_PTP : MTP_INTERFACE_MODE_MTP));
 
             mServer = new MtpServer(mFd, mDatabase, AID_MEDIA_RW, 0664, 0775);
-            mServer->addStorage(mStorage);
+            if (!mLocked)
+                mServer->addStorage(mStorage);
 
             mMutex.unlock();
             mServer->run();
@@ -199,6 +217,16 @@
 #endif
 }
 
+static void
+android_mtp_MtpServer_set_locked(JNIEnv *env, jobject thiz, jboolean locked)
+{
+#ifdef HAVE_ANDROID_OS
+    MtpThread *thread = sThread.get();
+    if (thread)
+        thread->setLocked(locked);
+#endif
+}
+
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod gMethods[] = {
@@ -209,6 +237,7 @@
     {"native_send_object_added",    "(I)V", (void *)android_mtp_MtpServer_send_object_added},
     {"native_send_object_removed",  "(I)V", (void *)android_mtp_MtpServer_send_object_removed},
     {"native_set_ptp_mode",         "(Z)V", (void *)android_mtp_MtpServer_set_ptp_mode},
+    {"native_set_locked",           "(Z)V", (void *)android_mtp_MtpServer_set_locked},
 };
 
 static const char* const kClassPathName = "android/mtp/MtpServer";