diff options
author | Mike Lockwood <lockwood@android.com> | 2010-07-12 18:54:16 -0400 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2010-07-13 20:04:22 -0400 |
commit | be125a50b41f15810145671e0fcbdaf13b363e03 (patch) | |
tree | a0af388e0524314a55da06d48d16928bfc90c1a0 /media/jni | |
parent | 77ad5e64116ba692efea060d528681c069aa439b (diff) | |
download | frameworks_base-be125a50b41f15810145671e0fcbdaf13b363e03.zip frameworks_base-be125a50b41f15810145671e0fcbdaf13b363e03.tar.gz frameworks_base-be125a50b41f15810145671e0fcbdaf13b363e03.tar.bz2 |
MTP: Add support for sending events to the host when objects are added and removed
Change-Id: Ia1d5232b919c644c670ff9ca651eca92b3f9ad42
Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'media/jni')
-rw-r--r-- | media/jni/android_media_MtpServer.cpp | 71 |
1 files changed, 60 insertions, 11 deletions
diff --git a/media/jni/android_media_MtpServer.cpp b/media/jni/android_media_MtpServer.cpp index 17e85f8..0883527 100644 --- a/media/jni/android_media_MtpServer.cpp +++ b/media/jni/android_media_MtpServer.cpp @@ -50,12 +50,14 @@ static bool ExceptionCheck(void* env) class MtpThread : public Thread { private: MtpDatabase* mDatabase; + MtpServer* mServer; String8 mStoragePath; bool mDone; + Mutex mMutex; public: MtpThread(MtpDatabase* database, const char* storagePath) - : mDatabase(database), mStoragePath(storagePath), mDone(false) + : mDatabase(database), mServer(NULL), mStoragePath(storagePath), mDone(false) { } @@ -67,14 +69,19 @@ public: return false; } - MtpServer* server = new MtpServer(fd, mDatabase, AID_SDCARD_RW, 0664, 0775); - server->addStorage(mStoragePath); + mMutex.lock(); + mServer = new MtpServer(fd, mDatabase, AID_SDCARD_RW, 0664, 0775); + mServer->addStorage(mStoragePath); + mMutex.unlock(); - // temporary - LOGD("MtpThread server->run"); - server->run(); + LOGD("MtpThread mServer->run"); + mServer->run(); close(fd); - delete server; + + mMutex.lock(); + delete mServer; + mServer = NULL; + mMutex.unlock(); bool done = mDone; if (done) @@ -84,6 +91,24 @@ public: } void setDone() { mDone = true; } + + void sendObjectAdded(MtpObjectHandle handle) { + mMutex.lock(); + if (mServer) + mServer->sendObjectAdded(handle); + else + LOGE("sendObjectAdded called while disconnected\n"); + mMutex.unlock(); + } + + void sendObjectRemoved(MtpObjectHandle handle) { + mMutex.lock(); + if (mServer) + mServer->sendObjectRemoved(handle); + else + LOGE("sendObjectRemoved called while disconnected\n"); + mMutex.unlock(); + } }; static void @@ -126,14 +151,38 @@ android_media_MtpServer_stop(JNIEnv *env, jobject thiz) } } +static void +android_media_MtpServer_send_object_added(JNIEnv *env, jobject thiz, jint handle) +{ + LOGD("send_object_added %d\n", handle); + MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context); + if (thread) + thread->sendObjectAdded(handle); + else + LOGE("sendObjectAdded called while disconnected\n"); +} + +static void +android_media_MtpServer_send_object_removed(JNIEnv *env, jobject thiz, jint handle) +{ + LOGD("send_object_removed %d\n", handle); + MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context); + if (thread) + thread->sendObjectRemoved(handle); + else + LOGE("sendObjectRemoved called while disconnected\n"); +} + // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { - {"native_setup", "(Landroid/media/MtpDatabase;Ljava/lang/String;)V", + {"native_setup", "(Landroid/media/MtpDatabase;Ljava/lang/String;)V", (void *)android_media_MtpServer_setup}, - {"native_finalize", "()V", (void *)android_media_MtpServer_finalize}, - {"native_start", "()V", (void *)android_media_MtpServer_start}, - {"native_stop", "()V", (void *)android_media_MtpServer_stop}, + {"native_finalize", "()V", (void *)android_media_MtpServer_finalize}, + {"native_start", "()V", (void *)android_media_MtpServer_start}, + {"native_stop", "()V", (void *)android_media_MtpServer_stop}, + {"native_send_object_added", "(I)V", (void *)android_media_MtpServer_send_object_added}, + {"native_send_object_removed", "(I)V", (void *)android_media_MtpServer_send_object_removed}, }; static const char* const kClassPathName = "android/media/MtpServer"; |