summaryrefslogtreecommitdiff
path: root/core/java/android/provider/DocumentsProvider.java
diff options
context:
space:
mode:
authorGarfield Tan <xutan@google.com>2017-03-22 12:01:14 -0700
committerGarfield Tan <xutan@google.com>2017-03-23 16:41:24 -0700
commit8787703ae057b6df3691036d667fab0859be92d9 (patch)
treeaa4fb7c583782f25f71a58cb9cc9f687658b5ab7 /core/java/android/provider/DocumentsProvider.java
parentdb1b3cfb2fd5bde20e943d01c521747cb43a8bdd (diff)
Unhide FLAG_SUPPORT_EJECT and related methods.
Test: Builds and CTS tests pass. Some manual tests as well. Bug: 36483910 Change-Id: Idd9b1c9d9573222ee12127044ff11b9ab2487f0a
Diffstat (limited to 'core/java/android/provider/DocumentsProvider.java')
-rw-r--r--core/java/android/provider/DocumentsProvider.java19
1 files changed, 11 insertions, 8 deletions
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 620d33a5e915..24c9a6a560f0 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -629,9 +629,14 @@ public abstract class DocumentsProvider extends ContentProvider {
throw new UnsupportedOperationException("Search not supported");
}
- /** {@hide} */
+ /**
+ * Ejects the root. Throws {@link IllegalStateException} if ejection failed.
+ *
+ * @param rootId the root to be ejected.
+ * @see Root#FLAG_SUPPORTS_EJECT
+ */
@SuppressWarnings("unused")
- public boolean ejectRoot(String rootId) {
+ public void ejectRoot(String rootId) {
throw new UnsupportedOperationException("Eject not supported");
}
@@ -963,14 +968,12 @@ public abstract class DocumentsProvider extends ContentProvider {
if (METHOD_EJECT_ROOT.equals(method)) {
// Given that certain system apps can hold MOUNT_UNMOUNT permission, but only apps
// signed with platform signature can hold MANAGE_DOCUMENTS, we are going to check for
- // MANAGE_DOCUMENTS here instead
- getContext().enforceCallingPermission(
- android.Manifest.permission.MANAGE_DOCUMENTS, null);
+ // MANAGE_DOCUMENTS or associated URI permission here instead
final Uri rootUri = extras.getParcelable(DocumentsContract.EXTRA_URI);
- final String rootId = DocumentsContract.getRootId(rootUri);
- final boolean ejected = ejectRoot(rootId);
+ enforceWritePermissionInner(rootUri, getCallingPackage(), null);
- out.putBoolean(DocumentsContract.EXTRA_RESULT, ejected);
+ final String rootId = DocumentsContract.getRootId(rootUri);
+ ejectRoot(rootId);
return out;
}