summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/contactgrid/ContactGridManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/contactgrid/ContactGridManager.java')
-rw-r--r--java/com/android/incallui/contactgrid/ContactGridManager.java91
1 files changed, 66 insertions, 25 deletions
diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java
index 493f2d583..6d04a2735 100644
--- a/java/com/android/incallui/contactgrid/ContactGridManager.java
+++ b/java/com/android/incallui/contactgrid/ContactGridManager.java
@@ -35,6 +35,9 @@ import android.widget.TextView;
import android.widget.ViewAnimator;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
+import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.lettertile.LetterTileDrawable;
import com.android.dialer.util.DrawableConverter;
import com.android.incallui.incall.protocol.ContactPhotoType;
@@ -215,7 +218,8 @@ public class ContactGridManager {
}
boolean hasPhoto =
- primaryInfo.photo() != null && primaryInfo.photoType() == ContactPhotoType.CONTACT;
+ (primaryInfo.photo() != null || primaryInfo.photoUri() != null)
+ && primaryInfo.photoType() == ContactPhotoType.CONTACT;
if (!hasPhoto && !showAnonymousAvatar) {
avatarImageView.setVisibility(View.GONE);
return false;
@@ -297,36 +301,73 @@ public class ContactGridManager {
if (hideAvatar) {
avatarImageView.setVisibility(View.GONE);
} else if (avatarSize > 0 && updateAvatarVisibility()) {
- boolean hasPhoto =
- primaryInfo.photo() != null && primaryInfo.photoType() == ContactPhotoType.CONTACT;
- // Contact has a photo, don't render a letter tile.
- if (hasPhoto) {
- avatarImageView.setBackground(
- DrawableConverter.getRoundedDrawable(
- context, primaryInfo.photo(), avatarSize, avatarSize));
- // Contact has a name, that isn't a number.
+ if (ConfigProviderBindings.get(context).getBoolean("enable_glide_photo", false)) {
+ loadPhotoWithGlide();
} else {
- letterTile.setCanonicalDialerLetterTileDetails(
- primaryInfo.name(),
- primaryInfo.contactInfoLookupKey(),
- LetterTileDrawable.SHAPE_CIRCLE,
- LetterTileDrawable.getContactTypeFromPrimitives(
- primaryCallState.isVoiceMailNumber(),
- primaryInfo.isSpam(),
- primaryCallState.isBusinessNumber(),
- primaryInfo.numberPresentation(),
- primaryCallState.isConference()));
- // By invalidating the avatarImageView we force a redraw of the letter tile.
- // This is required to properly display the updated letter tile iconography based on the
- // contact type, because the background drawable reference cached in the view, and the
- // view is not aware of the mutations made to the background.
- avatarImageView.invalidate();
- avatarImageView.setBackground(letterTile);
+ loadPhotoWithLegacy();
}
}
}
}
+ private void loadPhotoWithGlide() {
+ PhotoInfo.Builder photoInfoBuilder =
+ PhotoInfo.newBuilder()
+ .setIsBusiness(primaryInfo.photoType() == ContactPhotoType.BUSINESS)
+ .setIsVoicemail(primaryCallState.isVoiceMailNumber())
+ .setIsSpam(primaryInfo.isSpam());
+
+ // Contact has a name, that is a number.
+ if (primaryInfo.nameIsNumber() && primaryInfo.number() != null) {
+ photoInfoBuilder.setName(primaryInfo.number());
+ } else if (primaryInfo.name() != null) {
+ photoInfoBuilder.setName(primaryInfo.name());
+ }
+
+ if (primaryInfo.number() != null) {
+ photoInfoBuilder.setFormattedNumber(primaryInfo.number());
+ }
+
+ if (primaryInfo.photoUri() != null) {
+ photoInfoBuilder.setPhotoUri(primaryInfo.photoUri().toString());
+ }
+
+ if (primaryInfo.contactInfoLookupKey() != null) {
+ photoInfoBuilder.setLookupUri(primaryInfo.contactInfoLookupKey());
+ }
+
+ GlidePhotoManagerComponent.get(context)
+ .glidePhotoManager()
+ .loadContactPhoto(avatarImageView, photoInfoBuilder.build());
+ }
+
+ private void loadPhotoWithLegacy() {
+ boolean hasPhoto =
+ primaryInfo.photo() != null && primaryInfo.photoType() == ContactPhotoType.CONTACT;
+ if (hasPhoto) {
+ avatarImageView.setBackground(
+ DrawableConverter.getRoundedDrawable(
+ context, primaryInfo.photo(), avatarSize, avatarSize));
+ } else {
+ // Contact has a photo, don't render a letter tile.
+ letterTile.setCanonicalDialerLetterTileDetails(
+ primaryInfo.name(),
+ primaryInfo.contactInfoLookupKey(),
+ LetterTileDrawable.SHAPE_CIRCLE,
+ LetterTileDrawable.getContactTypeFromPrimitives(
+ primaryCallState.isVoiceMailNumber(),
+ primaryInfo.isSpam(),
+ primaryCallState.isBusinessNumber(),
+ primaryInfo.numberPresentation(),
+ primaryCallState.isConference()));
+ // By invalidating the avatarImageView we force a redraw of the letter tile.
+ // This is required to properly display the updated letter tile iconography based on the
+ // contact type, because the background drawable reference cached in the view, and the
+ // view is not aware of the mutations made to the background.
+ avatarImageView.invalidate();
+ avatarImageView.setBackground(letterTile);
+ }
+ }
/**
* Updates row 2. For example:
*