Merge changes I0b267429,Icba3cb63,If2090c6d

* changes:
  Resolve resource conflicts.
  Change voicemail empty state icon to voicemail icon.
  Use sensible audio route for bubble mode.
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