Use given DefaultImageRequest when loading from Uris
Add empty bytes array check. Without this the photo would be
blank if one did not exist.
The given DefaultImageRequest was only used if the Uri was null,
changed Request to also hold the given DIR to use if a photo couldn't
be loaded.
Test:
Manual usage of the raw contact picker dialog.
Bug: 31826229
Bug: 32096517
Change-Id: Ied938552326f8a258b558040e1b1c1b5d5723239
diff --git a/src/com/android/contacts/common/ContactPhotoManager.java b/src/com/android/contacts/common/ContactPhotoManager.java
index 623b207..5ec1eea 100644
--- a/src/com/android/contacts/common/ContactPhotoManager.java
+++ b/src/com/android/contacts/common/ContactPhotoManager.java
@@ -850,7 +850,7 @@
isCircular, defaultProvider);
} else {
loadPhotoByIdOrUri(view, Request.createFromUri(photoUri, requestedExtent,
- darkTheme, isCircular, defaultProvider));
+ darkTheme, isCircular, defaultProvider, defaultImageRequest));
}
}
}
@@ -937,7 +937,7 @@
return false;
}
- if (holder.bytes == null) {
+ if (holder.bytes == null || holder.bytes.length == 0) {
request.applyDefaultImage(view, request.mIsCircular);
return holder.fresh;
}
@@ -1622,30 +1622,41 @@
private final boolean mDarkTheme;
private final int mRequestedExtent;
private final DefaultImageProvider mDefaultProvider;
+ private final DefaultImageRequest mDefaultRequest;
/**
* Whether or not the contact photo is to be displayed as a circle
*/
private final boolean mIsCircular;
private Request(long id, Uri uri, int requestedExtent, boolean darkTheme,
- boolean isCircular, DefaultImageProvider defaultProvider) {
+ boolean isCircular, DefaultImageProvider defaultProvider,
+ DefaultImageRequest defaultRequest) {
mId = id;
mUri = uri;
mDarkTheme = darkTheme;
mIsCircular = isCircular;
mRequestedExtent = requestedExtent;
mDefaultProvider = defaultProvider;
+ mDefaultRequest = defaultRequest;
}
public static Request createFromThumbnailId(long id, boolean darkTheme, boolean isCircular,
DefaultImageProvider defaultProvider) {
- return new Request(id, null /* no URI */, -1, darkTheme, isCircular, defaultProvider);
+ return new Request(id, null /* no URI */, -1, darkTheme, isCircular, defaultProvider,
+ /* defaultRequest */ null);
}
public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
boolean isCircular, DefaultImageProvider defaultProvider) {
+ return createFromUri(uri, requestedExtent, darkTheme, isCircular, defaultProvider,
+ /* defaultRequest */ null);
+ }
+
+ public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageProvider defaultProvider,
+ DefaultImageRequest defaultRequest) {
return new Request(0 /* no ID */, uri, requestedExtent, darkTheme, isCircular,
- defaultProvider);
+ defaultProvider, defaultRequest);
}
public boolean isUriRequest() {
@@ -1705,14 +1716,18 @@
public void applyDefaultImage(ImageView view, boolean isCircular) {
final DefaultImageRequest request;
- if (isCircular) {
- request = ContactPhotoManager.isBusinessContactUri(mUri)
- ? DefaultImageRequest.EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST
- : DefaultImageRequest.EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST;
+ if (mDefaultRequest == null) {
+ if (isCircular) {
+ request = ContactPhotoManager.isBusinessContactUri(mUri)
+ ? DefaultImageRequest.EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST
+ : DefaultImageRequest.EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST;
+ } else {
+ request = ContactPhotoManager.isBusinessContactUri(mUri)
+ ? DefaultImageRequest.EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST
+ : DefaultImageRequest.EMPTY_DEFAULT_IMAGE_REQUEST;
+ }
} else {
- request = ContactPhotoManager.isBusinessContactUri(mUri)
- ? DefaultImageRequest.EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST
- : DefaultImageRequest.EMPTY_DEFAULT_IMAGE_REQUEST;
+ request = mDefaultRequest;
}
mDefaultProvider.applyDefaultImage(view, mRequestedExtent, mDarkTheme, request);
}