summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java15
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java2
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/services/Job.java13
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java3
4 files changed, 22 insertions, 11 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java
index 34a35ee44897..844d07ad1721 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java
@@ -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);
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java
index 374d27b76d20..25bca4f3df25 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java
@@ -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);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/Job.java b/packages/DocumentsUI/src/com/android/documentsui/services/Job.java
index 572c0d7916c5..afb3374699c9 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/services/Job.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/services/Job.java
@@ -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);
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
index 8835a9f16b08..b5826a46ea84 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
@@ -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