summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java')
-rw-r--r--java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java31
1 files changed, 30 insertions, 1 deletions
diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
index 515a3ccbb..eeeae13ae 100644
--- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
+++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
@@ -20,6 +20,7 @@ import android.content.ContentUris;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.support.annotation.MainThread;
import android.support.annotation.Nullable;
@@ -35,10 +36,15 @@ import com.android.dialer.glidephotomanager.GlidePhotoManager;
import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.inject.ApplicationContext;
import com.android.dialer.lettertile.LetterTileDrawable;
+import java.util.List;
import javax.inject.Inject;
/** Implementation of {@link GlidePhotoManager} */
public class GlidePhotoManagerImpl implements GlidePhotoManager {
+
+ private static final int LOOKUP_URI_PATH_SEGMENTS =
+ Contacts.CONTENT_LOOKUP_URI.getPathSegments().size();
+
private final Context appContext;
@Inject
@@ -126,7 +132,7 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager {
: photoInfo.getName();
} else {
displayName = photoInfo.getName();
- identifier = photoInfo.getLookupUri();
+ identifier = getIdentifier(photoInfo.getLookupUri());
}
letterTileDrawable.setCanonicalDialerLetterTileDetails(
displayName,
@@ -145,4 +151,27 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager {
private static Uri parseUri(@Nullable String uri) {
return TextUtils.isEmpty(uri) ? null : Uri.parse(uri);
}
+
+ /**
+ * Return the "lookup key" inside the lookup URI. If the URI does not contain the key (i.e, JSON
+ * based prepopulated URIs for non-contact entries), the URI itself is returned.
+ *
+ * <p>The lookup URI has the format of Contacts.CONTENT_LOOKUP_URI/lookupKey/rowId. For JSON based
+ * URI, it would be Contacts.CONTENT_LOOKUP_URI/encoded#JSON
+ */
+ private static String getIdentifier(String lookupUri) {
+ if (!lookupUri.startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
+ return lookupUri;
+ }
+
+ List<String> segments = Uri.parse(lookupUri).getPathSegments();
+ if (segments.size() < LOOKUP_URI_PATH_SEGMENTS) {
+ return lookupUri;
+ }
+ String lookupKey = segments.get(LOOKUP_URI_PATH_SEGMENTS);
+ if ("encoded".equals(lookupKey)) {
+ return lookupUri;
+ }
+ return lookupKey;
+ }
}