OSDN Git Service

Do not allow to move virtual files using conversion.
authorTomasz Mikolajewski <mtomasz@google.com>
Thu, 21 Jan 2016 03:49:24 +0000 (12:49 +0900)
committerTomasz Mikolajewski <mtomasz@google.com>
Fri, 22 Jan 2016 04:50:13 +0000 (13:50 +0900)
Change-Id: Ia792bc766272645f7bf8a2683c22895b03df3a1f

packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java

index 7f6b1e1..7a238bd 100644 (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);
 
index 7edfcdb..69d2db7 100644 (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);
     }