From b4f51b5d817e1e85e3669622e07596b3cc265350 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sun, 18 Nov 2018 16:10:15 -0700 Subject: [PATCH] Only use ALLOCATOR_DEFAULT when apps target Q. Bug: 119510493 Test: manual Change-Id: Icd7acfd9f899dce46b24db2156acbb3a98b409c8 --- core/java/android/content/ContentResolver.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 4de1dfcc12ba2..949cdd6878c03 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -42,6 +42,7 @@ import android.graphics.ImageDecoder.Source; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.CancellationSignal; import android.os.DeadObjectException; @@ -3243,8 +3244,18 @@ public abstract class ContentResolver { Objects.requireNonNull(uri); Objects.requireNonNull(size); + // Older apps might be relying on mutable results, so only consider + // giving them hardware bitmaps once they target Q or higher. If modern + // apps need mutable thumbnails, they can always roll their own logic. + final int allocator; + if (getTargetSdkVersion() >= Build.VERSION_CODES.Q) { + allocator = ImageDecoder.ALLOCATOR_DEFAULT; + } else { + allocator = ImageDecoder.ALLOCATOR_SOFTWARE; + } + try (ContentProviderClient client = acquireContentProviderClient(uri)) { - return loadThumbnail(client, uri, size, signal, ImageDecoder.ALLOCATOR_DEFAULT); + return loadThumbnail(client, uri, size, signal, allocator); } }