diff options
| -rw-r--r-- | core/java/android/content/ContentResolver.java | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 4de1dfcc12ba..949cdd6878c0 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); } } |