diff --git a/assets/quantum/res/drawable-hdpi/quantum_ic_videocam_white_24.png b/assets/quantum/res/drawable-hdpi/quantum_ic_videocam_white_24.png
deleted file mode 100644
index d83e0d5..0000000
--- a/assets/quantum/res/drawable-hdpi/quantum_ic_videocam_white_24.png
+++ /dev/null
Binary files differ
diff --git a/assets/quantum/res/drawable-mdpi/quantum_ic_videocam_white_24.png b/assets/quantum/res/drawable-mdpi/quantum_ic_videocam_white_24.png
deleted file mode 100644
index d146209..0000000
--- a/assets/quantum/res/drawable-mdpi/quantum_ic_videocam_white_24.png
+++ /dev/null
Binary files differ
diff --git a/assets/quantum/res/drawable-xhdpi/quantum_ic_videocam_white_24.png b/assets/quantum/res/drawable-xhdpi/quantum_ic_videocam_white_24.png
deleted file mode 100644
index 1b2583d..0000000
--- a/assets/quantum/res/drawable-xhdpi/quantum_ic_videocam_white_24.png
+++ /dev/null
Binary files differ
diff --git a/assets/quantum/res/drawable-xxhdpi/quantum_ic_videocam_white_24.png b/assets/quantum/res/drawable-xxhdpi/quantum_ic_videocam_white_24.png
deleted file mode 100644
index 44c28e2..0000000
--- a/assets/quantum/res/drawable-xxhdpi/quantum_ic_videocam_white_24.png
+++ /dev/null
Binary files differ
diff --git a/assets/quantum/res/drawable-xxxhdpi/quantum_ic_videocam_white_24.png b/assets/quantum/res/drawable-xxxhdpi/quantum_ic_videocam_white_24.png
deleted file mode 100644
index ed20c07..0000000
--- a/assets/quantum/res/drawable-xxxhdpi/quantum_ic_videocam_white_24.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
index 7df0d15..56d1daf 100644
--- a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
+++ b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
@@ -64,7 +64,7 @@
 
     <ImageView
       style="@style/CallLogActionIconStyle"
-      android:src="@drawable/quantum_ic_videocam_white_24"/>
+      android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
 
     <TextView
       style="@style/CallLogActionTextStyle"
@@ -78,7 +78,7 @@
 
     <ImageView
         style="@style/CallLogActionIconStyle"
-        android:src="@drawable/quantum_ic_videocam_white_24"/>
+        android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
 
     <TextView
         style="@style/CallLogActionTextStyle"
@@ -92,7 +92,7 @@
 
     <ImageView
         style="@style/CallLogActionIconStyle"
-        android:src="@drawable/quantum_ic_videocam_white_24"/>
+        android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
 
     <TextView
         style="@style/CallLogActionTextStyle"
diff --git a/java/com/android/dialer/calllogutils/CallTypeIconsView.java b/java/com/android/dialer/calllogutils/CallTypeIconsView.java
index 3d2b561..1795438 100644
--- a/java/com/android/dialer/calllogutils/CallTypeIconsView.java
+++ b/java/com/android/dialer/calllogutils/CallTypeIconsView.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.BitmapDrawable;
@@ -297,7 +296,7 @@
       blocked = drawable.mutate();
       blocked.setColorFilter(r.getColor(R.color.blocked_call), PorterDuff.Mode.MULTIPLY);
 
-      iconId = R.drawable.quantum_ic_videocam_white_24;
+      iconId = R.drawable.quantum_ic_videocam_vd_white_24;
       drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
       videoCall = drawable.mutate();
       videoCall.setColorFilter(r.getColor(R.color.icon_color_grey), PorterDuff.Mode.MULTIPLY);
@@ -324,7 +323,14 @@
     // Gets the icon, scaled to the height of the call type icons. This helps display all the
     // icons to be the same height, while preserving their width aspect ratio.
     private Drawable getScaledBitmap(Context context, int resourceId) {
-      Bitmap icon = BitmapFactory.decodeResource(context.getResources(), resourceId);
+      Drawable drawable = context.getDrawable(resourceId);
+      Bitmap icon =
+          Bitmap.createBitmap(
+              drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+      Canvas canvas = new Canvas(icon);
+      drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+      drawable.draw(canvas);
+
       int scaledHeight = context.getResources().getDimensionPixelSize(R.dimen.call_type_icon_size);
       int scaledWidth =
           (int) ((float) icon.getWidth() * ((float) scaledHeight / (float) icon.getHeight()));
diff --git a/java/com/android/dialer/historyitemactions/IntentModule.java b/java/com/android/dialer/historyitemactions/IntentModule.java
index dfe9bb0..efb10e8 100644
--- a/java/com/android/dialer/historyitemactions/IntentModule.java
+++ b/java/com/android/dialer/historyitemactions/IntentModule.java
@@ -91,6 +91,6 @@
                 .setPhoneAccountHandle(phoneAccountHandle)
                 .setIsVideoCall(true)),
         R.string.video_call,
-        R.drawable.quantum_ic_videocam_white_24);
+        R.drawable.quantum_ic_videocam_vd_white_24);
   }
 }
diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
index 9d18e07..de9ce5a 100644
--- a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
+++ b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
@@ -179,7 +179,7 @@
       case CallToAction.VIDEO_CALL:
         callToActionView.setVisibility(View.VISIBLE);
         callToActionView.setImageDrawable(
-            context.getDrawable(R.drawable.quantum_ic_videocam_white_24));
+            context.getDrawable(R.drawable.quantum_ic_videocam_vd_white_24));
         callToActionView.setContentDescription(
             context.getString(R.string.description_search_video_call));
         callToActionView.setOnClickListener(this);
diff --git a/java/com/android/dialer/spam/promo/res/values/strings.xml b/java/com/android/dialer/spam/promo/res/values/strings.xml
index bef7381..037e83b 100644
--- a/java/com/android/dialer/spam/promo/res/values/strings.xml
+++ b/java/com/android/dialer/spam/promo/res/values/strings.xml
@@ -17,9 +17,9 @@
 
 <resources>
   <!-- Title for the spam blocking promo dialog. [CHAR LIMIT=100] -->
-  <string name="spam_blocking_promo_title">Filter suspected spam calls?</string>
+  <string name="spam_blocking_promo_title">Also filter suspected spam calls?</string>
   <!-- Text for the spam blocking promo dialog. [CHAR LIMIT=100] -->
-  <string name="spam_blocking_promo_text">Filtered spam calls will go straight to your voicemail</string>
+  <string name="spam_blocking_promo_text">You won\'t be disturbed by incoming suspected spam calls</string>
   <!-- Label for filter spam dialog action. [CHAR LIMIT=32] -->
   <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
   <!-- Label for "Dismiss" dialog action. [CHAR LIMIT=32] -->
diff --git a/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml b/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml
index fb47665..b4af686 100644
--- a/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml
+++ b/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml
@@ -50,7 +50,7 @@
           android:layout_width="24dp"
           android:layout_height="24dp"
           android:layout_gravity="center"
-          android:src="@drawable/quantum_ic_videocam_white_24"/>
+          android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
     </FrameLayout>
   </FrameLayout>
 
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index ef5965c..503df6c 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -647,7 +647,7 @@
     } else if (call.getVideoTech().getSessionModificationState()
             == SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST
         || call.isVideoCall()) {
-      return R.drawable.quantum_ic_videocam_white_24;
+      return R.drawable.quantum_ic_videocam_vd_white_24;
     } else if (call.hasProperty(PROPERTY_HIGH_DEF_AUDIO)
         && MotorolaUtils.shouldShowHdIconInNotification(context)) {
       // Normally when a call is ongoing the status bar displays an icon of a phone. This is a
@@ -944,7 +944,7 @@
         createNotificationPendingIntent(context, ACTION_ANSWER_VIDEO_INCOMING_CALL);
     builder.addAction(
         new Notification.Action.Builder(
-                Icon.createWithResource(context, R.drawable.quantum_ic_videocam_white_24),
+                Icon.createWithResource(context, R.drawable.quantum_ic_videocam_vd_white_24),
                 getActionText(
                     R.string.notification_action_answer_video,
                     R.color.notification_action_answer_video),
@@ -960,7 +960,7 @@
         createNotificationPendingIntent(context, ACTION_ACCEPT_VIDEO_UPGRADE_REQUEST);
     builder.addAction(
         new Notification.Action.Builder(
-                Icon.createWithResource(context, R.drawable.quantum_ic_videocam_white_24),
+                Icon.createWithResource(context, R.drawable.quantum_ic_videocam_vd_white_24),
                 getActionText(
                     R.string.notification_action_accept, R.color.notification_action_accept),
                 acceptVideoPendingIntent)
@@ -975,7 +975,7 @@
         createNotificationPendingIntent(context, ACTION_DECLINE_VIDEO_UPGRADE_REQUEST);
     builder.addAction(
         new Notification.Action.Builder(
-                Icon.createWithResource(context, R.drawable.quantum_ic_videocam_white_24),
+                Icon.createWithResource(context, R.drawable.quantum_ic_videocam_vd_white_24),
                 getActionText(
                     R.string.notification_action_dismiss, R.color.notification_action_dismiss),
                 declineVideoPendingIntent)
diff --git a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
index 2eeecc3..8928dd6 100644
--- a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
+++ b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
@@ -334,7 +334,7 @@
       return;
     }
     if (getParent().isVideoCall() || getParent().isVideoUpgradeRequest()) {
-      contactPuckIcon.setImageResource(R.drawable.quantum_ic_videocam_white_24);
+      contactPuckIcon.setImageResource(R.drawable.quantum_ic_videocam_vd_white_24);
     } else if (getParent().isRttCall()) {
       contactPuckIcon.setImageResource(R.drawable.quantum_ic_rtt_vd_theme_24);
     } else {
