summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-08-15 04:42:15 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-08-15 04:42:15 +0000
commit495202ca471613cefd62b793ef69e13bfccc85df (patch)
treeb92ed5095ebaafb59e9005bec05d935818c1a167
parente02e7e3fe339d2a92d81b1a2b2f14d78757f4dba (diff)
parent0f3bf10aba2a76e026d11165f072ad998a7feaa0 (diff)
downloadMediaProvider-android10-mainline-a-release.tar.gz
Snap for 5803298 from 0f3bf10aba2a76e026d11165f072ad998a7feaa0 to qt-aml-releaseandroid-mainline-10.0.0_r2android10-mainline-a-release
Change-Id: If1709e153db93a4c6b4eecf7a9b07bb4064b5798
-rw-r--r--res/values-fr/strings.xml2
-rw-r--r--src/com/android/providers/media/MediaProvider.java37
2 files changed, 28 insertions, 11 deletions
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c73e53a6f..7aed3cc77 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -21,7 +21,7 @@
<string name="app_label" msgid="9035307001052716210">"Stockage multimédia"</string>
<string name="artist_label" msgid="8105600993099120273">"Artiste"</string>
<string name="ringtone_default" msgid="1744846699922263043">"Sonnerie par défaut"</string>
- <string name="notification_sound_default" msgid="6541609166469990135">"Son notif. par défaut"</string>
+ <string name="notification_sound_default" msgid="6541609166469990135">"Son des notifications par défaut"</string>
<string name="alarm_sound_default" msgid="5488847775252870314">"Son de l\'alarme par défaut"</string>
<string name="root_images" msgid="5861633549189045666">"Images"</string>
<string name="root_videos" msgid="8792703517064649453">"Vidéos"</string>
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index bbfc212c6..89289998e 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -5366,7 +5366,8 @@ public class MediaProvider extends ContentProvider {
// Figure out if we need to redact contents
final boolean redactionNeeded = callerIsOwner ? false : isRedactionNeeded(uri);
- final long[] redactionRanges = redactionNeeded ? getRedactionRanges(file) : EmptyArray.LONG;
+ final RedactionInfo redactionInfo = redactionNeeded ? getRedactionRanges(file)
+ : new RedactionInfo(EmptyArray.LONG, EmptyArray.LONG);
// Yell if caller requires original, since we can't give it to them
// unless they have access granted above
@@ -5402,8 +5403,13 @@ public class MediaProvider extends ContentProvider {
try {
// First, handle any redaction that is needed for caller
final ParcelFileDescriptor pfd;
- if (redactionRanges.length > 0) {
- pfd = RedactingFileDescriptor.open(getContext(), file, modeBits, redactionRanges);
+ if (redactionInfo.redactionRanges.length > 0) {
+ pfd = RedactingFileDescriptor.open(
+ getContext(),
+ file,
+ modeBits,
+ redactionInfo.redactionRanges,
+ redactionInfo.freeOffsets);
} else {
pfd = ParcelFileDescriptor.open(file, modeBits);
}
@@ -5503,13 +5509,19 @@ public class MediaProvider extends ContentProvider {
IsoInterface.BOX_GPS0,
};
- /**
- * Find the set of ranges that should be redacted from the given file, ready
- * to pass to {@link RedactingFileDescriptor}.
- */
- private long[] getRedactionRanges(File file) {
+ private static final class RedactionInfo {
+ public final long[] redactionRanges;
+ public final long[] freeOffsets;
+ public RedactionInfo(long[] redactionRanges, long[] freeOffsets) {
+ this.redactionRanges = redactionRanges;
+ this.freeOffsets = freeOffsets;
+ }
+ }
+
+ private RedactionInfo getRedactionRanges(File file) {
Trace.traceBegin(TRACE_TAG_DATABASE, "getRedactionRanges");
final LongArray res = new LongArray();
+ final LongArray freeOffsets = new LongArray();
try (FileInputStream is = new FileInputStream(file)) {
final ExifInterface exif = new ExifInterface(is.getFD());
for (String tag : REDACTED_EXIF_TAGS) {
@@ -5523,7 +5535,12 @@ public class MediaProvider extends ContentProvider {
final IsoInterface iso = IsoInterface.fromFileDescriptor(is.getFD());
for (int box : REDACTED_ISO_BOXES) {
final long[] ranges = iso.getBoxRanges(box);
- res.addAll(LongArray.wrap(ranges));
+ for (int i = 0; i < ranges.length; i += 2) {
+ long boxTypeOffset = ranges[i] - 4;
+ freeOffsets.add(boxTypeOffset);
+ res.add(boxTypeOffset);
+ res.add(ranges[i + 1]);
+ }
}
// Redact xmp where present
@@ -5536,7 +5553,7 @@ public class MediaProvider extends ContentProvider {
Log.w(TAG, "Failed to redact " + file + ": " + e);
}
Trace.traceEnd(TRACE_TAG_DATABASE);
- return res.toArray();
+ return new RedactionInfo(res.toArray(), freeOffsets.toArray());
}
private boolean checkCallingPermissionGlobal(Uri uri, boolean forWrite) {