summaryrefslogtreecommitdiff
path: root/core/java/android/content/ContentResolver.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2020-01-07 22:06:37 -0700
committerJeff Sharkey <jsharkey@android.com>2020-01-08 11:44:28 -0700
commit197fe1f90fd5b77185bedb6fe2fbdf39a0dfaf5a (patch)
tree089ed4fc14975539ed69b1c0aa8e46b7c62af8ff /core/java/android/content/ContentResolver.java
parentcb8823d980b8e537bc338424b23f3478a64b334b (diff)
Final push to build against SDK.
The bulk of the work needed to get MediaProvider building against the "system_current" SDK surface has been slowly merged over the last few months, and this change makes the last few adjustments. This adds a new StorageVolumeCallback which is simpler version of StorageEventListener that simply delivers the changed StorageVolume. Move DownloadManager logic into a onMediaStoreDownloadsDeleted() method which hides the implementation details of how the OS connects with that implementation. Make local copies of some ExifInterface parsing logic; they could be added to the androidx version in an unbundled release. Make a local copy of RedactingFileDescriptor, since it's only needed for the next few weeks until FUSE is globally enabled. Bug: 137890034 Test: atest --test-mapping packages/providers/MediaProvider Change-Id: Ib416eb8724781bdd234c8b7d728dee8b695ad6ac
Diffstat (limited to 'core/java/android/content/ContentResolver.java')
-rw-r--r--core/java/android/content/ContentResolver.java36
1 files changed, 34 insertions, 2 deletions
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 1d3c6505f677..592190e0ec11 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -3851,15 +3851,47 @@ public abstract class ContentResolver implements ContentInterface {
}
}
+ /**
+ * Decode a path generated by {@link #encodeToFile(Uri)} back into
+ * the original {@link Uri}.
+ * <p>
+ * This is used to offer a way to intercept filesystem calls in
+ * {@link ContentProvider} unaware code and redirect them to a
+ * {@link ContentProvider} when they attempt to use {@code _DATA} columns
+ * that are otherwise deprecated.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static @NonNull Uri decodeFromFile(@NonNull File file) {
+ return translateDeprecatedDataPath(file.getAbsolutePath());
+ }
+
+ /**
+ * Encode a {@link Uri} into an opaque filesystem path which can then be
+ * resurrected by {@link #decodeFromFile(File)}.
+ * <p>
+ * This is used to offer a way to intercept filesystem calls in
+ * {@link ContentProvider} unaware code and redirect them to a
+ * {@link ContentProvider} when they attempt to use {@code _DATA} columns
+ * that are otherwise deprecated.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static @NonNull File encodeToFile(@NonNull Uri uri) {
+ return new File(translateDeprecatedDataPath(uri));
+ }
+
/** {@hide} */
- public static Uri translateDeprecatedDataPath(String path) {
+ public static @NonNull Uri translateDeprecatedDataPath(@NonNull String path) {
final String ssp = "//" + path.substring(DEPRECATE_DATA_PREFIX.length());
return Uri.parse(new Uri.Builder().scheme(SCHEME_CONTENT)
.encodedOpaquePart(ssp).build().toString());
}
/** {@hide} */
- public static String translateDeprecatedDataPath(Uri uri) {
+ public static @NonNull String translateDeprecatedDataPath(@NonNull Uri uri) {
return DEPRECATE_DATA_PREFIX + uri.getEncodedSchemeSpecificPart().substring(2);
}
}