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

Commit def7b193 authored by Jerry Zhang's avatar Jerry Zhang
Browse files

Add storageId to moveObjects

When moving between different storages, the storageId
must be changed as well.

Bug: 67028892
Test: Move between storages with virtual sdcard.
Change-Id: Ie82aa8d53686bfffb7c26b46a49524a00f2f0214
parent 16fbd3a1
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -466,10 +466,14 @@ public class MtpDatabase implements AutoCloseable {
                    if (parent == 0xFFFFFFFF) {
                        // all objects in root of store
                        parent = 0;
                    }
                        where = STORAGE_PARENT_WHERE;
                        whereArgs = new String[]{Integer.toString(storageID),
                                Integer.toString(parent)};
                    }  else {
                        // If a parent is specified, the storage is redundant
                        where = PARENT_WHERE;
                        whereArgs = new String[]{Integer.toString(parent)};
                    }
                }
            } else {
                // query specific format
@@ -482,11 +486,16 @@ public class MtpDatabase implements AutoCloseable {
                    if (parent == 0xFFFFFFFF) {
                        // all objects in root of store
                        parent = 0;
                    }
                        where = STORAGE_FORMAT_PARENT_WHERE;
                        whereArgs = new String[]{Integer.toString(storageID),
                                Integer.toString(format),
                                Integer.toString(parent)};
                    } else {
                        // If a parent is specified, the storage is redundant
                        where = FORMAT_PARENT_WHERE;
                        whereArgs = new String[]{Integer.toString(format),
                                Integer.toString(parent)};
                    }
                }
            }
        }
@@ -838,7 +847,7 @@ public class MtpDatabase implements AutoCloseable {
        return MtpConstants.RESPONSE_OK;
    }

    private int moveObject(int handle, int newParent, String newPath) {
    private int moveObject(int handle, int newParent, int newStorage, String newPath) {
        String[] whereArgs = new String[] {  Integer.toString(handle) };

        // do not allow renaming any of the special subdirectories
@@ -850,6 +859,7 @@ public class MtpDatabase implements AutoCloseable {
        ContentValues values = new ContentValues();
        values.put(Files.FileColumns.DATA, newPath);
        values.put(Files.FileColumns.PARENT, newParent);
        values.put(Files.FileColumns.STORAGE_ID, newStorage);
        int updated = 0;
        try {
            // note - we are relying on a special case in MediaProvider.update() to update
+4 −4
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ public:
    virtual MtpProperty*            getDevicePropertyDesc(MtpDeviceProperty property);

    virtual MtpResponseCode         moveObject(MtpObjectHandle handle, MtpObjectHandle newParent,
                                            MtpString& newPath);
                                            MtpStorageID newStorage, MtpString& newPath);

    virtual void                    sessionStarted();

@@ -998,11 +998,11 @@ MtpResponseCode MyMtpDatabase::deleteFile(MtpObjectHandle handle) {
}

MtpResponseCode MyMtpDatabase::moveObject(MtpObjectHandle handle, MtpObjectHandle newParent,
        MtpString &newPath) {
        MtpStorageID newStorage, MtpString &newPath) {
    JNIEnv* env = AndroidRuntime::getJNIEnv();
    jstring stringValue = env->NewStringUTF((const char *) newPath);
    MtpResponseCode result = env->CallIntMethod(mDatabase, method_moveObject,
                (jint)handle, (jint)newParent, stringValue);
                (jint)handle, (jint)newParent, (jint) newStorage, stringValue);

    checkAndClearExceptionFromCallback(env, __FUNCTION__);
    env->DeleteLocalRef(stringValue);
@@ -1374,7 +1374,7 @@ int register_android_mtp_MtpDatabase(JNIEnv *env)
        ALOGE("Can't find deleteFile");
        return -1;
    }
    method_moveObject = env->GetMethodID(clazz, "moveObject", "(IILjava/lang/String;)I");
    method_moveObject = env->GetMethodID(clazz, "moveObject", "(IIILjava/lang/String;)I");
    if (method_moveObject == NULL) {
        ALOGE("Can't find moveObject");
        return -1;
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ android_mtp_MtpServer_setup(JNIEnv *env, jobject thiz, jobject javaDatabase, jbo
    const char *deviceInfoDeviceVersionStr = env->GetStringUTFChars(deviceInfoDeviceVersion, NULL);
    const char *deviceInfoSerialNumberStr = env->GetStringUTFChars(deviceInfoSerialNumber, NULL);
    MtpServer* server = new MtpServer(getMtpDatabase(env, javaDatabase),
            usePtp, AID_MEDIA_RW, 0664, 0775,
            usePtp,
            MtpString((deviceInfoManufacturerStr != NULL) ? deviceInfoManufacturerStr : ""),
            MtpString((deviceInfoModelStr != NULL) ? deviceInfoModelStr : ""),
            MtpString((deviceInfoDeviceVersionStr != NULL) ? deviceInfoDeviceVersionStr : ""),