Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4aa69fd authored by kyle_tso's avatar kyle_tso
Browse files

Support scanDirectories with JNI callback function



MtpServer needs this function to update the database for directory
copy operation.

Test: Call this function from MtpServer and database is updated in
directory copy scenario.

Change-Id: I9b316f4dbf7f35922292c33ab02f9efebc867aa8
Signed-off-by: default avatarkyle_tso <kyle_tso@htc.com>
parent e887e2b9
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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 {
    private Cursor createObjectQuery(int storageID, int format, int parent) throws RemoteException {
        String where;
        String where;
        String[] whereArgs;
        String[] whereArgs;
+18 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,7 @@ using namespace android;


static jmethodID method_beginSendObject;
static jmethodID method_beginSendObject;
static jmethodID method_endSendObject;
static jmethodID method_endSendObject;
static jmethodID method_doScanDirectory;
static jmethodID method_getObjectList;
static jmethodID method_getObjectList;
static jmethodID method_getNumObjects;
static jmethodID method_getNumObjects;
static jmethodID method_getSupportedPlaybackFormats;
static jmethodID method_getSupportedPlaybackFormats;
@@ -119,6 +120,8 @@ public:
                                            MtpObjectFormat format,
                                            MtpObjectFormat format,
                                            bool succeeded);
                                            bool succeeded);


    virtual void                    doScanDirectory(const char* path);

    virtual MtpObjectHandleList*    getObjectList(MtpStorageID storageID,
    virtual MtpObjectHandleList*    getObjectList(MtpStorageID storageID,
                                    MtpObjectFormat format,
                                    MtpObjectFormat format,
                                    MtpObjectHandle parent);
                                    MtpObjectHandle parent);
@@ -265,6 +268,16 @@ void MyMtpDatabase::endSendObject(const char* path, MtpObjectHandle handle,
    checkAndClearExceptionFromCallback(env, __FUNCTION__);
    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,
MtpObjectHandleList* MyMtpDatabase::getObjectList(MtpStorageID storageID,
                                                  MtpObjectFormat format,
                                                  MtpObjectFormat format,
                                                  MtpObjectHandle parent) {
                                                  MtpObjectHandle parent) {
@@ -1308,6 +1321,11 @@ int register_android_mtp_MtpDatabase(JNIEnv *env)
        ALOGE("Can't find endSendObject");
        ALOGE("Can't find endSendObject");
        return -1;
        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");
    method_getObjectList = env->GetMethodID(clazz, "getObjectList", "(III)[I");
    if (method_getObjectList == NULL) {
    if (method_getObjectList == NULL) {
        ALOGE("Can't find getObjectList");
        ALOGE("Can't find getObjectList");