diff --git a/res/values/colors.xml b/res/values/colors.xml
index 8b7b150..bf7bfb2 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -24,6 +24,7 @@
 
     <color name="dialer_button_text_color">#fff</color>
     <color name="dialer_flat_button_text_color">@color/dialer_theme_color</color>
+    <color name="dialer_snackbar_action_text_color">@color/dialer_theme_color</color>
 
     <!-- Color for the setting text. -->
     <color name="setting_primary_color">@color/dialtacts_primary_text_color</color>
diff --git a/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java b/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
index affb37b..8473e32 100644
--- a/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
+++ b/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
@@ -178,10 +178,15 @@
         return getString(R.string.snackbar_number_unblocked, mDisplayNumber);
     }
 
+    private int getActionTextColor() {
+        return getContext().getResources().getColor(R.color.dialer_snackbar_action_text_color);
+    }
+
     private void blockNumber() {
         final String message = getBlockedMessage();
         final String undoMessage = getUnblockedMessage();
         final Callback callback = mCallback;
+        final int actionTextColor = getActionTextColor();
 
         final OnUnblockNumberListener onUndoListener = new OnUnblockNumberListener() {
             @Override
@@ -206,6 +211,7 @@
 
                 Snackbar.make(mParentView, message, Snackbar.LENGTH_LONG)
                         .setAction(R.string.block_number_undo, undoListener)
+                        .setActionTextColor(actionTextColor)
                         .show();
 
                 if (callback != null) {
@@ -225,6 +231,7 @@
         final String message = getUnblockedMessage();
         final String undoMessage = getBlockedMessage();
         final Callback callback = mCallback;
+        final int actionTextColor = getActionTextColor();
 
         final OnBlockNumberListener onUndoListener = new OnBlockNumberListener() {
             @Override
@@ -249,6 +256,7 @@
 
                 Snackbar.make(mParentView, message, Snackbar.LENGTH_LONG)
                         .setAction(R.string.block_number_undo, undoListener)
+                        .setActionTextColor(actionTextColor)
                         .show();
 
                 if (callback != null) {
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index f86fc55..33210d3 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -209,6 +209,8 @@
             // window.
             handler.postDelayed(deleteCallback, VOICEMAIL_DELETE_DELAY_MS + 50);
 
+            final int actionTextColor =
+                    mContext.getResources().getColor(R.color.dialer_snackbar_action_text_color);
             Snackbar.make(VoicemailPlaybackLayout.this, R.string.snackbar_voicemail_deleted,
                             Snackbar.LENGTH_LONG)
                     .setDuration(VOICEMAIL_DELETE_DELAY_MS)
@@ -220,6 +222,7 @@
                                         handler.removeCallbacks(deleteCallback);
                                 }
                             })
+                    .setActionTextColor(actionTextColor)
                     .show();
         }
     };
