diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
index aa71ec4..9809d97 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
@@ -24,9 +24,7 @@
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.View;
-import android.widget.FrameLayout;
 import android.widget.ImageView;
-import android.widget.QuickContactBadge;
 import android.widget.TextView;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllog.ui.menu.NewCallLogMenu;
@@ -39,6 +37,7 @@
 import com.android.dialer.glidephotomanager.GlidePhotoManager;
 import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.time.Clock;
+import com.android.dialer.widget.ContactPhotoView;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import java.util.Locale;
@@ -48,11 +47,10 @@
 final class NewCallLogViewHolder extends RecyclerView.ViewHolder {
 
   private final Context context;
+  private final ContactPhotoView contactPhotoView;
   private final TextView primaryTextView;
   private final TextView callCountTextView;
   private final TextView secondaryTextView;
-  private final QuickContactBadge contactPhoto;
-  private final FrameLayout contactBadgeContainer;
   private final ImageView callTypeIcon;
   private final ImageView hdIcon;
   private final ImageView wifiIcon;
@@ -75,11 +73,10 @@
       GlidePhotoManager glidePhotoManager) {
     super(view);
     this.context = view.getContext();
+    contactPhotoView = view.findViewById(R.id.contact_photo_view);
     primaryTextView = view.findViewById(R.id.primary_text);
     callCountTextView = view.findViewById(R.id.call_count);
     secondaryTextView = view.findViewById(R.id.secondary_text);
-    contactPhoto = view.findViewById(R.id.quick_contact_photo);
-    contactBadgeContainer = view.findViewById(R.id.contact_badge_container);
     callTypeIcon = view.findViewById(R.id.call_type_icon);
     hdIcon = view.findViewById(R.id.hd_icon);
     wifiIcon = view.findViewById(R.id.wifi_icon);
@@ -154,20 +151,12 @@
   }
 
   private void setPhoto(CoalescedRow row) {
-    glidePhotoManager.loadQuickContactBadge(
-        contactPhoto,
+    contactPhotoView.setPhoto(
         NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
             .setFormattedNumber(row.getFormattedNumber())
+            .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
             .setIsVoicemail(row.getIsVoicemailCall())
             .build());
-
-    contactBadgeContainer.setVisibility(
-        shouldShowVideoCallIcon(row) ? View.VISIBLE : View.INVISIBLE);
-  }
-
-  private static boolean shouldShowVideoCallIcon(CoalescedRow row) {
-    return (row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO
-        && !row.getNumberAttributes().getIsSpam();
   }
 
   private void setFeatureIcons(CoalescedRow row) {
diff --git a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
index 2285431..672a9a3 100644
--- a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
+++ b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
@@ -21,43 +21,13 @@
     android:layout_height="wrap_content"
     android:minHeight="72dp">
 
-  <!-- Contact photo (including the optional video icon) -->
-  <FrameLayout
-    android:id="@+id/contact_photo_container"
-    android:layout_width="52dp"
-    android:layout_height="44dp"
-    android:layout_marginStart="10dp"
-    android:layout_marginEnd="10dp"
-    android:layout_centerVertical="true"
-    android:focusable="false">
-
-    <QuickContactBadge
-        android:id="@+id/quick_contact_photo"
-        android:layout_width="40dp"
-        android:layout_height="40dp"
-        android:layout_gravity="center"
-        android:focusable="true"/>
-
-    <FrameLayout
-        android:id="@+id/contact_badge_container"
-        android:layout_width="22dp"
-        android:layout_height="22dp"
-        android:layout_gravity="bottom|end">
-
-      <ImageView
-          android:id="@+id/contact_badge_background"
-          android:layout_width="match_parent"
-          android:layout_height="match_parent"
-          android:src="@drawable/contact_photo_badge_background"/>
-
-      <ImageView
-          android:id="@+id/video_call_icon"
-          android:layout_width="13dp"
-          android:layout_height="13dp"
-          android:layout_gravity="center"
-          android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
-    </FrameLayout>
-  </FrameLayout>
+  <com.android.dialer.widget.ContactPhotoView
+      android:id="@+id/contact_photo_view"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginStart="10dp"
+      android:layout_marginEnd="10dp"
+      android:layout_centerVertical="true"/>
 
   <!-- The frame layout is necessary to avoid clipping the icons and ellipsize the text when the
        content is too wide to fit.
@@ -66,7 +36,7 @@
       android:id="@+id/primary_row"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:layout_toEndOf="@+id/contact_photo_container"
+      android:layout_toEndOf="@+id/contact_photo_view"
       android:layout_toStartOf="@+id/menu_button">
 
     <LinearLayout
@@ -127,7 +97,7 @@
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/primary_row"
-      android:layout_toEndOf="@+id/contact_photo_container"
+      android:layout_toEndOf="@+id/contact_photo_view"
       android:orientation="horizontal">
 
     <ImageView
@@ -153,7 +123,7 @@
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/secondary_row"
-      android:layout_toEndOf="@+id/contact_photo_container"
+      android:layout_toEndOf="@+id/contact_photo_view"
       android:ellipsize="end"
       android:singleLine="true"
       android:visibility="gone"/>
diff --git a/java/com/android/dialer/widget/ContactPhotoView.java b/java/com/android/dialer/widget/ContactPhotoView.java
new file mode 100644
index 0000000..6fcc89a
--- /dev/null
+++ b/java/com/android/dialer/widget/ContactPhotoView.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.widget;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.QuickContactBadge;
+import com.android.dialer.common.Assert;
+import com.android.dialer.glidephotomanager.GlidePhotoManager;
+import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
+import com.android.dialer.glidephotomanager.PhotoInfo;
+
+/**
+ * A {@link FrameLayout} for displaying a contact photo and its optional badge (such as one for a
+ * video call).
+ */
+public final class ContactPhotoView extends FrameLayout {
+  private final QuickContactBadge contactPhoto;
+  private final FrameLayout contactBadgeContainer;
+  private final ImageView videoCallBadge;
+
+  private final GlidePhotoManager glidePhotoManager;
+
+  public ContactPhotoView(Context context) {
+    this(context, /* attrs = */ null);
+  }
+
+  public ContactPhotoView(Context context, @Nullable AttributeSet attrs) {
+    this(context, attrs, /* defStyleAttr = */ 0);
+  }
+
+  public ContactPhotoView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+    this(context, attrs, defStyleAttr, /* defStyleRes = */ 0);
+  }
+
+  public ContactPhotoView(
+      Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+    super(context, attrs, defStyleAttr, defStyleRes);
+
+    inflateLayout();
+
+    contactPhoto = findViewById(R.id.quick_contact_photo);
+    contactBadgeContainer = findViewById(R.id.contact_badge_container);
+    videoCallBadge = findViewById(R.id.video_call_badge);
+
+    glidePhotoManager = GlidePhotoManagerComponent.get(context).glidePhotoManager();
+
+    hideBadge(); // Hide badges by default.
+  }
+
+  private void inflateLayout() {
+    LayoutInflater inflater = Assert.isNotNull(getContext().getSystemService(LayoutInflater.class));
+    inflater.inflate(R.layout.contact_photo_view, /* root = */ this);
+  }
+
+  private void hideBadge() {
+    contactBadgeContainer.setVisibility(View.INVISIBLE);
+    videoCallBadge.setVisibility(View.INVISIBLE);
+  }
+
+  /** Sets the contact photo and its badge to be displayed. */
+  public void setPhoto(PhotoInfo photoInfo) {
+    glidePhotoManager.loadQuickContactBadge(contactPhoto, photoInfo);
+    setBadge(photoInfo);
+  }
+
+  private void setBadge(PhotoInfo photoInfo) {
+    // No badge for spam numbers.
+    if (photoInfo.getIsSpam()) {
+      return;
+    }
+
+    if (photoInfo.getIsVideo()) {
+      contactBadgeContainer.setVisibility(View.VISIBLE);
+      videoCallBadge.setVisibility(View.VISIBLE);
+    }
+  }
+}
diff --git a/java/com/android/dialer/calllog/ui/res/drawable/contact_photo_badge_background.xml b/java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml
similarity index 100%
rename from java/com/android/dialer/calllog/ui/res/drawable/contact_photo_badge_background.xml
rename to java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml
diff --git a/java/com/android/dialer/widget/res/layout/contact_photo_view.xml b/java/com/android/dialer/widget/res/layout/contact_photo_view.xml
new file mode 100644
index 0000000..e505e58
--- /dev/null
+++ b/java/com/android/dialer/widget/res/layout/contact_photo_view.xml
@@ -0,0 +1,50 @@
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<!-- A FrameLayout for displaying a contact photo and its optional badge -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="52dp"
+    android:layout_height="44dp"
+    android:focusable="false">
+
+  <QuickContactBadge
+      android:id="@+id/quick_contact_photo"
+      android:layout_width="40dp"
+      android:layout_height="40dp"
+      android:layout_gravity="center"
+      android:focusable="true"/>
+
+  <FrameLayout
+      android:id="@+id/contact_badge_container"
+      android:layout_width="22dp"
+      android:layout_height="22dp"
+      android:layout_gravity="bottom|end">
+
+    <ImageView
+        android:id="@+id/contact_badge_background"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:src="@drawable/contact_photo_badge_background"/>
+
+    <ImageView
+        android:id="@+id/video_call_badge"
+        android:layout_width="13dp"
+        android:layout_height="13dp"
+        android:layout_gravity="center"
+        android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
+  </FrameLayout>
+</FrameLayout>
\ No newline at end of file
