diff options
-rw-r--r-- | include/media/mediascanner.h | 21 | ||||
-rw-r--r-- | media/java/android/media/MediaScanner.java | 16 | ||||
-rw-r--r-- | media/java/android/media/MediaScannerClient.java | 4 | ||||
-rw-r--r-- | media/jni/android_media_MediaScanner.cpp | 16 |
4 files changed, 46 insertions, 11 deletions
diff --git a/include/media/mediascanner.h b/include/media/mediascanner.h index 7749566..cd0b86e 100644 --- a/include/media/mediascanner.h +++ b/include/media/mediascanner.h @@ -59,16 +59,17 @@ private: class MediaScannerClient { public: - MediaScannerClient(); - virtual ~MediaScannerClient(); - void setLocale(const char* locale); - void beginFile(); - bool addStringTag(const char* name, const char* value); - void endFile(); - - virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0; - virtual bool handleStringTag(const char* name, const char* value) = 0; - virtual bool setMimeType(const char* mimeType) = 0; + MediaScannerClient(); + virtual ~MediaScannerClient(); + void setLocale(const char* locale); + void beginFile(); + bool addStringTag(const char* name, const char* value); + void endFile(); + + virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0; + virtual bool handleStringTag(const char* name, const char* value) = 0; + virtual bool setMimeType(const char* mimeType) = 0; + virtual bool addNoMediaFolder(const char* path) = 0; protected: void convertValues(uint32_t encoding); diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 3d5aae3..fcc76ca5 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -825,6 +825,22 @@ public class MediaScanner } } + public void addNoMediaFolder(String path) { + ContentValues values = new ContentValues(); + values.put(MediaStore.Images.ImageColumns.DATA, ""); + String [] pathSpec = new String[] {path + '%'}; + try { + mMediaProvider.update(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values, + MediaStore.Images.ImageColumns.DATA + " LIKE ?", pathSpec); + mMediaProvider.update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values, + MediaStore.Images.ImageColumns.DATA + " LIKE ?", pathSpec); + mMediaProvider.update(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values, + MediaStore.Images.ImageColumns.DATA + " LIKE ?", pathSpec); + } catch (RemoteException e) { + throw new RuntimeException(); + } + } + }; // end of anonymous MediaScannerClient instance private void prescan(String filePath) throws RemoteException { diff --git a/media/java/android/media/MediaScannerClient.java b/media/java/android/media/MediaScannerClient.java index cf1a8da..258c3b4 100644 --- a/media/java/android/media/MediaScannerClient.java +++ b/media/java/android/media/MediaScannerClient.java @@ -25,11 +25,13 @@ public interface MediaScannerClient public void scanFile(String path, String mimeType, long lastModified, long fileSize); + public void addNoMediaFolder(String path); + /** * Called by native code to return metadata extracted from media files. */ public void handleStringTag(String name, String value); - + /** * Called by native code to return mime type extracted from DRM content. */ diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp index 97de486..6a5404e 100644 --- a/media/jni/android_media_MediaScanner.cpp +++ b/media/jni/android_media_MediaScanner.cpp @@ -65,6 +65,8 @@ public: "(Ljava/lang/String;Ljava/lang/String;)V"); mSetMimeTypeMethodID = env->GetMethodID(mediaScannerClientInterface, "setMimeType", "(Ljava/lang/String;)V"); + mAddNoMediaFolderMethodID = env->GetMethodID(mediaScannerClientInterface, "addNoMediaFolder", + "(Ljava/lang/String;)V"); } } @@ -111,12 +113,26 @@ public: return (!mEnv->ExceptionCheck()); } + // returns true if it succeeded, false if an exception occured in the Java code + virtual bool addNoMediaFolder(const char* path) + { + jstring pathStr; + if ((pathStr = mEnv->NewStringUTF(path)) == NULL) return false; + + mEnv->CallVoidMethod(mClient, mAddNoMediaFolderMethodID, pathStr); + + mEnv->DeleteLocalRef(pathStr); + return (!mEnv->ExceptionCheck()); + } + + private: JNIEnv *mEnv; jobject mClient; jmethodID mScanFileMethodID; jmethodID mHandleStringTagMethodID; jmethodID mSetMimeTypeMethodID; + jmethodID mAddNoMediaFolderMethodID; }; |