OSDN Git Service

Wire removeDocument() to Jobs.
authorTomasz Mikolajewski <mtomasz@google.com>
Tue, 23 Feb 2016 06:12:54 +0000 (15:12 +0900)
committerTomasz Mikolajewski <mtomasz@google.com>
Wed, 24 Feb 2016 03:32:57 +0000 (12:32 +0900)
Bug: 27303034
Change-Id: I6388e2b70b523670210cd8285800b4c187c8f8b8

packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java
packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java
packages/DocumentsUI/src/com/android/documentsui/services/Job.java
packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java

index 34a35ee..844d07a 100644 (file)
@@ -376,7 +376,7 @@ class CopyJob extends Job {
         if (Document.MIME_TYPE_DIR.equals(src.mimeType)) {
             copyDirectoryHelper(src, dstInfo);
         } else {
-            copyFileHelper(src, dstInfo, dstMimeType);
+            copyFileHelper(src, dstInfo, dest, dstMimeType);
         }
     }
 
@@ -439,13 +439,14 @@ class CopyJob extends Job {
     /**
      * Handles copying a single file.
      *
-     * @param srcUriInfo Info of the file to copy from.
-     * @param dstUriInfo Info of the *file* to copy to. Must be created beforehand.
+     * @param src Info of the file to copy from.
+     * @param dest Info of the *file* to copy to. Must be created beforehand.
+     * @param destParent Info of the parent of the destination.
      * @param mimeType Mime type for the target. Can be different than source for virtual files.
      * @throws ResourceException
      */
-    private void copyFileHelper(DocumentInfo src, DocumentInfo dest, String mimeType)
-            throws ResourceException {
+    private void copyFileHelper(DocumentInfo src, DocumentInfo dest, DocumentInfo destParent,
+            String mimeType) throws ResourceException {
         CancellationSignal canceller = new CancellationSignal();
         AssetFileDescriptor srcFileAsAsset = null;
         ParcelFileDescriptor srcFile = null;
@@ -527,8 +528,8 @@ class CopyJob extends Job {
                 if (DEBUG) Log.d(TAG, "Cleaning up failed operation leftovers.");
                 canceller.cancel();
                 try {
-                    DocumentsContract.deleteDocument(getClient(dest), dest.derivedUri);
-                } catch (RemoteException | RuntimeException e) {
+                    deleteDocument(dest, destParent);
+                } catch (ResourceException e) {
                     Log.w(TAG, "Failed to cleanup after copy error: " + src.derivedUri, e);
                 }
             }
index 374d27b..25bca4f 100644 (file)
@@ -84,7 +84,7 @@ final class DeleteJob extends Job {
         for (DocumentInfo doc : mSrcs) {
             if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri);
             try {
-                deleteDocument(doc);
+                deleteDocument(doc, mSrcParent);
             } catch (ResourceException e) {
                 Log.e(TAG, "Failed to delete document @ " + doc.derivedUri);
                 onFileFailed(doc);
index 572c0d7..afb3374 100644 (file)
@@ -184,10 +184,17 @@ abstract public class Job implements Runnable {
         return false;
     }
 
-    final void deleteDocument(DocumentInfo doc) throws ResourceException {
+    final void deleteDocument(DocumentInfo doc, DocumentInfo parent) throws ResourceException {
         try {
-            DocumentsContract.deleteDocument(getClient(doc), doc.derivedUri);
-        } catch (Exception e) {
+            if (doc.isRemoveSupported()) {
+                DocumentsContract.removeDocument(getClient(doc), doc.derivedUri, parent.derivedUri);
+            } else if (doc.isDeleteSupported()) {
+                DocumentsContract.deleteDocument(getClient(doc), doc.derivedUri);
+            } else {
+                throw new ResourceException("Unable to delete source document as the file is " +
+                        "not deletable nor removable: %s.", doc.derivedUri);
+            }
+        } catch (RemoteException | RuntimeException e) {
             throw new ResourceException("Failed to delete file %s due to an exception.",
                     doc.derivedUri, e);
         }
index 8835a9f..b5826a4 100644 (file)
@@ -115,6 +115,9 @@ final class MoveJob extends CopyJob {
 
         // If we couldn't do an optimized copy...we fall back to vanilla byte copy.
         byteCopyDocument(src, dest);
+
+        // Remove the source document.
+        deleteDocument(src, srcParent);
     }
 
     @Override