Merge "Use given DefaultImageRequest when loading from Uris" into ub-contactsdialer-h-dev
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);
         }