diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-05-17 21:22:48 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-05-17 21:22:48 +0000 |
commit | 854bf9d9685e5f9a94eb72a37ff20fa2ecb35428 (patch) | |
tree | 826b5b1e7466287b9f973a0b55a9955068bd7ec8 /java/com/android/incallui/contactgrid | |
parent | 1bff1f6fa431b36e9cc96b085a0ab519cd52b1b9 (diff) | |
parent | 55cd2634421a6ff64b192638eb0de76f7ac297bf (diff) |
Merge "Updating ContactGridManager to use GlidePhotoManager for more efficient contact photo creation. If the photoUri does not exist, GlidePhotoManagerImpl will create the needed LetterTileDrawable to use in the contact photo's place."
Diffstat (limited to 'java/com/android/incallui/contactgrid')
-rw-r--r-- | java/com/android/incallui/contactgrid/ContactGridManager.java | 91 |
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: * |