Merge "Support scanDirectories with JNI callback function"
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index adcd79b..09a04bc 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -421,6 +421,12 @@
}
}
+ private void doScanDirectory(String path) {
+ String[] scanPath;
+ scanPath = new String[] { path };
+ mMediaScanner.scanDirectories(scanPath);
+ }
+
private Cursor createObjectQuery(int storageID, int format, int parent) throws RemoteException {
String where;
String[] whereArgs;
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 0c946ba..08bf4e1 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -55,6 +55,7 @@
static jmethodID method_beginSendObject;
static jmethodID method_endSendObject;
+static jmethodID method_doScanDirectory;
static jmethodID method_getObjectList;
static jmethodID method_getNumObjects;
static jmethodID method_getSupportedPlaybackFormats;
@@ -119,6 +120,8 @@
MtpObjectFormat format,
bool succeeded);
+ virtual void doScanDirectory(const char* path);
+
virtual MtpObjectHandleList* getObjectList(MtpStorageID storageID,
MtpObjectFormat format,
MtpObjectHandle parent);
@@ -265,6 +268,16 @@
checkAndClearExceptionFromCallback(env, __FUNCTION__);
}
+void MyMtpDatabase::doScanDirectory(const char* path) {
+ JNIEnv* env = AndroidRuntime::getJNIEnv();
+ jstring pathStr = env->NewStringUTF(path);
+ env->CallVoidMethod(mDatabase, method_doScanDirectory, pathStr);
+
+ if (pathStr)
+ env->DeleteLocalRef(pathStr);
+ checkAndClearExceptionFromCallback(env, __FUNCTION__);
+}
+
MtpObjectHandleList* MyMtpDatabase::getObjectList(MtpStorageID storageID,
MtpObjectFormat format,
MtpObjectHandle parent) {
@@ -1308,6 +1321,11 @@
ALOGE("Can't find endSendObject");
return -1;
}
+ method_doScanDirectory = env->GetMethodID(clazz, "doScanDirectory", "(Ljava/lang/String;)V");
+ if (method_doScanDirectory == NULL) {
+ ALOGE("Can't find doScanDirectory");
+ return -1;
+ }
method_getObjectList = env->GetMethodID(clazz, "getObjectList", "(III)[I");
if (method_getObjectList == NULL) {
ALOGE("Can't find getObjectList");