From a1c9180461a819f0515ec92a72d8ebfe462d977f Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Tue, 18 Jan 2011 20:11:29 -0800 Subject: [PATCH 1/2] MTP: Fix problem with MTP starting up on the first try. BUG: 3361230 Change-Id: Ibc2e8adf24a14ea18385b306e786a77983ff8f5b Signed-off-by: Mike Lockwood --- media/jni/android_mtp_MtpServer.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp index 241f18a0d2e8f..4693ec5c768d1 100644 --- a/media/jni/android_mtp_MtpServer.cpp +++ b/media/jni/android_mtp_MtpServer.cpp @@ -62,6 +62,7 @@ private: String8 mStoragePath; uint64_t mReserveSpace; jobject mJavaServer; + bool mDone; int mFd; public: @@ -72,6 +73,7 @@ public: mStoragePath(storagePath), mReserveSpace(reserveSpace), mJavaServer(javaServer), + mDone(false), mFd(-1) { } @@ -104,12 +106,17 @@ public: mServer = new MtpServer(mFd, mDatabase, AID_MEDIA_RW, 0664, 0775); mServer->addStorage(mStoragePath, mReserveSpace); - sMutex.unlock(); - LOGD("MtpThread mServer->run"); - mServer->run(); + while (!mDone) { + sMutex.unlock(); + + LOGD("MtpThread mServer->run"); + mServer->run(); + sleep(1); + + sMutex.lock(); + } - sMutex.lock(); close(mFd); mFd = -1; delete mServer; @@ -124,6 +131,12 @@ public: return false; } + void stop() { + sMutex.lock(); + mDone = true; + sMutex.unlock(); + } + void sendObjectAdded(MtpObjectHandle handle) { sMutex.lock(); if (mServer) @@ -181,6 +194,9 @@ android_mtp_MtpServer_stop(JNIEnv *env, jobject thiz) { #ifdef HAVE_ANDROID_OS LOGD("stop\n"); + MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context); + if (thread) + thread->stop(); #endif } @@ -212,7 +228,7 @@ android_mtp_MtpServer_set_ptp_mode(JNIEnv *env, jobject thiz, jboolean usePtp) MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context); if (thread) thread->setPtpMode(usePtp); - #endif +#endif } // ---------------------------------------------------------------------------- From 242d0cdc1ad6c48faca403ea352bde73138443b5 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Tue, 18 Jan 2011 20:24:01 -0800 Subject: [PATCH 2/2] MediaScanner: Make sure name field is set for file based playlists Change-Id: I7df1ff783d815d6021ec2432467ba56cb3f3ad1b Signed-off-by: Mike Lockwood --- media/java/android/media/MediaScanner.java | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 10c9a9a99f5ac..33c63856ce13e 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -1462,22 +1462,29 @@ public class MediaScanner if (lastSlash < 0) throw new IllegalArgumentException("bad path " + path); Uri uri, membersUri; long rowId = entry.mRowId; - if (rowId == 0) { - // Create a new playlist - int lastDot = path.lastIndexOf('.'); - String name = (lastDot < 0 ? path.substring(lastSlash + 1) : path.substring(lastSlash + 1, lastDot)); - values.put(MediaStore.Audio.Playlists.NAME, name); + // make sure we have a name + String name = values.getAsString(MediaStore.Audio.Playlists.NAME); + if (name == null) { + name = values.getAsString(MediaStore.MediaColumns.TITLE); + if (name == null) { + // extract name from file name + int lastDot = path.lastIndexOf('.'); + name = (lastDot < 0 ? path.substring(lastSlash + 1) + : path.substring(lastSlash + 1, lastDot)); + } + } + + values.put(MediaStore.Audio.Playlists.NAME, name); + values.put(MediaStore.Audio.Playlists.DATE_MODIFIED, entry.mLastModified); + + if (rowId == 0) { values.put(MediaStore.Audio.Playlists.DATA, path); - values.put(MediaStore.Audio.Playlists.DATE_MODIFIED, entry.mLastModified); uri = mMediaProvider.insert(mPlaylistsUri, values); rowId = ContentUris.parseId(uri); membersUri = Uri.withAppendedPath(uri, Playlists.Members.CONTENT_DIRECTORY); } else { uri = ContentUris.withAppendedId(mPlaylistsUri, rowId); - - // update lastModified value of existing playlist - values.put(MediaStore.Audio.Playlists.DATE_MODIFIED, entry.mLastModified); mMediaProvider.update(uri, values, null, null); // delete members of existing playlist