MediaScanner: reimplement the ".nomedia" feature for hiding files from the media provider

Previously we ignored any files and directories that had name started with '.'
and ignored any directories that contained a ".nomedia" file.
Now to support transferring any file via MTP, we now add these previously ignored files
to the media database, but will not mark them as audio, video, image or playlist files.
That way they will be included in the files table but will be hidden from the
audio, video, images and playlist views that are used by apps like Music and Gallery.

Bug: 3405327

Change-Id: I2d7285bd32e06c1a5c4ef6a8a15f8f8b2c33b39b
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
index a3dd136..9151799 100644
--- a/media/jni/android_media_MediaScanner.cpp
+++ b/media/jni/android_media_MediaScanner.cpp
@@ -67,7 +67,7 @@
             mScanFileMethodID = env->GetMethodID(
                                     mediaScannerClientInterface,
                                     "scanFile",
-                                    "(Ljava/lang/String;JJZ)V");
+                                    "(Ljava/lang/String;JJZZ)V");
 
             mHandleStringTagMethodID = env->GetMethodID(
                                     mediaScannerClientInterface,
@@ -78,11 +78,6 @@
                                     mediaScannerClientInterface,
                                     "setMimeType",
                                     "(Ljava/lang/String;)V");
-
-            mAddNoMediaFolderMethodID = env->GetMethodID(
-                                    mediaScannerClientInterface,
-                                    "addNoMediaFolder",
-                                    "(Ljava/lang/String;)V");
         }
     }
 
@@ -95,7 +90,7 @@
     // Returns true if it succeeded, false if an exception occured
     // in the Java code
     virtual bool scanFile(const char* path, long long lastModified,
-            long long fileSize, bool isDirectory)
+            long long fileSize, bool isDirectory, bool noMedia)
     {
         LOGV("scanFile: path(%s), time(%lld), size(%lld) and isDir(%d)",
             path, lastModified, fileSize, isDirectory);
@@ -106,7 +101,7 @@
         }
 
         mEnv->CallVoidMethod(mClient, mScanFileMethodID, pathStr, lastModified,
-                fileSize, isDirectory);
+                fileSize, isDirectory, noMedia);
 
         mEnv->DeleteLocalRef(pathStr);
         return (!mEnv->ExceptionCheck());
@@ -149,30 +144,12 @@
         return (!mEnv->ExceptionCheck());
     }
 
-    // Returns true if it succeeded, false if an exception occured
-    // in the Java code
-    virtual bool addNoMediaFolder(const char* path)
-    {
-        LOGV("addNoMediaFolder: path(%s)", 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;
 };