diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/com/android/incallui/contactgrid/ContactGridManager.java | 91 | ||||
-rw-r--r-- | java/com/android/incallui/incall/protocol/PrimaryInfo.java | 7 |
2 files changed, 73 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: * diff --git a/java/com/android/incallui/incall/protocol/PrimaryInfo.java b/java/com/android/incallui/incall/protocol/PrimaryInfo.java index 63dc39ed3..5e40cd156 100644 --- a/java/com/android/incallui/incall/protocol/PrimaryInfo.java +++ b/java/com/android/incallui/incall/protocol/PrimaryInfo.java @@ -17,6 +17,7 @@ package com.android.incallui.incall.protocol; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.support.annotation.Nullable; import com.android.dialer.common.LogUtil; import com.android.dialer.multimedia.MultimediaData; @@ -43,6 +44,9 @@ public abstract class PrimaryInfo { @Nullable public abstract Drawable photo(); + @Nullable + public abstract Uri photoUri(); + @ContactPhotoType public abstract int photoType(); @@ -73,6 +77,7 @@ public abstract class PrimaryInfo { public static Builder builder() { return new AutoValue_PrimaryInfo.Builder(); } + /** Builder class for primary call info. */ @AutoValue.Builder public abstract static class Builder { @@ -88,6 +93,8 @@ public abstract class PrimaryInfo { public abstract Builder setPhoto(Drawable photo); + public abstract Builder setPhotoUri(Uri photoUri); + public abstract Builder setPhotoType(@ContactPhotoType int photoType); public abstract Builder setIsSipCall(boolean isSipCall); |