Merge "Support scanDirectories with JNI callback function"
This commit is contained in:
@@ -421,6 +421,12 @@ public class MtpDatabase implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -55,6 +55,7 @@ using namespace android;
|
||||
|
||||
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 @@ public:
|
||||
MtpObjectFormat format,
|
||||
bool succeeded);
|
||||
|
||||
virtual void doScanDirectory(const char* path);
|
||||
|
||||
virtual MtpObjectHandleList* getObjectList(MtpStorageID storageID,
|
||||
MtpObjectFormat format,
|
||||
MtpObjectHandle parent);
|
||||
@@ -265,6 +268,16 @@ void MyMtpDatabase::endSendObject(const char* path, MtpObjectHandle handle,
|
||||
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 @@ int register_android_mtp_MtpDatabase(JNIEnv *env)
|
||||
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");
|
||||
|
||||
Reference in New Issue
Block a user