summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/com/android/incallui/contactgrid/ContactGridManager.java91
-rw-r--r--java/com/android/incallui/incall/protocol/PrimaryInfo.java7
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);