diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 56e0a95..b96b127 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -136,6 +136,7 @@
 import com.android.dialer.util.TransactionSafeActivity;
 import com.android.dialer.util.ViewUtil;
 import com.android.dialer.widget.FloatingActionButtonController;
+import com.google.common.base.Optional;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -194,6 +195,8 @@
    */
   private static final long HISTORY_TAB_SEEN_TIMEOUT = TimeUnit.SECONDS.toMillis(3);
 
+  private static Optional<Boolean> sVoiceSearchEnabledForTest = Optional.absent();
+
   /** Fragment containing the dialpad that slides into view */
   protected DialpadFragment mDialpadFragment;
 
@@ -242,6 +245,7 @@
 
   private PopupMenu mOverflowMenu;
   private EditText mSearchView;
+  private SearchEditTextLayout mSearchEditTextLayout;
   private View mVoiceSearchButton;
   private String mSearchQuery;
   private String mDialpadQuery;
@@ -397,20 +401,19 @@
     actionBar.setDisplayShowCustomEnabled(true);
     actionBar.setBackgroundDrawable(null);
 
-    SearchEditTextLayout searchEditTextLayout =
-        actionBar.getCustomView().findViewById(R.id.search_view_container);
+    mSearchEditTextLayout = actionBar.getCustomView().findViewById(R.id.search_view_container);
 
-    mActionBarController = new ActionBarController(this, searchEditTextLayout);
+    mActionBarController = new ActionBarController(this, mSearchEditTextLayout);
 
-    mSearchView = searchEditTextLayout.findViewById(R.id.search_view);
+    mSearchView = mSearchEditTextLayout.findViewById(R.id.search_view);
     mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
     mSearchView.setHint(getSearchBoxHint());
 
-    mVoiceSearchButton = searchEditTextLayout.findViewById(R.id.voice_search_button);
-    searchEditTextLayout
+    mVoiceSearchButton = mSearchEditTextLayout.findViewById(R.id.voice_search_button);
+    mSearchEditTextLayout
         .findViewById(R.id.search_box_collapsed)
         .setOnClickListener(mSearchViewOnClickListener);
-    searchEditTextLayout
+    mSearchEditTextLayout
         .findViewById(R.id.search_back_button)
         .setOnClickListener(v -> exitSearchUi());
 
@@ -423,7 +426,7 @@
         new FloatingActionButtonController(this, floatingActionButton);
 
     ImageButton optionsMenuButton =
-        searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button);
+        mSearchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button);
     optionsMenuButton.setOnClickListener(this);
     mOverflowMenu = buildOptionsMenu(optionsMenuButton);
     optionsMenuButton.setOnTouchListener(mOverflowMenu.getDragToOpenListener());
@@ -1015,13 +1018,15 @@
   }
 
   private void prepareVoiceSearchButton() {
-    final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
-    if (canIntentBeHandled(voiceIntent)) {
-      mVoiceSearchButton.setVisibility(View.VISIBLE);
-      mVoiceSearchButton.setOnClickListener(this);
-    } else {
-      mVoiceSearchButton.setVisibility(View.GONE);
+    mSearchEditTextLayout.setVoiceSearchEnabled(isVoiceSearchEnabled());
+    mVoiceSearchButton.setOnClickListener(this);
+  }
+
+  private boolean isVoiceSearchEnabled() {
+    if (sVoiceSearchEnabledForTest.isPresent()) {
+      return sVoiceSearchEnabledForTest.get();
     }
+    return canIntentBeHandled(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH));
   }
 
   public boolean isNearbyPlacesSearchEnabled() {
@@ -1034,10 +1039,7 @@
 
   /** Sets the hint text for the contacts search box */
   private void setSearchBoxHint() {
-    SearchEditTextLayout searchEditTextLayout =
-        (SearchEditTextLayout)
-            getActionBarSafely().getCustomView().findViewById(R.id.search_view_container);
-    ((TextView) searchEditTextLayout.findViewById(R.id.search_box_start_search))
+    ((TextView) mSearchEditTextLayout.findViewById(R.id.search_box_start_search))
         .setHint(getSearchBoxHint());
   }
 
@@ -1714,4 +1716,9 @@
       return true;
     }
   }
+
+  @VisibleForTesting
+  static void setVoiceSearchEnabledForTest(Optional<Boolean> enabled) {
+    sVoiceSearchEnabledForTest = enabled;
+  }
 }
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
index 1836416..2fd9a21 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
@@ -27,6 +27,7 @@
 import android.os.Build.VERSION_CODES;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.v4.app.NotificationCompat;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
