diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
index 458c052..dba43a2 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
@@ -42,6 +42,7 @@
 import com.android.dialer.voicemail.listui.error.VoicemailErrorMessageCreator;
 import com.android.dialer.voicemail.listui.error.VoicemailStatus;
 import com.android.dialer.voicemail.listui.error.VoicemailStatusWorker;
+import com.android.dialer.widget.EmptyContentView;
 import java.util.List;
 
 public class VisualVoicemailCallLogFragment extends CallLogFragment {
@@ -110,6 +111,9 @@
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
     View view = inflater.inflate(R.layout.call_log_fragment, container, false);
     setupView(view);
+    EmptyContentView emptyContentView = view.findViewById(R.id.empty_list_view);
+    emptyContentView.setImage(R.drawable.quantum_ic_voicemail_vd_theme_24);
+    emptyContentView.setImageTint(R.color.empty_voicemail_icon_tint_color, null);
     return view;
   }
 
diff --git a/java/com/android/dialer/widget/res/drawable/searchedittext_custom_cursor.xml b/java/com/android/dialer/widget/res/drawable/edittext_custom_cursor.xml
similarity index 100%
rename from java/com/android/dialer/widget/res/drawable/searchedittext_custom_cursor.xml
rename to java/com/android/dialer/widget/res/drawable/edittext_custom_cursor.xml
diff --git a/java/com/android/dialer/widget/res/drawable/item_background_material_light.xml b/java/com/android/dialer/widget/res/drawable/ripple_material_light.xml
similarity index 86%
rename from java/com/android/dialer/widget/res/drawable/item_background_material_light.xml
rename to java/com/android/dialer/widget/res/drawable/ripple_material_light.xml
index 6e524ac..175624c 100644
--- a/java/com/android/dialer/widget/res/drawable/item_background_material_light.xml
+++ b/java/com/android/dialer/widget/res/drawable/ripple_material_light.xml
@@ -15,10 +15,9 @@
   ~ limitations under the License
   -->
 
-<!-- Based on the Theme.Material's default selectableItemBackground -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-  android:color="@color/dialer_ripple_material_light">
+    android:color="@color/dialer_ripple_material_light">
   <item android:id="@android:id/mask">
     <color android:color="@android:color/white"/>
   </item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/java/com/android/dialer/widget/res/layout/fragment_message.xml b/java/com/android/dialer/widget/res/layout/fragment_message.xml
index bdb85fa..ac62dd9 100644
--- a/java/com/android/dialer/widget/res/layout/fragment_message.xml
+++ b/java/com/android/dialer/widget/res/layout/fragment_message.xml
@@ -55,7 +55,7 @@
       android:textColor="@color/dialer_primary_text_color"
       android:textColorHint="@color/dialer_edit_text_hint_color"
       android:background="@color/background_dialer_white"
-      android:textCursorDrawable="@drawable/searchedittext_custom_cursor"
+      android:textCursorDrawable="@drawable/edittext_custom_cursor"
       android:layout_toStartOf="@+id/count_and_send_container"
       android:inputType="textShortMessage|textCapSentences"
       android:imeOptions="flagNoExtractUi|actionSend"/>
diff --git a/java/com/android/dialer/widget/res/layout/selectable_text_view.xml b/java/com/android/dialer/widget/res/layout/selectable_text_view.xml
index 3d120d1..9cdb162 100644
--- a/java/com/android/dialer/widget/res/layout/selectable_text_view.xml
+++ b/java/com/android/dialer/widget/res/layout/selectable_text_view.xml
@@ -22,4 +22,4 @@
   android:textSize="16sp"
   android:textColor="@color/dialer_primary_text_color"
   android:padding="16dp"
-  android:background="@drawable/item_background_material_light"/>
\ No newline at end of file
+  android:background="@drawable/ripple_material_light"/>
\ No newline at end of file
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index b5e76ee..7ea2fad 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -271,6 +271,7 @@
   private SpeakEasyCallManager speakEasyCallManager;
 
   private boolean shouldStartInBubbleMode;
+  private boolean audioRouteSetForBubbleMode;
 
   /** Inaccessible constructor. Must use getRunningInstance() to get this singleton. */
   @VisibleForTesting
@@ -1498,6 +1499,7 @@
       showInCall(false /* showDialpad */, !showAccountPicker /* newOutgoingCall */);
     } else if (newState == InCallState.NO_CALLS) {
       // The new state is the no calls state.  Tear everything down.
+      inCallState = newState;
       attemptFinishActivity();
       attemptCleanup();
     }
@@ -1554,6 +1556,7 @@
       isChangingConfigurations = false;
 
       shouldStartInBubbleMode = false;
+      audioRouteSetForBubbleMode = false;
 
       // blow away stale contact info so that we get fresh data on
       // the next set of calls
@@ -1834,11 +1837,41 @@
 
   @Override
   public void onAudioStateChanged(CallAudioState audioState) {
+    // Set sensible audio route for bubble mode when we get real audio state for the first time
+    // During the first time this function is called, supportedRouteMask is set to
+    // SUPPORTED_AUDIO_ROUTE_ALL, but it's OK since shouldStartInBubbleMode is not set at that time.
+    if (!audioRouteSetForBubbleMode && shouldStartInBubbleMode) {
+      setAudioRouteForBubbleMode(audioState);
+      audioRouteSetForBubbleMode = true;
+    }
+
     if (statusBarNotifier != null) {
       statusBarNotifier.updateNotification();
     }
   }
 
+  /**
+   * Set audio route to make audio sensible. According to availability, set audio route to Bluetooth
+   * or wired headset or speaker.
+   */
+  private void setAudioRouteForBubbleMode(CallAudioState audioState) {
+    if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH)
+        == CallAudioState.ROUTE_BLUETOOTH) {
+      // Use Bluetooth if available
+      TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);
+      LogUtil.i("InCallPrenter.setAudioRouteForBubbleMode", "bluetooth");
+    } else if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_WIRED_HEADSET)
+        == CallAudioState.ROUTE_WIRED_HEADSET) {
+      // Use wired headset if available
+      TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_WIRED_HEADSET);
+      LogUtil.i("InCallPrenter.setAudioRouteForBubbleMode", "wired headset");
+    } else {
+      // Use speaker
+      TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_SPEAKER);
+      LogUtil.i("InCallPrenter.setAudioRouteForBubbleMode", "speaker");
+    }
+  }
+
   /** All the main states of InCallActivity. */
   public enum InCallState {
     // InCall Screen is off and there are no calls
