diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java index 7f6b1e1d3abd6..7a238bd6ce7d6 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java +++ b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java @@ -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); diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java index 7edfcdb8f82f9..69d2db778be92 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java @@ -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 { } 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); }