Merge changes Ib3ed6636,I10e10124,I84dbef78,I7ba7b0d8,Id00e8e3e
am: b394d18d9f

Change-Id: I574ed8805a1ee5ddc29ff190c83f4bbc5fc6f34f
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
index 930edd1..5575cac 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
@@ -127,6 +127,12 @@
   public void onPause() {
     voicemailPlaybackPresenter.onPause();
     voicemailErrorManager.onPause();
+    // Necessary to reset the speaker when leaving otherwise the platform will still remain in
+    // speaker mode
+    AudioManager audioManager = getContext().getSystemService(AudioManager.class);
+    if (audioManager.isSpeakerphoneOn()) {
+      audioManager.setSpeakerphoneOn(false);
+    }
     super.onPause();
   }
 
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index 6d1728f..6fc8d23 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -24,6 +24,7 @@
 import android.content.Intent;
 import android.database.ContentObserver;
 import android.database.Cursor;
+import android.media.AudioManager;
 import android.media.MediaPlayer;
 import android.net.Uri;
 import android.os.AsyncTask;
@@ -207,6 +208,8 @@
       position = savedInstanceState.getInt(CLIP_POSITION_KEY, 0);
       isPlaying = savedInstanceState.getBoolean(IS_PLAYING_STATE_KEY, false);
       isSpeakerphoneOn = savedInstanceState.getBoolean(IS_SPEAKERPHONE_ON_KEY, false);
+      AudioManager audioManager = activity.getSystemService(AudioManager.class);
+      audioManager.setSpeakerphoneOn(isSpeakerphoneOn);
     }
 
     if (mediaPlayer == null) {
diff --git a/java/com/android/dialer/calllog/config/CallLogConfigComponent.java b/java/com/android/dialer/calllog/config/CallLogConfigComponent.java
index c325025..7aaf638 100644
--- a/java/com/android/dialer/calllog/config/CallLogConfigComponent.java
+++ b/java/com/android/dialer/calllog/config/CallLogConfigComponent.java
@@ -17,6 +17,7 @@
 
 import android.content.Context;
 import com.android.dialer.inject.HasRootComponent;
+import com.android.dialer.inject.IncludeInDialerRoot;
 import dagger.Subcomponent;
 
 /** Dagger component for the call log config. */
@@ -31,6 +32,7 @@
   }
 
   /** Used to refer to the root application component. */
+  @IncludeInDialerRoot
   public interface HasComponent {
     CallLogConfigComponent callLogConfigComponent();
   }
diff --git a/java/com/android/dialer/duo/stub/StubDuoModule.java b/java/com/android/dialer/duo/stub/StubDuoModule.java
index 604406a..57c3570 100644
--- a/java/com/android/dialer/duo/stub/StubDuoModule.java
+++ b/java/com/android/dialer/duo/stub/StubDuoModule.java
@@ -17,11 +17,14 @@
 package com.android.dialer.duo.stub;
 
 import com.android.dialer.duo.Duo;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import dagger.Binds;
 import dagger.Module;
 import javax.inject.Singleton;
 
 @Module
+@InstallIn(variants = DialerVariant.DIALER_TEST)
 public abstract class StubDuoModule {
 
   @Binds
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 945e8a9..364f5bc 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -424,7 +424,10 @@
 
     searchFragment.setQuery(
         query.isPresent() ? query.get() : "", CallInitiationType.Type.REGULAR_SEARCH);
-    transaction.commit();
+
+    if (activity.isSafeToCommitTransactions()) {
+      transaction.commit();
+    }
 
     notifyListenersOnSearchOpen();
   }
diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java
index 998793e..72f0a68 100644
--- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java
+++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java
@@ -16,14 +16,12 @@
 
 package com.android.dialer.speeddial.loader;
 
-import android.annotation.TargetApi;
 import android.content.ContentProviderOperation;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.OperationApplicationException;
 import android.database.Cursor;
 import android.net.Uri;
-import android.os.Build.VERSION_CODES;
 import android.os.RemoteException;
 import android.os.Trace;
 import android.provider.ContactsContract;
@@ -40,7 +38,6 @@
 import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener;
 import com.android.dialer.common.concurrent.DialerFutureSerializer;
 import com.android.dialer.common.database.Selection;
