Do not allow to move virtual files using conversion.

Change-Id: Ia792bc766272645f7bf8a2683c22895b03df3a1f
This commit is contained in:
Tomasz Mikolajewski
2016-01-21 12:49:24 +09:00
parent 88766a2bd7
commit 87156dc8ae
2 changed files with 24 additions and 3 deletions

View File

@@ -24,6 +24,7 @@ import android.content.Context;
import android.os.RemoteException;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.util.Log;
import com.android.documentsui.R;
import com.android.documentsui.model.DocumentInfo;
@@ -92,6 +93,15 @@ final class MoveJob extends CopyJob {
}
}
// Moving virtual files by bytes is not supported. This is because, it would involve
// conversion, and the source file should not be deleted in such case (as it's a different
// file).
if (src.isVirtualDocument()) {
Log.w(TAG, "Cannot move virtual files byte by byte.");
onFileFailed(src);
return false;
}
// If we couldn't do an optimized copy...we fall back to vanilla byte copy.
boolean copied = byteCopyDocument(src, dest);

View File

@@ -16,6 +16,9 @@
package com.android.documentsui.services;
import static com.google.common.collect.Lists.newArrayList;
import android.net.Uri;
import android.test.suitebuilder.annotation.MediumTest;
import com.android.documentsui.model.DocumentInfo;
@@ -33,15 +36,23 @@ public class MoveJobTest extends AbstractCopyJobTest<MoveJob> {
}
public void testMoveVirtualTypedFile() throws Exception {
runCopyVirtualTypedFileTest();
Uri testFile = mDocs.createVirtualFile(
mSrcRoot, "/virtual.sth", "virtual/mime-type",
FRUITY_BYTES, "application/pdf", "text/html");
createJob(newArrayList(testFile)).run();
mDocs.assertChildCount(mSrcRoot, 0);
mJobListener.waitForFinished();
// Should have failed, source not deleted. Moving by bytes for virtual files
// is not supported.
mDocs.assertChildCount(mDestRoot, 0);
mDocs.assertChildCount(mSrcRoot, 1);
}
public void testMoveVirtualNonTypedFile() throws Exception {
runCopyVirtualNonTypedFileTest();
// should have failed, source not deleted
// Should have failed, source not deleted.
mDocs.assertChildCount(mSrcRoot, 1);
}