@@ -76,7 +77,7 @@
             .getResources()
             .getQuantityString(
                 R.plurals.notification_voicemail_title, newCalls.size(), newCalls.size());
-    Notification.Builder groupSummary =
+    NotificationCompat.Builder groupSummary =
         createNotificationBuilder(context)
             .setContentTitle(contentTitle)
             .setContentText(callers)
@@ -127,8 +128,8 @@
     return NOTIFICATION_TAG_PREFIX + voicemailUri;
   }
 
-  private static Notification.Builder createNotificationBuilder(@NonNull Context context) {
-    return new Notification.Builder(context)
+  private static NotificationCompat.Builder createNotificationBuilder(@NonNull Context context) {
+    return new NotificationCompat.Builder(context)
         .setSmallIcon(android.R.drawable.stat_notify_voicemail)
         .setColor(context.getColor(R.color.dialer_theme_color))
         .setGroup(GROUP_KEY)
@@ -143,7 +144,7 @@
     PhoneAccountHandle handle = getAccountForCall(context, voicemail);
     ContactInfo contactInfo = contactInfos.get(voicemail.number);
 
-    Notification.Builder builder =
+    NotificationCompat.Builder builder =
         createNotificationBuilder(context)
             .setContentTitle(
                 ContactDisplayUtils.getTtsSpannedPhoneNumber(
@@ -157,7 +158,9 @@
     if (!TextUtils.isEmpty(voicemail.transcription)) {
       Logger.get(context)
           .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION);
-      builder.setContentText(voicemail.transcription);
+      builder
+          .setContentText(voicemail.transcription)
+          .setStyle(new NotificationCompat.BigTextStyle().bigText(voicemail.transcription));
     } else {
       switch (voicemail.transcriptionState) {
         case VoicemailCompat.TRANSCRIPTION_IN_PROGRESS:
diff --git a/java/com/android/dialer/app/widget/SearchEditTextLayout.java b/java/com/android/dialer/app/widget/SearchEditTextLayout.java
index 9da0e24..e7a707f 100644
--- a/java/com/android/dialer/app/widget/SearchEditTextLayout.java
+++ b/java/com/android/dialer/app/widget/SearchEditTextLayout.java
@@ -58,6 +58,8 @@
 
   private Callback mCallback;
 
+  private boolean mVoiceSearchEnabled;
+
   public SearchEditTextLayout(Context context, AttributeSet attrs) {
     super(context, attrs);
   }
@@ -70,6 +72,11 @@
     mCallback = listener;
   }
 
+  public void setVoiceSearchEnabled(boolean enabled) {
+    mVoiceSearchEnabled = enabled;
+    updateVisibility(mIsExpanded);
+  }
+
   @Override
   protected void onFinishInflate() {
     MarginLayoutParams params = (MarginLayoutParams) getLayoutParams();
@@ -272,7 +279,11 @@
 
     mSearchIcon.setVisibility(collapsedViewVisibility);
     mCollapsedSearchBox.setVisibility(collapsedViewVisibility);
-    mVoiceSearchButtonView.setVisibility(collapsedViewVisibility);
+    if (mVoiceSearchEnabled) {
+      mVoiceSearchButtonView.setVisibility(collapsedViewVisibility);
+    } else {
+      mVoiceSearchButtonView.setVisibility(View.GONE);
+    }
     mOverflowButtonView.setVisibility(collapsedViewVisibility);
     // TODO: Prevents keyboard from jumping up in landscape mode after exiting the
     // SearchFragment when the query string is empty. More elegant fix?
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
index f478d55..f2a1d09 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
@@ -39,6 +39,7 @@
         .addItem("Incoming call", () -> new SimulatorVoiceCall(context).addNewIncomingCall(false))
         .addItem("Outgoing call", () -> new SimulatorVoiceCall(context).addNewOutgoingCall())
         .addItem("Spam call", () -> new SimulatorVoiceCall(context).addNewIncomingCall(true))
+        .addItem("Emergency call", () -> new SimulatorVoiceCall(context).addNewEmergencyCall())
         .addItem(
             "GSM conference",
             () -> new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM).start(5));
@@ -64,6 +65,11 @@
         SimulatorSimCallManager.addNewOutgoingCall(context, callerId, false /* isVideo */);
   }
 
+  private void addNewEmergencyCall() {
+    String callerId = "911";
+    connectionTag = SimulatorSimCallManager.addNewIncomingCall(context, callerId, false);
+  }
+
   @Override
   public void onNewOutgoingConnection(@NonNull SimulatorConnection connection) {
     if (isMyConnection(connection)) {