-import com.android.dialer.duo.Duo;
 import com.android.dialer.duo.DuoComponent;
 import com.android.dialer.inject.ApplicationContext;
 import com.android.dialer.speeddial.database.SpeedDialEntry;
@@ -72,21 +69,17 @@
  *       <li>Remove any {@link SpeedDialEntry} that is no longer starred or whose contact was
  *           deleted.
  *       <li>Update each {@link SpeedDialEntry} contact id, lookup key and channel.
- *       <li>Build a list of {@link SpeedDialUiItem} from {@link Contacts#STREQUENT_PHONE_ONLY}.
- *       <li>If any starred contacts in that list aren't in the {@link
- *           SpeedDialEntryDatabaseHelper}, insert them now.
+ *       <li>Build a list of {@link SpeedDialUiItem} from starred contacts.
+ *       <li>If any contacts in that list aren't in the {@link SpeedDialEntryDatabaseHelper}, insert
+ *           them now.
  *       <li>Notify the {@link SuccessListener} of the complete list of {@link SpeedDialUiItem
  *           SpeedDialContacts} composed from {@link SpeedDialEntry SpeedDialEntries} and
  *           non-starred {@link Contacts#STREQUENT_PHONE_ONLY}.
  *     </ol>
  */
-@SuppressWarnings("AndroidApiChecker")
-@TargetApi(VERSION_CODES.N)
 @Singleton
 public final class SpeedDialUiItemMutator {
 
-  private static final int MAX_DUO_SUGGESTIONS = 3;
-
   private final Context appContext;
   private final ListeningExecutorService backgroundExecutor;
   // Used to ensure that only one refresh flow runs at a time.
@@ -104,8 +97,7 @@
 
   /**
    * Returns a {@link ListenableFuture} for a list of {@link SpeedDialUiItem SpeedDialUiItems}. This
-   * list is composed of starred contacts from {@link SpeedDialEntryDatabaseHelper} and suggestions
-   * from {@link Contacts#STREQUENT_PHONE_ONLY}.
+   * list is composed of starred contacts from {@link SpeedDialEntryDatabaseHelper}.
    */
   public ListenableFuture<ImmutableList<SpeedDialUiItem>> loadSpeedDialUiItems() {
     return dialerFutureSerializer.submit(this::loadSpeedDialUiItemsInternal, backgroundExecutor);
@@ -117,8 +109,7 @@
    * <p>If the item is starred, it's entry will be removed from the SpeedDialEntry database.
    * Additionally, if the contact only has one entry in the database, it will be unstarred.
    *
-   * <p>If the item isn't starred, it's usage data will be deleted but the suggestion can come back
-   * if the user calls that contact again.
+   * <p>If the item isn't starred, it's usage data will be deleted.
    *
    * @return the updated list of SpeedDialUiItems.
    */
@@ -281,27 +272,19 @@
     }
     Trace.endSection(); // updateOrDeleteEntries
 
-    // Get all Strequent Contacts
-    List<SpeedDialUiItem> strequentContacts = getStrequentContacts();
-
-    // For each contact, if it isn't starred, add it as a suggestion.
+    // Get all starred contacts
+    List<SpeedDialUiItem> starredContacts = getStarredContacts();
     // If it is starred and not already accounted for above, then insert into the SpeedDialEntry DB.
-    Trace.beginSection("addSuggestions");
-    for (SpeedDialUiItem contact : strequentContacts) {
-      if (!contact.isStarred()) {
-        // Add this contact as a suggestion
-        // TODO(77754534): improve suggestions beyond just first channel
-        speedDialUiItems.add(
-            contact.toBuilder().setDefaultChannel(contact.channels().get(0)).build());
-
-      } else if (speedDialUiItems.stream().noneMatch(c -> c.contactId() == contact.contactId())) {
+    Trace.beginSection("addStarredContact");
+    for (SpeedDialUiItem contact : starredContacts) {
+      if (speedDialUiItems.stream().noneMatch(c -> c.contactId() == contact.contactId())) {
         entriesToInsert.add(contact.buildSpeedDialEntry());
 
         // These are our newly starred contacts
         speedDialUiItems.add(contact);
       }
     }
-    Trace.endSection(); // addSuggestions
+    Trace.endSection(); // addStarredContact
 
     Trace.beginSection("insertUpdateAndDelete");
     ImmutableMap<SpeedDialEntry, Long> insertedEntriesToIdsMap =
@@ -339,7 +322,7 @@
       }
 
       // Starred contacts that aren't in the map, should already have speed dial entry ids.
-      // Non-starred contacts (suggestions) aren't in the speed dial entry database, so they
+      // Non-starred contacts aren't in the speed dial entry database, so they
       // shouldn't have speed dial entry ids.
       Assert.checkArgument(
           speedDialUiItem.isStarred() == (speedDialUiItem.speedDialEntryId() != null),
@@ -485,23 +468,29 @@
   }
 
   @WorkerThread
-  private List<SpeedDialUiItem> getStrequentContacts() {
+  private List<SpeedDialUiItem> getStarredContacts() {
     Trace.beginSection("getStrequentContacts");
     Assert.isWorkerThread();
     Set<String> contactIds = new ArraySet<>();
 
-    // Fetch the contact ids of all strequent contacts
+    // Fetch the contact ids of all starred contacts
     Uri strequentUri =
         Contacts.CONTENT_STREQUENT_URI
             .buildUpon()
             .appendQueryParameter(ContactsContract.STREQUENT_PHONE_ONLY, "true")
             .build();
+    Selection selection = Selection.column(Phone.STARRED).is("=", 1);
     try (Cursor cursor =
         appContext
             .getContentResolver()
-            .query(strequentUri, new String[] {Phone.CONTACT_ID}, null, null, null)) {
+            .query(
+                strequentUri,
+                new String[] {Phone.CONTACT_ID},
+                selection.getSelection(),
+                selection.getSelectionArgs(),
+                null)) {
       if (cursor == null) {
-        LogUtil.e("SpeedDialUiItemMutator.getStrequentContacts", "null cursor");
+        LogUtil.e("SpeedDialUiItemMutator.getStarredContacts", "null cursor");
         Trace.endSection();
         return new ArrayList<>();
       }
@@ -515,8 +504,7 @@
     }
 
     // Build SpeedDialUiItems from those contact ids
-    Selection selection =
-        Selection.builder().and(Selection.column(Phone.CONTACT_ID).in(contactIds)).build();
+    selection = Selection.builder().and(Selection.column(Phone.CONTACT_ID).in(contactIds)).build();
     try (Cursor cursor =
         appContext
             .getContentResolver()
@@ -624,24 +612,10 @@
       Context context, ImmutableList<SpeedDialUiItem> speedDialUiItems) {
     Assert.isMainThread();
 
-    Duo duo = DuoComponent.get(context).getDuo();
-    int maxDuoSuggestions = MAX_DUO_SUGGESTIONS;
-
     ImmutableList.Builder<SpeedDialUiItem> newSpeedDialItemList = ImmutableList.builder();
     // for each existing item
     for (SpeedDialUiItem item : speedDialUiItems) {
-      // If the item is a suggestion
-      if (!item.isStarred()) {
-        // And duo reachable, insert a duo suggestion
-        if (maxDuoSuggestions > 0 && duo.isReachable(context, item.defaultChannel().number())) {
-          maxDuoSuggestions--;
-          Channel defaultChannel =
-              item.defaultChannel().toBuilder().setTechnology(Channel.DUO).build();
-          newSpeedDialItemList.add(item.toBuilder().setDefaultChannel(defaultChannel).build());
-        }
-        // Insert the voice suggestion too
-        newSpeedDialItemList.add(item);
-      } else if (item.defaultChannel() == null) {
+      if (item.defaultChannel() == null) {
         // If the contact is starred and doesn't have a default channel, insert duo channels
         newSpeedDialItemList.add(insertDuoChannelsToStarredContact(context, item));
       } else {
diff --git a/java/com/android/dialer/theme/base/Theme.java b/java/com/android/dialer/theme/base/Theme.java
index 6e0d20a..2a9975b 100644
--- a/java/com/android/dialer/theme/base/Theme.java
+++ b/java/com/android/dialer/theme/base/Theme.java
@@ -17,6 +17,7 @@
 package com.android.dialer.theme.base;
 
 import android.content.Context;
+import android.content.res.ColorStateList;
 import android.support.annotation.ColorInt;
 import android.support.annotation.IntDef;
 import android.support.annotation.StyleRes;
@@ -50,6 +51,8 @@
   @ColorInt
   int getColorIcon();
 
+  ColorStateList getColorIconStateList();
+
   @ColorInt
   int getColorIconSecondary();
 
diff --git a/java/com/android/dialer/theme/base/impl/AospThemeImpl.java b/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
index c8f20c7..35dcef2 100644
--- a/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
+++ b/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
@@ -17,6 +17,7 @@
 package com.android.dialer.theme.base.impl;
 
 import android.content.Context;
+import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
 import android.support.annotation.ColorInt;
 import android.support.annotation.StyleRes;
@@ -33,6 +34,7 @@
 public class AospThemeImpl implements Theme {
 
   private int colorIcon = -1;
+  private final ColorStateList colorIconStateList;
   private int colorIconSecondary = -1;
   private int colorPrimary = -1;
   private int colorPrimaryDark = -1;
@@ -80,6 +82,7 @@
     colorBackground = array.getColor(/* index= */ 7, /* defValue= */ -1);
     colorBackgroundFloating = array.getColor(/* index= */ 8, /* defValue= */ -1);
     colorIcon = array.getColor(/* index= */ 9, /* defValue= */ -1);
+    colorIconStateList = array.getColorStateList(/* index= */ 9);
     colorIconSecondary = array.getColor(/* index= */ 10, /* defValue= */ -1);
     colorTextOnUnthemedDarkBackground = array.getColor(/* index= */ 11, /* defValue= */ -1);
     colorIconOnUnthemedDarkBackground = array.getColor(/* index= */ 12, /* defValue= */ -1);
@@ -126,6 +129,12 @@
   }
 
   @Override
+  public ColorStateList getColorIconStateList() {
+    Assert.checkArgument(colorIconStateList != null);
+    return colorIconStateList;
+  }
+
+  @Override
   public @ColorInt int getColorIconSecondary() {
     Assert.checkArgument(colorIconSecondary != -1);
     return colorIconSecondary;
diff --git a/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml b/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml
index 4b50340..142bb89 100644
--- a/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml
+++ b/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml
@@ -56,7 +56,7 @@
     <item name="colorControlActivated">?android:attr/colorPrimary</item>
 
     <!-- Dialer specific attributes. -->
-    <item name="colorIcon">@color/google_grey_400</item>
+    <item name="colorIcon">?android:attr/textColorSecondary</item>
     <item name="colorIconSecondary">?android:attr/textColorSecondary</item>
     <item name="colorTextOnUnthemedDarkBackground">@android:color/white</item>
     <item name="colorIconOnUnthemedDarkBackground">@android:color/white</item>
diff --git a/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml b/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml
index db06df4..e3eefe6 100644
--- a/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml
+++ b/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml
@@ -39,7 +39,7 @@
   <!-- Activities and Applications should inherit from one of the themes above. -->
   <style name="Dialer.ThemeBase">
     <!-- These values should be used to color all backgrounds. -->
-    <item name="android:colorBackground">@color/dialer_background_color</item>
+    <item name="android:colorBackground">@android:color/white</item>
     <item name="android:colorBackgroundFloating">@android:color/white</item>
 
     <!-- These values should be used to set text color. -->
@@ -61,7 +61,7 @@
     <item name="colorControlActivated">?android:attr/colorPrimary</item>
 
     <!-- Dialer specific attributes. -->
-    <item name="colorIcon">@color/google_grey_700</item>
+    <item name="colorIcon">@color/dialer_icon_color</item>
     <item name="colorIconSecondary">@color/google_grey_400</item>
     <item name="colorTextOnUnthemedDarkBackground">@android:color/white</item>
     <item name="colorIconOnUnthemedDarkBackground">@android:color/white</item>
diff --git a/java/com/android/dialer/theme/common/res/values/colors.xml b/java/com/android/dialer/theme/common/res/values/colors.xml
index 6fea436..770aa8c 100644
--- a/java/com/android/dialer/theme/common/res/values/colors.xml
+++ b/java/com/android/dialer/theme/common/res/values/colors.xml
@@ -17,7 +17,7 @@
 <!-- The colors in this file aren't configured at the theme level. -->
 <resources>
   <color name="dialer_call_green">#34A853</color>
-  <color name="dialer_end_call_button_color">#BD2A2A</color>
+  <color name="dialer_end_call_button_color">#D93025</color>
   <color name="dialer_divider_line_color">#D8D8D8</color>
   <color name="dialer_link_color">#2A56C6</color>
   <color name="dialer_snackbar_action_text_color">#4285F4</color>
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml
index 703e40b..f14537c 100644
--- a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml
@@ -17,5 +17,5 @@
 <!-- Primary text color in the Phone app -->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false" android:color="@color/google_grey_700"/>
-  <item android:color="@color/google_grey_400"/>
+  <item android:color="@color/google_grey_100"/>
 </selector>
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml
index 486669f..b94388a 100644
--- a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml
@@ -17,5 +17,5 @@
 <!-- Secondary text color in the Phone app -->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false" android:color="@color/google_grey_700"/>
-  <item android:color="@color/google_grey_300"/>
+  <item android:color="@color/google_grey_400"/>
 </selector>
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_icon_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_icon_color.xml
new file mode 100644
index 0000000..594f829
--- /dev/null
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_icon_color.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+  <item android:color="@android:color/white" android:state_checked="true"/>
+  <item android:color="@color/google_grey_400" android:state_enabled="false"/>
+  <item android:color="@color/google_grey_700"/>
+</selector>
diff --git a/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml b/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
index 988aad7..0ed8e75 100644
--- a/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
+++ b/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
@@ -19,5 +19,4 @@
   <color name="dialer_theme_color_20pct">#332A56C6</color>
   <color name="dialer_theme_color_dark">#1C3AA9</color>
   <color name="dialer_secondary_color">#F50057</color>
-  <color name="dialer_background_color">#FAFAFA</color>
 </resources>
diff --git a/java/com/android/dialer/theme/hidden/res/values/styles.xml b/java/com/android/dialer/theme/hidden/res/values/styles.xml
index 44a35f8..4543848 100644
--- a/java/com/android/dialer/theme/hidden/res/values/styles.xml
+++ b/java/com/android/dialer/theme/hidden/res/values/styles.xml
@@ -51,7 +51,6 @@
   <!-- Used to style all Dialer's AlertDialogs. Every button is awarded this for free if the parent
      activity's theme extends from Dialer.ThemeBase(.NoActionBar) or doesn't specify a theme. -->
   <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
-    <item name="android:textColorPrimary">@color/dialer_primary_text_color</item>
     <!-- TODO(a bug): figure out why ?android:attr/colorPrimary doesn't work here -->
     <item name="android:colorAccent">@color/dialer_theme_color</item>
     <item name="colorAccent">@color/dialer_theme_color</item>
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index a8b060d..274071a 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -429,11 +429,6 @@
       return;
     }
 
-    if (call != null) {
-      inCallButtonUi.updateInCallButtonUiColors(
-          InCallPresenter.getInstance().getThemeColorManager().getSecondaryColor());
-    }
-
     final boolean isEnabled =
         state.isConnectingOrConnected() && !state.isIncoming() && call != null;
     inCallButtonUi.setEnabled(isEnabled);
diff --git a/java/com/android/incallui/commontheme/res/drawable/answer_answer_background.xml b/java/com/android/incallui/commontheme/res/drawable/answer_answer_background.xml
index 090506a..bd5d5d3 100644
--- a/java/com/android/incallui/commontheme/res/drawable/answer_answer_background.xml
+++ b/java/com/android/incallui/commontheme/res/drawable/answer_answer_background.xml
@@ -1,10 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
   android:color="#80FFFFFF">
   <item>
     <shape
       android:shape="oval">
-      <solid android:color="#09ad00"/>
+      <solid android:color="@color/dialer_call_green"/>
     </shape>
   </item>
 </ripple>
diff --git a/java/com/android/incallui/commontheme/res/drawable/answer_decline_background.xml b/java/com/android/incallui/commontheme/res/drawable/answer_decline_background.xml
index abfd56e..8854de6 100644
--- a/java/com/android/incallui/commontheme/res/drawable/answer_decline_background.xml
+++ b/java/com/android/incallui/commontheme/res/drawable/answer_decline_background.xml
@@ -1,10 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
   android:color="#80FFFFFF">
   <item>
     <shape
       android:shape="oval">
-      <solid android:color="#DF0000"/>
+      <solid android:color="@color/dialer_end_call_button_color"/>
     </shape>
   </item>
 </ripple>
diff --git a/java/com/android/incallui/commontheme/res/drawable/incall_end_call_background.xml b/java/com/android/incallui/commontheme/res/drawable/incall_end_call_background.xml
index 3c9f4bc..8854de6 100644
--- a/java/com/android/incallui/commontheme/res/drawable/incall_end_call_background.xml
+++ b/java/com/android/incallui/commontheme/res/drawable/incall_end_call_background.xml
@@ -1,10 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
   android:color="#80FFFFFF">
   <item>
     <shape
       android:shape="oval">
-      <solid android:color="#FFDF0000"/>
+      <solid android:color="@color/dialer_end_call_button_color"/>
     </shape>
   </item>
 </ripple>
diff --git a/java/com/android/incallui/commontheme/res/values/styles.xml b/java/com/android/incallui/commontheme/res/values/styles.xml
index f2ec2cc..0c4c092 100644
--- a/java/com/android/incallui/commontheme/res/values/styles.xml
+++ b/java/com/android/incallui/commontheme/res/values/styles.xml
@@ -26,7 +26,7 @@
   </style>
 
   <style name="Dialer.Incall.TextAppearance.Label">
-    <item name="android:textColor">?android:attr/textColorPrimary</item>
+    <item name="android:textColor">?android:attr/textColorSecondary</item>
     <item name="android:textSize">12sp</item>
   </style>
 
diff --git a/java/com/android/incallui/incall/impl/CheckableLabeledButton.java b/java/com/android/incallui/incall/impl/CheckableLabeledButton.java
index bfc2781..4e8fa82 100644
--- a/java/com/android/incallui/incall/impl/CheckableLabeledButton.java
+++ b/java/com/android/incallui/incall/impl/CheckableLabeledButton.java
@@ -18,14 +18,11 @@
 
 import android.animation.AnimatorInflater;
 import android.content.Context;
-import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
-import android.graphics.Color;
 import android.graphics.PorterDuff.Mode;
 import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.annotation.ColorInt;
 import android.support.annotation.DrawableRes;
 import android.support.annotation.StringRes;
 import android.text.TextUtils.TruncateAt;
@@ -36,6 +33,7 @@
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import com.android.dialer.theme.base.ThemeComponent;
 
 /** A button to show on the incall screen */
 public class CheckableLabeledButton extends LinearLayout implements Checkable {
@@ -94,8 +92,7 @@
     iconView.setPadding(iconPadding, iconPadding, iconPadding, iconPadding);
     iconView.setImageDrawable(icon);
     iconView.setImageTintMode(Mode.SRC_IN);
-    iconView.setImageTintList(
-        getResources().getColorStateList(R.color.incall_button_icon, context.getTheme()));
+    iconView.setImageTintList(ThemeComponent.get(context).theme().getColorIconStateList());
 
     iconView.setBackground(
         getResources().getDrawable(R.drawable.incall_button_background, context.getTheme()));
@@ -134,13 +131,6 @@
     labelView.setAlpha(isEnabled() ? 1f : DISABLED_STATE_OPACITY);
   }
 
-  public void setCheckedColor(@ColorInt int color) {
-    iconView.setImageTintList(
-        new ColorStateList(
-            new int[][] {new int[] {android.R.attr.state_checked}, new int[] {}},
-            new int[] {color, Color.WHITE}));
-  }
-
   public Drawable getIconDrawable() {
     return iconView.getDrawable();
   }
diff --git a/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java b/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java
index a0eead1..db0b5b9 100644
--- a/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java
@@ -17,7 +17,6 @@
 package com.android.incallui.incall.impl;
 
 import android.os.Bundle;
-import android.support.annotation.ColorInt;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.util.ArraySet;
@@ -128,12 +127,6 @@
     return numVisibleButtons;
   }
 
-  public void updateButtonColor(@ColorInt int color) {
-    for (CheckableLabeledButton button : buttons) {
-      button.setCheckedColor(color);
-    }
-  }
-
   /** Interface to let the listener know the status of the button grid. */
   public interface OnButtonGridCreatedListener {
     void onButtonGridCreated(InCallButtonGridFragment inCallButtonGridFragment);
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 7f20b40..6e57058 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -23,7 +23,6 @@
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.os.Handler;
-import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
@@ -496,11 +495,6 @@
   }
 
   @Override
-  public void updateInCallButtonUiColors(@ColorInt int color) {
-    inCallButtonGridFragment.updateButtonColor(color);
-  }
-
-  @Override
   public Fragment getInCallButtonUiFragment() {
     return this;
   }
diff --git a/java/com/android/incallui/incall/impl/res/color/incall_button_icon.xml b/java/com/android/incallui/incall/impl/res/color/incall_button_icon.xml
index 000525f..292d91f9 100644
--- a/java/com/android/incallui/incall/impl/res/color/incall_button_icon.xml
+++ b/java/com/android/incallui/incall/impl/res/color/incall_button_icon.xml
@@ -16,6 +16,6 @@
   -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-  <item android:color="?android:attr/colorPrimaryDark" android:state_checked="true"/>
-  <item android:color="?android:attr/textColorPrimary"/>
+  <item android:color="?android:attr/colorBackground" android:state_checked="true"/>
+  <item android:color="?colorIcon"/>
 </selector>
diff --git a/java/com/android/incallui/incall/impl/res/drawable/incall_button_background_checked.xml b/java/com/android/incallui/incall/impl/res/drawable/incall_button_background_checked.xml
index 73c6947..0d8732b 100644
--- a/java/com/android/incallui/incall/impl/res/drawable/incall_button_background_checked.xml
+++ b/java/com/android/incallui/incall/impl/res/drawable/incall_button_background_checked.xml
@@ -1,5 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval">
-  <solid android:color="@color/incall_button_white"/>
+  <solid android:color="?android:attr/textColorSecondary"/>
 </shape>
diff --git a/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml b/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
index 9cc599d..d200547 100644
--- a/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
+++ b/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
@@ -41,8 +41,7 @@
           android:id="@id/contactgrid_avatar"
           android:layout_width="@dimen/incall_avatar_size"
           android:layout_height="@dimen/incall_avatar_size"
-          android:layout_marginBottom="8dp"
-          android:elevation="2dp"/>
+          android:layout_marginBottom="8dp"/>
 
       <include
           layout="@layout/incall_contactgrid_top_row"
diff --git a/java/com/android/incallui/incall/protocol/InCallButtonUi.java b/java/com/android/incallui/incall/protocol/InCallButtonUi.java
index 28dd84c..17d50bf 100644
--- a/java/com/android/incallui/incall/protocol/InCallButtonUi.java
+++ b/java/com/android/incallui/incall/protocol/InCallButtonUi.java
@@ -16,7 +16,6 @@
 
 package com.android.incallui.incall.protocol;
 
-import android.support.annotation.ColorInt;
 import android.support.v4.app.Fragment;
 import android.telecom.CallAudioState;
 
@@ -43,8 +42,6 @@
    */
   void updateButtonStates();
 
-  void updateInCallButtonUiColors(@ColorInt int color);
-
   Fragment getInCallButtonUiFragment();
 
   void showAudioRouteSelector();
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index e61ce3e..36235df 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -569,9 +569,6 @@
   public void updateButtonStates() {}
 
   @Override
-  public void updateInCallButtonUiColors(int color) {}
-
-  @Override
   public Fragment getInCallButtonUiFragment() {
     return this;
   }
diff --git a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
index f270eda..994363a 100644
--- a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
@@ -22,7 +22,6 @@
 import android.graphics.Point;
 import android.graphics.drawable.Animatable;
 import android.os.Bundle;
-import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -805,9 +804,6 @@
   }
 
   @Override
-  public void updateInCallButtonUiColors(@ColorInt int color) {}
-
-  @Override
   public Fragment getInCallButtonUiFragment() {
     return this;
   }
diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java
index 11b80ce..82226f3 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -30,7 +30,6 @@
 import android.renderscript.Element;
 import android.renderscript.RenderScript;
 import android.renderscript.ScriptIntrinsicBlur;
-import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -872,9 +871,6 @@
   }
 
   @Override
-  public void updateInCallButtonUiColors(@ColorInt int color) {}
-
-  @Override
   public Fragment getInCallButtonUiFragment() {
     return this;
   }