Change Resources.getDrawable nullability
Resources.getDrawable() was annotated @Nullable because there was one very particular path where Bitmap decoding would fail and trigger a null return. As part of the switch to ImageDecoder, that path was changed to now throw an IOException, which will result as a NotFoundException to the caller of getDrawable. This CL annotates that path as @NonNull to reduce pain of dealing with @Nullable method that was very unlikely to be null in practice. Also fixes many other missing nullability annotations, and relabel many @Nullable paths that would never return null in practice as @NonNull. Bug: 69543526 Test: ResourcesTest Change-Id: Ib01eca970c5c9969998ce5b265b120aa7048b41a
This commit is contained in:
@@ -18,6 +18,8 @@ package android.graphics;
|
||||
|
||||
import static android.graphics.BitmapFactory.Options.validate;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.res.AssetManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Trace;
|
||||
@@ -518,8 +520,9 @@ public class BitmapFactory {
|
||||
* is not {@link ColorSpace.Model#RGB RGB}, or if the specified color space's transfer
|
||||
* function is not an {@link ColorSpace.Rgb.TransferParameters ICC parametric curve}
|
||||
*/
|
||||
public static Bitmap decodeResourceStream(Resources res, TypedValue value,
|
||||
InputStream is, Rect pad, Options opts) {
|
||||
@Nullable
|
||||
public static Bitmap decodeResourceStream(@Nullable Resources res, @Nullable TypedValue value,
|
||||
@Nullable InputStream is, @Nullable Rect pad, @Nullable Options opts) {
|
||||
validate(opts);
|
||||
if (opts == null) {
|
||||
opts = new Options();
|
||||
@@ -707,7 +710,9 @@ public class BitmapFactory {
|
||||
* <code>is.mark(1024)</code> would be called. As of
|
||||
* {@link android.os.Build.VERSION_CODES#KITKAT}, this is no longer the case.</p>
|
||||
*/
|
||||
public static Bitmap decodeStream(InputStream is, Rect outPadding, Options opts) {
|
||||
@Nullable
|
||||
public static Bitmap decodeStream(@Nullable InputStream is, @Nullable Rect outPadding,
|
||||
@Nullable Options opts) {
|
||||
// we don't throw in this case, thus allowing the caller to only check
|
||||
// the cache, and not force the image to be decoded.
|
||||
if (is == null) {
|
||||
@@ -742,7 +747,8 @@ public class BitmapFactory {
|
||||
* Private helper function for decoding an InputStream natively. Buffers the input enough to
|
||||
* do a rewind as needed, and supplies temporary storage if necessary. is MUST NOT be null.
|
||||
*/
|
||||
private static Bitmap decodeStreamInternal(InputStream is, Rect outPadding, Options opts) {
|
||||
private static Bitmap decodeStreamInternal(@NonNull InputStream is,
|
||||
@Nullable Rect outPadding, @Nullable Options opts) {
|
||||
// ASSERT(is != null);
|
||||
byte [] tempStorage = null;
|
||||
if (opts != null) tempStorage = opts.inTempStorage;
|
||||
|
||||
@@ -1174,8 +1174,10 @@ public abstract class Drawable {
|
||||
*
|
||||
* @deprecated Prefer the version without an Options object.
|
||||
*/
|
||||
public static Drawable createFromResourceStream(Resources res, TypedValue value,
|
||||
InputStream is, String srcName, BitmapFactory.Options opts) {
|
||||
@Nullable
|
||||
public static Drawable createFromResourceStream(@Nullable Resources res,
|
||||
@Nullable TypedValue value, @Nullable InputStream is, @Nullable String srcName,
|
||||
@Nullable BitmapFactory.Options opts) {
|
||||
if (is == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -1199,7 +1201,6 @@ public abstract class Drawable {
|
||||
// an application in compatibility mode, without scaling those down
|
||||
// to the compatibility density only to have them scaled back up when
|
||||
// drawn to the screen.
|
||||
if (opts == null) opts = new BitmapFactory.Options();
|
||||
opts.inScreenDensity = Drawable.resolveDensity(res, 0);
|
||||
Bitmap bm = BitmapFactory.decodeResourceStream(res, value, is, pad, opts);
|
||||
if (bm != null) {
|
||||
|
||||
Reference in New Issue
Block a user