From 87156dc8aebbe8a186569db7e660a981beab830c Mon Sep 17 00:00:00 2001 From: Tomasz Mikolajewski Date: Thu, 21 Jan 2016 12:49:24 +0900 Subject: [PATCH] Do not allow to move virtual files using conversion. Change-Id: Ia792bc766272645f7bf8a2683c22895b03df3a1f --- .../src/com/android/documentsui/services/MoveJob.java | 10 ++++++++++ .../com/android/documentsui/services/MoveJobTest.java | 17 ++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java index 7f6b1e1d3abd..7a238bd6ce7d 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 7edfcdb8f82f..69d2db778be9 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); } -- 2.11.0