summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2019-02-15 15:53:47 -0700
committer Jeff Sharkey <jsharkey@google.com> 2019-02-18 16:38:15 +0000
commit2c0b485dd056da2d41841bb58488942ea413739d (patch)
tree05458cccd8d9554640e54d86d1720adbbe47b24d
parent438f2cee937826295c3104e8a87836dd2a437605 (diff)
Replace ContentInterface with wrapping.
After much discussion, we can't safely introduce ContentInterface, so instead offer ContentResolver.wrap() methods. Bug: 120974438 Test: manual Exempted-From-Owner-Approval: mechanical API refactoring Change-Id: I71c7c997383dfaff6752e2a83967d456ab3a2aa1
-rw-r--r--src/com/android/documentsui/CreateDirectoryFragment.java4
-rw-r--r--src/com/android/documentsui/DocumentsAccess.java7
-rw-r--r--src/com/android/documentsui/Metrics.java4
-rw-r--r--src/com/android/documentsui/ThumbnailLoader.java5
-rw-r--r--src/com/android/documentsui/files/ActionHandler.java4
-rw-r--r--src/com/android/documentsui/services/CopyJob.java7
-rw-r--r--src/com/android/documentsui/services/Job.java7
-rw-r--r--src/com/android/documentsui/services/MoveJob.java4
-rw-r--r--src/com/android/documentsui/sidebar/EjectRootTask.java4
-rw-r--r--tests/common/com/android/documentsui/DocumentsProviderHelper.java3
-rw-r--r--tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java4
11 files changed, 38 insertions, 15 deletions
diff --git a/src/com/android/documentsui/CreateDirectoryFragment.java b/src/com/android/documentsui/CreateDirectoryFragment.java
index 606678d89..0c28f543d 100644
--- a/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -16,6 +16,8 @@
package com.android.documentsui;
+import static android.content.ContentResolver.wrap;
+
import static com.android.documentsui.base.SharedMinimal.TAG;
import android.app.Dialog;
@@ -147,7 +149,7 @@ public class CreateDirectoryFragment extends DialogFragment {
client = DocumentsApplication.acquireUnstableProviderOrThrow(
resolver, mCwd.derivedUri.getAuthority());
final Uri childUri = DocumentsContract.createDocument(
- client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
+ wrap(client), mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
DocumentInfo doc = DocumentInfo.fromUri(resolver, childUri);
return doc.isDirectory() ? doc : null;
} catch (Exception e) {
diff --git a/src/com/android/documentsui/DocumentsAccess.java b/src/com/android/documentsui/DocumentsAccess.java
index a0f3b2ddd..3028f1b67 100644
--- a/src/com/android/documentsui/DocumentsAccess.java
+++ b/src/com/android/documentsui/DocumentsAccess.java
@@ -17,6 +17,9 @@
package com.android.documentsui;
import androidx.annotation.Nullable;
+
+import static android.content.ContentResolver.wrap;
+
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
@@ -124,7 +127,7 @@ public interface DocumentsAccess {
final ContentResolver resolver = mContext.getContentResolver();
try (final ContentProviderClient client = DocumentsApplication
.acquireUnstableProviderOrThrow(resolver, docUri.getAuthority())) {
- return DocumentsContract.findDocumentPath(client, docUri);
+ return DocumentsContract.findDocumentPath(wrap(client), docUri);
}
}
@@ -134,7 +137,7 @@ public interface DocumentsAccess {
try (ContentProviderClient client = DocumentsApplication.acquireUnstableProviderOrThrow(
resolver, parentDoc.derivedUri.getAuthority())) {
return DocumentsContract.createDocument(
- client, parentDoc.derivedUri, mimeType, displayName);
+ wrap(client), parentDoc.derivedUri, mimeType, displayName);
} catch (Exception e) {
Log.w(TAG, "Failed to create document", e);
return null;
diff --git a/src/com/android/documentsui/Metrics.java b/src/com/android/documentsui/Metrics.java
index d3a766375..5737fcbfc 100644
--- a/src/com/android/documentsui/Metrics.java
+++ b/src/com/android/documentsui/Metrics.java
@@ -16,6 +16,8 @@
package com.android.documentsui;
+import static android.content.ContentResolver.wrap;
+
import static com.android.documentsui.DocumentsApplication.acquireUnstableProviderOrThrow;
import androidx.annotation.Nullable;
@@ -291,7 +293,7 @@ public final class Metrics {
boolean isInternal;
try (ContentProviderClient client = acquireUnstableProviderOrThrow(
context.getContentResolver(), Providers.AUTHORITY_STORAGE)) {
- final Path path = DocumentsContract.findDocumentPath(client, docUri);
+ final Path path = DocumentsContract.findDocumentPath(wrap(client), docUri);
final ProvidersAccess providers = DocumentsApplication.getProvidersCache(context);
final RootInfo root = providers.getRootOneshot(
Providers.AUTHORITY_STORAGE, path.getRootId());
diff --git a/src/com/android/documentsui/ThumbnailLoader.java b/src/com/android/documentsui/ThumbnailLoader.java
index 4a50bf1e4..4b9351377 100644
--- a/src/com/android/documentsui/ThumbnailLoader.java
+++ b/src/com/android/documentsui/ThumbnailLoader.java
@@ -15,6 +15,8 @@
*/
package com.android.documentsui;
+import static android.content.ContentResolver.wrap;
+
import static com.android.documentsui.base.SharedMinimal.VERBOSE;
import android.content.ContentProviderClient;
@@ -104,7 +106,8 @@ public final class ThumbnailLoader extends AsyncTask<Uri, Void, Bitmap> implemen
try {
client = DocumentsApplication.acquireUnstableProviderOrThrow(
resolver, mUri.getAuthority());
- result = DocumentsContract.getDocumentThumbnail(client, mUri, mThumbSize, mSignal);
+ result = DocumentsContract.getDocumentThumbnail(wrap(client),
+ mUri, mThumbSize, mSignal);
if (result != null && mAddToCache) {
final ThumbnailCache cache = DocumentsApplication.getThumbnailCache(context);
cache.putThumbnail(mUri, mThumbSize, result, mLastModified);
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index dc6837b26..3a94d4bc1 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -16,6 +16,8 @@
package com.android.documentsui.files;
+import static android.content.ContentResolver.wrap;
+
import static com.android.documentsui.base.SharedMinimal.DEBUG;
import android.content.ActivityNotFoundException;
@@ -174,7 +176,7 @@ public class ActionHandler<T extends FragmentActivity & Addons> extends Abstract
client = DocumentsApplication.acquireUnstableProviderOrThrow(
resolver, document.derivedUri.getAuthority());
Uri newUri = DocumentsContract.renameDocument(
- client, document.derivedUri, name);
+ wrap(client), document.derivedUri, name);
return DocumentInfo.fromUri(resolver, newUri);
} catch (Exception e) {
Log.w(TAG, "Failed to rename file", e);
diff --git a/src/com/android/documentsui/services/CopyJob.java b/src/com/android/documentsui/services/CopyJob.java
index 605380085..47f926278 100644
--- a/src/com/android/documentsui/services/CopyJob.java
+++ b/src/com/android/documentsui/services/CopyJob.java
@@ -16,6 +16,7 @@
package com.android.documentsui.services;
+import static android.content.ContentResolver.wrap;
import static android.provider.DocumentsContract.buildChildDocumentsUri;
import static android.provider.DocumentsContract.buildDocumentUri;
import static android.provider.DocumentsContract.getDocumentId;
@@ -322,7 +323,7 @@ class CopyJob extends ResolvedResourcesJob {
if (src.authority.equals(dstDirInfo.authority)) {
if ((src.flags & Document.FLAG_SUPPORTS_COPY) != 0) {
try {
- if (DocumentsContract.copyDocument(getClient(src), src.derivedUri,
+ if (DocumentsContract.copyDocument(wrap(getClient(src)), src.derivedUri,
dstDirInfo.derivedUri) != null) {
Metrics.logFileOperated(operationType, MetricConsts.OPMODE_PROVIDER);
return;
@@ -389,7 +390,7 @@ class CopyJob extends ResolvedResourcesJob {
Uri dstUri = null;
try {
dstUri = DocumentsContract.createDocument(
- getClient(dest), dest.derivedUri, dstMimeType, dstDisplayName);
+ wrap(getClient(dest)), dest.derivedUri, dstMimeType, dstDisplayName);
} catch (FileNotFoundException | RemoteException | RuntimeException e) {
Metrics.logFileOperationFailure(
appContext, MetricConsts.SUBFILEOP_CREATE_DOCUMENT, dest.derivedUri);
@@ -780,7 +781,7 @@ class CopyJob extends ResolvedResourcesJob {
throws ResourceException {
if (parent.isDirectory() && doc.authority.equals(parent.authority)) {
try {
- return isChildDocument(getClient(doc), doc.derivedUri, parent.derivedUri);
+ return isChildDocument(wrap(getClient(doc)), doc.derivedUri, parent.derivedUri);
} catch (FileNotFoundException | RemoteException | RuntimeException e) {
throw new ResourceException(
"Failed to check if %s is a child of %s due to an exception.",
diff --git a/src/com/android/documentsui/services/Job.java b/src/com/android/documentsui/services/Job.java
index 1e01410fc..92a6aff69 100644
--- a/src/com/android/documentsui/services/Job.java
+++ b/src/com/android/documentsui/services/Job.java
@@ -16,6 +16,8 @@
package com.android.documentsui.services;
+import static android.content.ContentResolver.wrap;
+
import static com.android.documentsui.DocumentsApplication.acquireUnstableProviderOrThrow;
import static com.android.documentsui.services.FileOperationService.EXTRA_CANCEL;
import static com.android.documentsui.services.FileOperationService.EXTRA_DIALOG_TYPE;
@@ -258,9 +260,10 @@ abstract public class Job implements Runnable {
throws ResourceException {
try {
if (parent != null && doc.isRemoveSupported()) {
- DocumentsContract.removeDocument(getClient(doc), doc.derivedUri, parent.derivedUri);
+ DocumentsContract.removeDocument(wrap(getClient(doc)), doc.derivedUri,
+ parent.derivedUri);
} else if (doc.isDeleteSupported()) {
- DocumentsContract.deleteDocument(getClient(doc), doc.derivedUri);
+ DocumentsContract.deleteDocument(wrap(getClient(doc)), doc.derivedUri);
} else {
throw new ResourceException("Unable to delete source document. "
+ "File is not deletable or removable: %s.", doc.derivedUri);
diff --git a/src/com/android/documentsui/services/MoveJob.java b/src/com/android/documentsui/services/MoveJob.java
index 585cfe0ce..36887e02c 100644
--- a/src/com/android/documentsui/services/MoveJob.java
+++ b/src/com/android/documentsui/services/MoveJob.java
@@ -16,6 +16,8 @@
package com.android.documentsui.services;
+import static android.content.ContentResolver.wrap;
+
import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.services.FileOperationService.OPERATION_MOVE;
@@ -147,7 +149,7 @@ final class MoveJob extends CopyJob {
if (src.authority.equals(dest.authority) && (srcParent != null || mSrcParent != null)) {
if ((src.flags & Document.FLAG_SUPPORTS_MOVE) != 0) {
try {
- if (DocumentsContract.moveDocument(getClient(src), src.derivedUri,
+ if (DocumentsContract.moveDocument(wrap(getClient(src)), src.derivedUri,
srcParent != null ? srcParent.derivedUri : mSrcParent.derivedUri,
dest.derivedUri) != null) {
Metrics.logFileOperated(operationType, MetricConsts.OPMODE_PROVIDER);
diff --git a/src/com/android/documentsui/sidebar/EjectRootTask.java b/src/com/android/documentsui/sidebar/EjectRootTask.java
index f7aecf5b5..209fc44af 100644
--- a/src/com/android/documentsui/sidebar/EjectRootTask.java
+++ b/src/com/android/documentsui/sidebar/EjectRootTask.java
@@ -16,6 +16,8 @@
package com.android.documentsui.sidebar;
+import static android.content.ContentResolver.wrap;
+
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.net.Uri;
@@ -57,7 +59,7 @@ public final class EjectRootTask extends AsyncTask<Void, Void, Boolean> {
try {
client = DocumentsApplication.acquireUnstableProviderOrThrow(
mResolver, mAuthority);
- DocumentsContract.ejectRoot(client, rootUri);
+ DocumentsContract.ejectRoot(wrap(client), rootUri);
return true;
} catch (IllegalStateException e) {
Log.w(TAG, "Failed to eject root.", e);
diff --git a/tests/common/com/android/documentsui/DocumentsProviderHelper.java b/tests/common/com/android/documentsui/DocumentsProviderHelper.java
index fdc71888c..e7a590e95 100644
--- a/tests/common/com/android/documentsui/DocumentsProviderHelper.java
+++ b/tests/common/com/android/documentsui/DocumentsProviderHelper.java
@@ -16,6 +16,7 @@
package com.android.documentsui;
+import static android.content.ContentResolver.wrap;
import static android.provider.DocumentsContract.buildChildDocumentsUri;
import static android.provider.DocumentsContract.buildDocumentUri;
import static android.provider.DocumentsContract.buildRootsUri;
@@ -92,7 +93,7 @@ public class DocumentsProviderHelper {
throw new IllegalArgumentException("Name and mimetype probably interposed.");
}
try {
- Uri uri = DocumentsContract.createDocument(mClient, parentUri, mimeType, name);
+ Uri uri = DocumentsContract.createDocument(wrap(mClient), parentUri, mimeType, name);
return uri;
} catch (FileNotFoundException e) {
throw new RuntimeException("Couldn't create document: " + name + " with mimetype "
diff --git a/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java b/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java
index ae3079c3e..484342525 100644
--- a/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java
+++ b/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java
@@ -16,6 +16,8 @@
package com.android.documentsui.archives;
+import static android.content.ContentResolver.wrap;
+
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertEquals;
@@ -288,7 +290,7 @@ public class ArchivesProviderTest {
+ "com.android.documentsui.archives.resourcesprovider%2F"
+ "document%2F" + documentId + "%23268435456%23%2Ffreddy.jpg");
- Bundle metadata = DocumentsContract.getDocumentMetadata(client, archivedImageUri);
+ Bundle metadata = DocumentsContract.getDocumentMetadata(wrap(client), archivedImageUri);
assertNotNull(metadata);
Bundle exif = metadata.getBundle(DocumentsContract.METADATA_EXIF);
assertNotNull(exif);