diff --git a/java/com/android/dialer/calllog/CallLogModule.java b/java/com/android/dialer/calllog/CallLogModule.java
index 5657270..0e3a3be 100644
--- a/java/com/android/dialer/calllog/CallLogModule.java
+++ b/java/com/android/dialer/calllog/CallLogModule.java
@@ -22,11 +22,14 @@
 import com.android.dialer.calllog.datasources.phonelookup.PhoneLookupDataSource;
 import com.android.dialer.calllog.datasources.systemcalllog.SystemCallLogDataSource;
 import com.android.dialer.calllog.datasources.voicemail.VoicemailDataSource;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.google.common.collect.ImmutableList;
 import dagger.Module;
 import dagger.Provides;
 
 /** Dagger module which satisfies call log dependencies. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module(includes = CallLogDatabaseModule.class)
 public abstract class CallLogModule {
 
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java b/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java
index 7fd8132..69cc02b 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java
@@ -31,6 +31,7 @@
 import com.android.dialer.duo.Duo;
 import com.android.dialer.duo.DuoComponent;
 import com.android.dialer.logging.Logger;
+import com.android.dialer.promotion.RttPromotion;
 import com.android.dialer.storage.StorageComponent;
 import com.android.dialer.time.Clock;
 import java.lang.annotation.Retention;
@@ -173,6 +174,9 @@
   }
 
   private boolean shouldShowDuoDisclosureCard() {
+    if (new RttPromotion(activity).shouldShow()) {
+      return false;
+    }
     // Don't show the Duo disclosure card if
     // (1) Duo integration is not enabled on the device, or
     // (2) Duo is not activated.
diff --git a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_duo_disclosure_card.xml b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_duo_disclosure_card.xml
index 1e24c8b..a28101c 100644
--- a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_duo_disclosure_card.xml
+++ b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_duo_disclosure_card.xml
@@ -68,7 +68,7 @@
           android:layout_gravity="end"
           android:paddingLeft="14dp"
           android:paddingRight="14dp"
-          android:text="@string/new_call_log_duo_disclosure_card_ok"
+          android:text="@string/ok_got_it"
           android:textSize="14sp"/>
     </LinearLayout>
   </LinearLayout>
diff --git a/java/com/android/dialer/calllog/ui/res/values/strings.xml b/java/com/android/dialer/calllog/ui/res/values/strings.xml
index f04bffa..ec8d595 100644
--- a/java/com/android/dialer/calllog/ui/res/values/strings.xml
+++ b/java/com/android/dialer/calllog/ui/res/values/strings.xml
@@ -36,7 +36,4 @@
     Google Duo video calling lets you chat with friends and family face-to-face. Data charges may apply. <xliff:g example="Learn More">%1$s</xliff:g>
   </string>
 
-  <!-- Text on the button on the Duo disclosure card. [CHAR_LIMIT=30] -->
-  <string name="new_call_log_duo_disclosure_card_ok">OK, got it</string>
-
 </resources>
diff --git a/java/com/android/dialer/commandline/CommandLineComponent.java b/java/com/android/dialer/commandline/CommandLineComponent.java
index c9abc53..50a1ff2 100644
--- a/java/com/android/dialer/commandline/CommandLineComponent.java
+++ b/java/com/android/dialer/commandline/CommandLineComponent.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import com.android.dialer.function.Supplier;
 import com.android.dialer.inject.HasRootComponent;
+import com.android.dialer.inject.IncludeInDialerRoot;
 import com.google.common.collect.ImmutableMap;
 import dagger.Subcomponent;
 
@@ -34,6 +35,7 @@
   }
 
   /** Used to refer to the root application component. */
+  @IncludeInDialerRoot
   public interface HasComponent {
     CommandLineComponent commandLineComponent();
   }
diff --git a/java/com/android/dialer/commandline/CommandLineModule.java b/java/com/android/dialer/commandline/CommandLineModule.java
index c78de21..c3b58d1 100644
--- a/java/com/android/dialer/commandline/CommandLineModule.java
+++ b/java/com/android/dialer/commandline/CommandLineModule.java
@@ -23,12 +23,15 @@
 import com.android.dialer.commandline.impl.Help;
 import com.android.dialer.commandline.impl.Version;
 import com.android.dialer.function.Supplier;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.google.common.collect.ImmutableMap;
 import dagger.Module;
 import dagger.Provides;
 import javax.inject.Inject;
 
 /** Provides {@link Command} */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class CommandLineModule {
 
diff --git a/java/com/android/dialer/common/res/values/strings.xml b/java/com/android/dialer/common/res/values/strings.xml
index cc0594d..3bd21d5 100644
--- a/java/com/android/dialer/common/res/values/strings.xml
+++ b/java/com/android/dialer/common/res/values/strings.xml
@@ -21,4 +21,6 @@
   <string name="content_description_overflow">More options</string>
   <!-- Text for undo button in snackbar for voicemail deletion/blocking/unblocking number. [CHAR LIMIT=10] -->
   <string name="snackbar_undo">UNDO</string>
+  <!-- Text on button of "OK, got it". [CHAR_LIMIT=30] -->
+  <string name="ok_got_it">OK, got it</string>
 </resources>
diff --git a/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java b/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
index 54e9c9a..c68312f 100644
--- a/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
+++ b/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
@@ -102,6 +102,10 @@
     sharedPreferences.edit().putLong(PREF_PREFIX + key, value).apply();
   }
 
+  public void putString(String key, String value) {
+    sharedPreferences.edit().putString(PREF_PREFIX + key, value).apply();
+  }
+
   @Override
   public String getString(String key, String defaultValue) {
     // Reading shared prefs on the main thread is generally safe since a single instance is cached.
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index d48870d..8fb7533 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -478,12 +478,7 @@
     }
     digits.setContentDescription(null);
 
-    // TOOD(77908301): Investigate why this is the case
-    // It's not clear why digitsHint would be null when digits is initialized as the time, so adding
-    // a todo to investigate why.
-    if (digitsHint != null) {
-      digitsHint.setVisibility(View.GONE);
-    }
+    digitsHint.setVisibility(View.GONE);
   }
 
   /**
diff --git a/java/com/android/dialer/feedback/stub/StubFeedbackModule.java b/java/com/android/dialer/feedback/stub/StubFeedbackModule.java
index 49df09a..19f7e2e 100644
--- a/java/com/android/dialer/feedback/stub/StubFeedbackModule.java
+++ b/java/com/android/dialer/feedback/stub/StubFeedbackModule.java
@@ -20,6 +20,8 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.feedback.FeedbackSender;
 import com.android.dialer.inject.ApplicationContext;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.logging.LoggingBindings;
 import com.android.dialer.logging.LoggingBindingsFactory;
 import com.android.dialer.logging.LoggingBindingsStub;
@@ -28,6 +30,7 @@
 import dagger.Provides;
 
 /** Module which bind {@link com.android.dialer.feedback.stub.CallFeedbackListenerStub}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public class StubFeedbackModule {
 
diff --git a/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java b/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java
index 79629d6..d4199f0 100644
--- a/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java
+++ b/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java
@@ -17,11 +17,14 @@
 package com.android.dialer.glidephotomanager;
 
 import com.android.dialer.glidephotomanager.impl.GlidePhotoManagerImpl;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import dagger.Binds;
 import dagger.Module;
 import javax.inject.Singleton;
 
 /** Module for {@link GlidePhotoManagerComponent} */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class GlidePhotoManagerModule {
   @Binds
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 72c46cc..7d476c8 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -23,6 +23,7 @@
 import android.os.Bundle;
 import android.speech.RecognizerIntent;
 import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
 import android.support.design.widget.FloatingActionButton;
 import android.support.v7.app.AppCompatActivity;
 import android.text.TextUtils;
@@ -98,6 +99,9 @@
   private boolean callPlacedFromSearch;
   private boolean requestingPermission;
 
+  private DialpadFragment dialpadFragment;
+  private NewSearchFragment searchFragment;
+
   public MainSearchController(
       TransactionSafeActivity activity,
       BottomNavBar bottomNav,
@@ -122,7 +126,7 @@
       LogUtil.i("MainSearchController.showDialpadFromNewIntent", "Dialpad is already visible.");
 
       // Mark started from new intent in case there is a phone number in the intent
-      getDialpadFragment().setStartedFromNewIntent(true);
+      dialpadFragment.setStartedFromNewIntent(true);
       return;
     }
     showDialpad(/* animate=*/ false, /* fromNewIntent=*/ true);
@@ -150,7 +154,6 @@
     activity.setTitle(R.string.dialpad_activity_title);
 
     FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
-    NewSearchFragment searchFragment = getSearchFragment();
 
     // Show Search
     if (searchFragment == null) {
@@ -162,16 +165,14 @@
     }
 
     // Show Dialpad
-    if (getDialpadFragment() == null) {
-      DialpadFragment dialpadFragment = new DialpadFragment();
+    if (dialpadFragment == null) {
+      dialpadFragment = new DialpadFragment();
       dialpadFragment.setStartedFromNewIntent(fromNewIntent);
       transaction.add(R.id.dialpad_fragment_container, dialpadFragment, DIALPAD_FRAGMENT_TAG);
       searchFragment.setQuery("", CallInitiationType.Type.DIALPAD);
     } else {
-      DialpadFragment dialpadFragment = getDialpadFragment();
       dialpadFragment.setStartedFromNewIntent(fromNewIntent);
       transaction.show(dialpadFragment);
-      searchFragment.setQuery(dialpadFragment.getQuery(), CallInitiationType.Type.DIALPAD);
     }
     transaction.commit();
 
@@ -189,7 +190,6 @@
    */
   private void hideDialpad(boolean animate) {
     LogUtil.enterBlock("MainSearchController.hideDialpad");
-    DialpadFragment dialpadFragment = getDialpadFragment();
     if (dialpadFragment == null) {
       LogUtil.e("MainSearchController.hideDialpad", "Dialpad fragment is null.");
       return;
@@ -212,7 +212,7 @@
 
     fab.show();
     toolbar.slideDown(animate, fragmentContainer);
-    toolbar.transferQueryFromDialpad(getDialpadFragment().getQuery());
+    toolbar.transferQueryFromDialpad(dialpadFragment.getQuery());
     activity.setTitle(R.string.main_activity_label);
 
     dialpadFragment.setAnimate(animate);
@@ -246,7 +246,7 @@
   /** Should be called when {@link DialpadListener#onDialpadShown()} is called. */
   public void onDialpadShown() {
     LogUtil.enterBlock("MainSearchController.onDialpadShown");
-    getDialpadFragment().slideUp(true);
+    dialpadFragment.slideUp(true);
     hideBottomNav();
   }
 
@@ -263,7 +263,7 @@
   public void onSearchListTouch() {
     LogUtil.enterBlock("MainSearchController.onSearchListTouched");
     if (isDialpadVisible()) {
-      if (TextUtils.isEmpty(getDialpadFragment().getQuery())) {
+      if (TextUtils.isEmpty(dialpadFragment.getQuery())) {
         Logger.get(activity)
             .logImpression(
                 DialerImpression.Type.MAIN_TOUCH_DIALPAD_SEARCH_LIST_TO_CLOSE_SEARCH_AND_DIALPAD);
@@ -292,7 +292,7 @@
    * @return true if #onBackPressed() handled to action.
    */
   public boolean onBackPressed() {
-    if (isDialpadVisible() && !TextUtils.isEmpty(getDialpadFragment().getQuery())) {
+    if (isDialpadVisible() && !TextUtils.isEmpty(dialpadFragment.getQuery())) {
       LogUtil.i("MainSearchController.onBackPressed", "Dialpad visible with query");
       Logger.get(activity)
           .logImpression(DialerImpression.Type.MAIN_PRESS_BACK_BUTTON_TO_HIDE_DIALPAD);
@@ -315,7 +315,6 @@
   /** Calls {@link #hideDialpad(boolean)}, removes the search fragment and clears the dialpad. */
   private void closeSearch(boolean animate) {
     LogUtil.enterBlock("MainSearchController.closeSearch");
-    NewSearchFragment searchFragment = getSearchFragment();
     if (searchFragment == null) {
       LogUtil.e("MainSearchController.closeSearch", "Search fragment is null.");
       return;
@@ -342,7 +341,6 @@
     activity.getFragmentManager().beginTransaction().hide(searchFragment).commit();
 
     // Clear the dialpad so the phone number isn't persisted between search sessions.
-    DialpadFragment dialpadFragment = getDialpadFragment();
     if (dialpadFragment != null) {
       // Temporarily disable accessibility when we clear the dialpad, since it should be
       // invisible and should not announce anything.
@@ -360,25 +358,18 @@
 
   @Nullable
   protected DialpadFragment getDialpadFragment() {
-    return (DialpadFragment) activity.getFragmentManager().findFragmentByTag(DIALPAD_FRAGMENT_TAG);
-  }
-
-  @Nullable
-  private NewSearchFragment getSearchFragment() {
-    return (NewSearchFragment) activity.getFragmentManager().findFragmentByTag(SEARCH_FRAGMENT_TAG);
+    return dialpadFragment;
   }
 
   private boolean isDialpadVisible() {
-    DialpadFragment fragment = getDialpadFragment();
-    return fragment != null
-        && fragment.isAdded()
-        && !fragment.isHidden()
-        && fragment.isDialpadSlideUp();
+    return dialpadFragment != null
+        && dialpadFragment.isAdded()
+        && !dialpadFragment.isHidden()
+        && dialpadFragment.isDialpadSlideUp();
   }
 
   private boolean isSearchVisible() {
-    NewSearchFragment fragment = getSearchFragment();
-    return fragment != null && fragment.isAdded() && !fragment.isHidden();
+    return searchFragment != null && searchFragment.isAdded() && !searchFragment.isHidden();
   }
 
   /** Returns true if the search UI is visible. */
@@ -388,8 +379,7 @@
 
   /** Closes the keyboard if necessary. */
   private void closeKeyboard() {
-    NewSearchFragment fragment = getSearchFragment();
-    if (fragment != null && fragment.isAdded()) {
+    if (searchFragment != null && searchFragment.isAdded()) {
       toolbar.hideKeyboard();
     }
   }
@@ -418,15 +408,13 @@
     hideBottomNav();
 
     FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
-    NewSearchFragment searchFragment = getSearchFragment();
-
     // Show Search
     if (searchFragment == null) {
       searchFragment = NewSearchFragment.newInstance();
       transaction.add(R.id.search_fragment_container, searchFragment, SEARCH_FRAGMENT_TAG);
       transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
     } else if (!isSearchVisible()) {
-      transaction.show(getSearchFragment());
+      transaction.show(searchFragment);
     }
 
     searchFragment.setQuery(
@@ -444,20 +432,18 @@
 
   @Override
   public void onSearchQueryUpdated(String query) {
-    NewSearchFragment fragment = getSearchFragment();
-    if (fragment != null) {
-      fragment.setQuery(query, CallInitiationType.Type.REGULAR_SEARCH);
+    if (searchFragment != null) {
+      searchFragment.setQuery(query, CallInitiationType.Type.REGULAR_SEARCH);
     }
   }
 
   /** @see OnDialpadQueryChangedListener#onDialpadQueryChanged(java.lang.String) */
   public void onDialpadQueryChanged(String query) {
     query = SmartDialNameMatcher.normalizeNumber(/* context = */ activity, query);
-    NewSearchFragment fragment = getSearchFragment();
-    if (fragment != null) {
-      fragment.setQuery(query, CallInitiationType.Type.DIALPAD);
+    if (searchFragment != null) {
+      searchFragment.setQuery(query, CallInitiationType.Type.DIALPAD);
     }
-    getDialpadFragment().process_quote_emergency_unquote(query);
+    dialpadFragment.process_quote_emergency_unquote(query);
   }
 
   @Override
@@ -589,4 +575,14 @@
 
     void onSearchClose();
   }
+
+  @VisibleForTesting
+  void setDialpadFragment(DialpadFragment dialpadFragment) {
+    this.dialpadFragment = dialpadFragment;
+  }
+
+  @VisibleForTesting
+  void setSearchFragment(NewSearchFragment searchFragment) {
+    this.searchFragment = searchFragment;
+  }
 }
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index e426ed2..2d6b0a6 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -36,6 +36,7 @@
 import android.provider.VoicemailContract;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.design.widget.BottomSheetBehavior;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.Snackbar;
 import android.support.v4.content.ContextCompat;
@@ -46,9 +47,11 @@
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
 import android.view.DragEvent;
 import android.view.View;
 import android.widget.ImageView;
+import android.widget.TextView;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.dialer.animation.AnimUtils;
 import com.android.dialer.app.DialtactsActivity;
@@ -104,6 +107,8 @@
 import com.android.dialer.metrics.MetricsComponent;
 import com.android.dialer.postcall.PostCall;
 import com.android.dialer.precall.PreCall;
+import com.android.dialer.promotion.Promotion;
+import com.android.dialer.promotion.RttPromotion;
 import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener;
 import com.android.dialer.smartdial.util.SmartDialPrefix;
 import com.android.dialer.speeddial.SpeedDialFragment;
@@ -196,6 +201,7 @@
   private MissedCallCountObserver missedCallCountObserver;
   private UiListener<String> getLastOutgoingCallListener;
   private UiListener<Integer> missedCallObserverUiListener;
+  private View bottomSheet;
 
   public static Intent getShowTabIntent(Context context, @TabIndex int tabIndex) {
     Intent intent = new Intent(context, MainActivity.class);
@@ -240,6 +246,9 @@
     dialpadFragmentHostInterface = new MainDialpadFragmentHost();
 
     snackbarContainer = activity.findViewById(R.id.coordinator_layout);
+    bottomSheet = activity.findViewById(R.id.promotion_bottom_sheet);
+    BottomSheetBehavior<View> bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
+    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
 
     FloatingActionButton fab = activity.findViewById(R.id.fab);
     fab.setOnClickListener(
@@ -255,7 +264,11 @@
     bottomNav = activity.findViewById(R.id.bottom_nav_bar);
     bottomNavTabListener =
         new MainBottomNavBarBottomNavTabListener(
-            activity, activity.getFragmentManager(), activity.getSupportFragmentManager(), fab);
+            activity,
+            activity.getFragmentManager(),
+            activity.getSupportFragmentManager(),
+            fab,
+            bottomSheet);
     bottomNav.addOnTabSelectedListener(bottomNavTabListener);
     // TODO(uabdullah): Handle case of when a sim is inserted/removed while the activity is open.
     boolean showVoicemailTab = canVoicemailTabBeShown(activity);
@@ -1245,6 +1258,7 @@
     private final FragmentManager fragmentManager;
     private final android.support.v4.app.FragmentManager supportFragmentManager;
     private final FloatingActionButton fab;
+    private final View bottomSheet;
 
     @TabIndex private int selectedTab = -1;
 
@@ -1252,11 +1266,13 @@
         TransactionSafeActivity activity,
         FragmentManager fragmentManager,
         android.support.v4.app.FragmentManager supportFragmentManager,
-        FloatingActionButton fab) {
+        FloatingActionButton fab,
+        View bottomSheet) {
       this.activity = activity;
       this.fragmentManager = fragmentManager;
       this.supportFragmentManager = supportFragmentManager;
       this.fab = fab;
+      this.bottomSheet = bottomSheet;
     }
 
     @Override
@@ -1300,6 +1316,34 @@
         showFragment(fragment == null ? new CallLogFragment() : fragment, CALL_LOG_TAG);
       }
       fab.show();
+      showPromotionBottomSheet(activity, bottomSheet);
+    }
+
+    private static void showPromotionBottomSheet(Context context, View view) {
+      // TODO(a bug): Use a promotion manager to get promotion to show.
+      Promotion promotion = new RttPromotion(context);
+      BottomSheetBehavior<View> bottomSheetBehavior = BottomSheetBehavior.from(view);
+
+      if (!promotion.shouldShow()) {
+        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
+        return;
+      }
+      ImageView icon = view.findViewById(R.id.promotion_icon);
+      icon.setImageResource(promotion.getIconRes());
+      TextView details = view.findViewById(R.id.promotion_details);
+      details.setText(promotion.getDetails());
+      // Required to make link clickable.
+      details.setMovementMethod(LinkMovementMethod.getInstance());
+      TextView title = view.findViewById(R.id.promotion_title);
+      title.setText(promotion.getTitle());
+      view.findViewById(R.id.ok_got_it)
+          .setOnClickListener(
+              v -> {
+                promotion.dismiss();
+                bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
+              });
+      view.setVisibility(View.VISIBLE);
+      bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
     }
 
     void disableNewCallLogFragment() {
diff --git a/java/com/android/dialer/main/impl/res/layout/main_activity.xml b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
index a1d6e53..b47806e 100644
--- a/java/com/android/dialer/main/impl/res/layout/main_activity.xml
+++ b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
@@ -63,6 +63,9 @@
         android:src="@drawable/quantum_ic_dialpad_white_24"
         android:contentDescription="@string/dialpad_button_content_description"
         app:backgroundTint="?android:attr/colorAccent"/>
+
+    <include android:id="@+id/promotion_bottom_sheet"
+        layout="@layout/promotion_bottom_sheet"/>
   </android.support.design.widget.CoordinatorLayout>
 
   <!-- BottomNavBar -->
diff --git a/java/com/android/dialer/main/impl/res/layout/promotion_bottom_sheet.xml b/java/com/android/dialer/main/impl/res/layout/promotion_bottom_sheet.xml
new file mode 100644
index 0000000..3f1e709
--- /dev/null
+++ b/java/com/android/dialer/main/impl/res/layout/promotion_bottom_sheet.xml
@@ -0,0 +1,81 @@
+<?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
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="24dp"
+    android:paddingBottom="8dp"
+    android:paddingStart="16dp"
+    android:paddingEnd="24dp"
+    android:background="#FAFAFA"
+    android:clickable="true"
+    android:elevation="8dp"
+    android:orientation="horizontal"
+    android:visibility="gone"
+    app:behavior_hideable="true"
+    app:behavior_skipCollapsed="true"
+    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
+    app:layout_insetEdge="bottom">
+
+  <ImageView
+      android:id="@+id/promotion_icon"
+      android:layout_width="36dp"
+      android:layout_height="36dp"
+      android:tint="@color/dialer_theme_color"/>
+  <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:paddingStart="32dp"
+      android:orientation="vertical">
+    <TextView
+        android:id="@+id/promotion_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fontFamily="sans-serif-medium"
+        android:textColor="#DD000000"
+        android:textSize="16sp"
+        />
+    <TextView
+        android:id="@+id/promotion_details"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:layout_marginBottom="16dp"
+        android:lineSpacingMultiplier="1.5"
+        android:textColor="#DD000000"
+        android:textSize="14sp"/>
+    <Button
+        android:id="@+id/ok_got_it"
+        style="@style/Widget.AppCompat.Button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:layout_marginBottom="8dp"
+        android:layout_gravity="end"
+        android:paddingStart="16dp"
+        android:paddingEnd="16dp"
+        android:backgroundTint="@color/dialer_theme_color"
+        android:fontFamily="sans-serif-medium"
+        android:stateListAnimator="@null"
+        android:text="@string/ok_got_it"
+        android:textColor="@android:color/white"
+        android:textSize="16sp"/>
+  </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/java/com/android/dialer/metrics/StubMetricsModule.java b/java/com/android/dialer/metrics/StubMetricsModule.java
index a2d9ebf..46b2b4d 100644
--- a/java/com/android/dialer/metrics/StubMetricsModule.java
+++ b/java/com/android/dialer/metrics/StubMetricsModule.java
@@ -16,10 +16,13 @@
 
 package com.android.dialer.metrics;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import dagger.Binds;
 import dagger.Module;
 
 /** Binds stub {@link Metrics}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public interface StubMetricsModule {
 
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupComponent.java b/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
index 832587c..70743c8 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
@@ -17,6 +17,7 @@
 
 import android.content.Context;
 import com.android.dialer.inject.HasRootComponent;
+import com.android.dialer.inject.IncludeInDialerRoot;
 import com.android.dialer.phonelookup.composite.CompositePhoneLookup;
 import dagger.Subcomponent;
 
@@ -32,6 +33,7 @@
   }
 
   /** Used to refer to the root application component. */
+  @IncludeInDialerRoot
   public interface HasComponent {
     PhoneLookupComponent phoneLookupComponent();
   }
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
index 16aa8e5..6d5ffd2 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupModule.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
@@ -16,6 +16,8 @@
 
 package com.android.dialer.phonelookup;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.phonelookup.blockednumber.SystemBlockedNumberPhoneLookup;
 import com.android.dialer.phonelookup.cequint.CequintPhoneLookup;
 import com.android.dialer.phonelookup.cnap.CnapPhoneLookup;
@@ -28,6 +30,7 @@
 import dagger.Provides;
 
 /** Dagger module which binds the PhoneLookup implementation. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class PhoneLookupModule {
 
diff --git a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java
index 3878ac5..db4f7fa 100644
--- a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java
+++ b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java
@@ -16,12 +16,15 @@
 
 package com.android.dialer.phonenumbergeoutil.impl;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtil;
 import dagger.Binds;
 import dagger.Module;
 import javax.inject.Singleton;
 
 /** Module which binds {@link PhoneNumberGeoUtilImpl}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class PhoneNumberGeoUtilModule {
 
diff --git a/java/com/android/dialer/precall/impl/PreCallModule.java b/java/com/android/dialer/precall/impl/PreCallModule.java
index 455453e..fa78cba 100644
--- a/java/com/android/dialer/precall/impl/PreCallModule.java
+++ b/java/com/android/dialer/precall/impl/PreCallModule.java
@@ -16,6 +16,8 @@
 
 package com.android.dialer.precall.impl;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.precall.PreCall;
 import com.android.dialer.precall.PreCallAction;
 import com.google.common.collect.ImmutableList;
@@ -25,6 +27,7 @@
 import javax.inject.Singleton;
 
 /** Dagger module for {@link PreCall}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class PreCallModule {
 
diff --git a/java/com/android/dialer/promotion/AndroidManifest.xml b/java/com/android/dialer/promotion/AndroidManifest.xml
new file mode 100644
index 0000000..bd85b10
--- /dev/null
+++ b/java/com/android/dialer/promotion/AndroidManifest.xml
@@ -0,0 +1,16 @@
+<!--
+ ~ 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
+ -->
+<manifest package="com.android.dialer.promotion"/>
diff --git a/java/com/android/dialer/promotion/Promotion.java b/java/com/android/dialer/promotion/Promotion.java
new file mode 100644
index 0000000..3cd16d4
--- /dev/null
+++ b/java/com/android/dialer/promotion/Promotion.java
@@ -0,0 +1,39 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.promotion;
+
+import android.support.annotation.DrawableRes;
+
+/** Interface for promotion bottom sheet. */
+public interface Promotion {
+
+  /** Returns if this promotion should be shown. */
+  boolean shouldShow();
+
+  /** Sets to show this promotion. */
+  void setShouldShow(boolean shouldShow);
+
+  /** Dismisses this promotion. This is called when user acknowledged the promotion. */
+  void dismiss();
+
+  CharSequence getTitle();
+
+  CharSequence getDetails();
+
+  @DrawableRes
+  int getIconRes();
+}
diff --git a/java/com/android/dialer/promotion/RttPromotion.java b/java/com/android/dialer/promotion/RttPromotion.java
new file mode 100644
index 0000000..feb6e47
--- /dev/null
+++ b/java/com/android/dialer/promotion/RttPromotion.java
@@ -0,0 +1,84 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.promotion;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.support.annotation.DrawableRes;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.spannable.ContentWithLearnMoreSpanner;
+import com.android.dialer.storage.StorageComponent;
+
+/** RTT promotion. */
+public final class RttPromotion implements Promotion {
+  private static final String SHARED_PREFERENCE_KEY_ENABLED = "rtt_promotion_enabled";
+  private static final String SHARED_PREFERENCE_KEY_DISMISSED = "rtt_promotion_dismissed";
+  private final Context appContext;
+
+  public RttPromotion(Context context) {
+    appContext = context.getApplicationContext();
+  }
+
+  @Override
+  public boolean shouldShow() {
+    SharedPreferences sharedPreferences = StorageComponent.get(appContext).unencryptedSharedPrefs();
+    return sharedPreferences.getBoolean(SHARED_PREFERENCE_KEY_ENABLED, false)
+        && !sharedPreferences.getBoolean(SHARED_PREFERENCE_KEY_DISMISSED, false);
+  }
+
+  @Override
+  public CharSequence getTitle() {
+    return appContext.getString(R.string.rtt_promotion_title);
+  }
+
+  @Override
+  public CharSequence getDetails() {
+    return new ContentWithLearnMoreSpanner(appContext)
+        .create(
+            appContext.getString(R.string.rtt_promotion_details),
+            ConfigProviderBindings.get(appContext)
+                .getString(
+                    "rtt_promo_learn_more_link_full_url",
+                    "http://support.google.com/pixelphone/?p=dialer_rtt"));
+  }
+
+  @Override
+  @DrawableRes
+  public int getIconRes() {
+    return R.drawable.quantum_ic_rtt_vd_theme_24;
+  }
+
+  @Override
+  public void setShouldShow(boolean shouldShow) {
+    LogUtil.i("RttPromotion.setShouldShow", "shouldShow: %b", shouldShow);
+    StorageComponent.get(appContext)
+        .unencryptedSharedPrefs()
+        .edit()
+        .putBoolean(SHARED_PREFERENCE_KEY_ENABLED, shouldShow)
+        .apply();
+  }
+
+  @Override
+  public void dismiss() {
+    StorageComponent.get(appContext)
+        .unencryptedSharedPrefs()
+        .edit()
+        .putBoolean(SHARED_PREFERENCE_KEY_DISMISSED, true)
+        .apply();
+  }
+}
diff --git a/java/com/android/dialer/promotion/res/values/strings.xml b/java/com/android/dialer/promotion/res/values/strings.xml
new file mode 100644
index 0000000..6336715
--- /dev/null
+++ b/java/com/android/dialer/promotion/res/values/strings.xml
@@ -0,0 +1,26 @@
+<?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
+  -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <!-- Title for RTT promotion dialog. [CHAR LIMIT=NONE] -->
+  <string name="rtt_promotion_title">Real-time text messaging within a call</string>
+
+  <!-- Details for RTT promotion dialog. [CHAR LIMIT=NONE] -->
+  <string name="rtt_promotion_details">RTT assists callers who are deaf, hard of hearing, have a speech
+    disability, or need more than voice alone. RTT messaging transcripts are stored on your device
+    in the call history. <xliff:g exmaple="Learn More">%1$s</xliff:g></string>
+
+</resources>
diff --git a/java/com/android/dialer/simulator/impl/SimulatorModule.java b/java/com/android/dialer/simulator/impl/SimulatorModule.java
index 2bc72c9..af554b6 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorModule.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorModule.java
@@ -16,6 +16,8 @@
 
 package com.android.dialer.simulator.impl;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.SimulatorConnectionsBank;
 import dagger.Binds;
@@ -23,6 +25,7 @@
 import javax.inject.Singleton;
 
 /** This module provides an instance of the simulator. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class SimulatorModule {
   @Binds
diff --git a/java/com/android/dialer/simulator/stub/StubSimulatorEnrichedCallModule.java b/java/com/android/dialer/simulator/stub/StubSimulatorEnrichedCallModule.java
index 36314e7..6a002f0 100644
--- a/java/com/android/dialer/simulator/stub/StubSimulatorEnrichedCallModule.java
+++ b/java/com/android/dialer/simulator/stub/StubSimulatorEnrichedCallModule.java
@@ -16,12 +16,15 @@
 
 package com.android.dialer.simulator.stub;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.simulator.SimulatorEnrichedCall;
 import dagger.Binds;
 import dagger.Module;
 import javax.inject.Singleton;
 
 /** Provides a stub instance of SimulatorEnrichedCall. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class StubSimulatorEnrichedCallModule {
   @Binds
diff --git a/java/com/android/dialer/spam/status/SimpleSpamStatus.java b/java/com/android/dialer/spam/status/SimpleSpamStatus.java
index ec28b9d..ff080ed 100644
--- a/java/com/android/dialer/spam/status/SimpleSpamStatus.java
+++ b/java/com/android/dialer/spam/status/SimpleSpamStatus.java
@@ -33,4 +33,10 @@
   public static SimpleSpamStatus notSpam() {
     return create(false, null);
   }
+
+  /** Returns an empty {@link SpamMetadata}. */
+  @Override
+  public final SpamMetadata getSpamMetadata() {
+    return SpamMetadata.empty();
+  }
 }
diff --git a/java/com/android/dialer/spam/status/SpamMetadata.java b/java/com/android/dialer/spam/status/SpamMetadata.java
new file mode 100644
index 0000000..40feba1
--- /dev/null
+++ b/java/com/android/dialer/spam/status/SpamMetadata.java
@@ -0,0 +1,52 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.spam.status;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Optional;
+
+/**
+ * Holds information which can be used to determine a number's spam status.
+ *
+ * @see SpamStatus
+ */
+@AutoValue
+public abstract class SpamMetadata {
+
+  /** Returns an empty spam metadata, no optional data is set. */
+  public static SpamMetadata empty() {
+    return builder().build();
+  }
+
+  public static SpamMetadata.Builder builder() {
+    return new AutoValue_SpamMetadata.Builder();
+  }
+
+  public abstract Optional<GlobalSpamListStatus> globalSpamListStatus();
+
+  public abstract Optional<UserSpamListStatus> userSpamListStatus();
+
+  /** Creates instances of SpamMetadata. */
+  @AutoValue.Builder
+  public abstract static class Builder {
+    public abstract Builder setGlobalSpamListStatus(GlobalSpamListStatus globalSpamListStatus);
+
+    public abstract Builder setUserSpamListStatus(UserSpamListStatus userSpamListStatus);
+
+    public abstract SpamMetadata build();
+  }
+}
diff --git a/java/com/android/dialer/spam/status/SpamStatus.java b/java/com/android/dialer/spam/status/SpamStatus.java
index 8186ac5..10e8213 100644
--- a/java/com/android/dialer/spam/status/SpamStatus.java
+++ b/java/com/android/dialer/spam/status/SpamStatus.java
@@ -37,4 +37,7 @@
    * </ul>
    */
   Optional<Long> getTimestampMillis();
+
+  /** Returns the {@link SpamMetadata} associated with this status. */
+  SpamMetadata getSpamMetadata();
 }
diff --git a/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java b/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java
index 6ece874..ac6416c 100644
--- a/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java
+++ b/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java
@@ -16,12 +16,15 @@
 
 package com.android.dialer.strictmode.impl;
 
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.dialer.strictmode.DialerStrictMode;
 import dagger.Binds;
 import dagger.Module;
 import javax.inject.Singleton;
 
 /** Module which binds {@link SystemDialerStrictMode}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class SystemStrictModeModule {
 
diff --git a/java/com/android/incallui/AnswerScreenPresenter.java b/java/com/android/incallui/AnswerScreenPresenter.java
index e41bac6..8b789f3 100644
--- a/java/com/android/incallui/AnswerScreenPresenter.java
+++ b/java/com/android/incallui/AnswerScreenPresenter.java
@@ -176,9 +176,6 @@
       return;
     }
     incomingCall.setIsSpeakEasyCall(true);
-    InCallActivity inCallActivity =
-        (InCallActivity) answerScreen.getAnswerScreenFragment().getActivity();
-    inCallActivity.onPrimaryCallStateChanged();
   }
 
   @Override
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 98f0019..70ba71b 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -1247,13 +1247,13 @@
     ShouldShowUiResult shouldShowSpeakEasyUi = getShouldShowSpeakEasyUi();
     LogUtil.i(
         "InCallActivity.showMainInCallFragment",
-        "shouldShowAnswerUi: %b, shouldShowRttUi: %b, shouldShowVideoUi: %b "
-            + "didShowAnswerScreen: %b, didShowInCallScreen: %b, didShowRttCallScreen: %b, "
-            + "didShowVideoCallScreen: %b"
-            + "didShowSpeakEasyScreen: %b",
+        "shouldShowAnswerUi: %b, shouldShowRttUi: %b, shouldShowVideoUi: %b, "
+            + "shouldShowSpeakEasyUi: %b, didShowAnswerScreen: %b, didShowInCallScreen: %b, "
+            + "didShowRttCallScreen: %b, didShowVideoCallScreen: %b, didShowSpeakEasyScreen: %b",
         shouldShowAnswerUi.shouldShow,
         shouldShowRttUi.shouldShow,
         shouldShowVideoUi.shouldShow,
+        shouldShowSpeakEasyUi.shouldShow,
         didShowAnswerScreen,
         didShowInCallScreen,
         didShowRttCallScreen,
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index ccc5648..da5d20f 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -990,6 +990,13 @@
   }
 
   @Override
+  public void onSpeakEasyStateChange() {
+    if (inCallActivity != null) {
+      inCallActivity.onPrimaryCallStateChanged();
+    }
+  }
+
+  @Override
   public void onSessionModificationStateChange(DialerCall call) {
     int newState = call.getVideoTech().getSessionModificationState();
     LogUtil.i("InCallPresenter.onSessionModificationStateChange", "state: %d", newState);
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 0e89ac7..13be252 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -39,6 +39,7 @@
 import com.android.dialer.logging.Logger;
 import com.android.dialer.metrics.Metrics;
 import com.android.dialer.metrics.MetricsComponent;
+import com.android.dialer.promotion.RttPromotion;
 import com.android.dialer.shortcuts.ShortcutUsageReporter;
 import com.android.dialer.spam.Spam;
 import com.android.dialer.spam.SpamComponent;
@@ -226,6 +227,9 @@
     if (call.getState() == DialerCallState.INCOMING
         || call.getState() == DialerCallState.CALL_WAITING) {
       if (call.isActiveRttCall()) {
+        if (!call.isPhoneAccountRttCapable()) {
+          new RttPromotion(context).setShouldShow(true);
+        }
         Logger.get(context)
             .logCallImpression(
                 DialerImpression.Type.INCOMING_RTT_CALL,
@@ -816,6 +820,9 @@
      */
     default void onUpgradeToRtt(DialerCall call, int rttRequestId) {}
 
+    /** Called when the SpeakEasy state of a Dialer call is mutated. */
+    default void onSpeakEasyStateChange() {}
+
     /** Called when the session modification state of a call changes. */
     void onSessionModificationStateChange(DialerCall call);
 
@@ -894,6 +901,13 @@
     }
 
     @Override
+    public void onDialerCallSpeakEasyStateChange() {
+      for (Listener listener : listeners) {
+        listener.onSpeakEasyStateChange();
+      }
+    }
+
+    @Override
     public void onDialerCallUpgradeToVideo() {
       for (Listener listener : listeners) {
         listener.onUpgradeToVideo(call);
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 77e2ea3..431634a 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -1067,7 +1067,7 @@
   }
 
   @TargetApi(28)
-  public boolean canUpgradeToRttCall() {
+  public boolean isPhoneAccountRttCapable() {
     PhoneAccount phoneAccount = getPhoneAccount();
     if (phoneAccount == null) {
       return false;
@@ -1075,6 +1075,14 @@
     if (!phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_RTT)) {
       return false;
     }
+    return true;
+  }
+
+  @TargetApi(28)
+  public boolean canUpgradeToRttCall() {
+    if (!isPhoneAccountRttCapable()) {
+      return false;
+    }
     if (isActiveRttCall()) {
       return false;
     }
@@ -1718,6 +1726,11 @@
   /** Sets the user preference for SpeakEasy */
   public void setIsSpeakEasyCall(boolean isSpeakEasyCall) {
     this.isSpeakEasyCall = isSpeakEasyCall;
+    if (listeners != null) {
+      for (DialerCallListener listener : listeners) {
+        listener.onDialerCallSpeakEasyStateChange();
+      }
+    }
   }
 
   /**
diff --git a/java/com/android/incallui/call/DialerCallListener.java b/java/com/android/incallui/call/DialerCallListener.java
index 37c30d3..a42ccbd 100644
--- a/java/com/android/incallui/call/DialerCallListener.java
+++ b/java/com/android/incallui/call/DialerCallListener.java
@@ -31,6 +31,8 @@
 
   default void onDialerCallUpgradeToRtt(int rttRequestId) {}
 
+  default void onDialerCallSpeakEasyStateChange() {}
+
   void onDialerCallSessionModificationStateChange();
 
   void onWiFiToLteHandover();
diff --git a/java/com/android/incallui/calllocation/stub/StubCallLocationModule.java b/java/com/android/incallui/calllocation/stub/StubCallLocationModule.java
index 2046069..c60663b 100644
--- a/java/com/android/incallui/calllocation/stub/StubCallLocationModule.java
+++ b/java/com/android/incallui/calllocation/stub/StubCallLocationModule.java
@@ -20,12 +20,15 @@
 import android.support.annotation.NonNull;
 import android.support.v4.app.Fragment;
 import com.android.dialer.common.Assert;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.incallui.calllocation.CallLocation;
 import dagger.Binds;
 import dagger.Module;
 import javax.inject.Inject;
 
 /** This module provides an instance of call location. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class StubCallLocationModule {
 
diff --git a/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java b/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java
index 960692b..d5f6443 100644
--- a/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java
+++ b/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java
@@ -17,12 +17,15 @@
 package com.android.incallui.speakeasy;
 
 import android.support.v4.app.Fragment;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.google.common.base.Optional;
 import dagger.Binds;
 import dagger.Module;
 import dagger.Provides;
 
 /** Module which binds {@link SpeakEasyCallManagerStub}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public abstract class StubSpeakEasyModule {
 
diff --git a/java/com/android/voicemail/impl/VoicemailModule.java b/java/com/android/voicemail/impl/VoicemailModule.java
index e689e47..c4c72d3 100644
--- a/java/com/android/voicemail/impl/VoicemailModule.java
+++ b/java/com/android/voicemail/impl/VoicemailModule.java
@@ -19,6 +19,8 @@
 import android.content.Context;
 import android.support.v4.os.BuildCompat;
 import com.android.dialer.inject.ApplicationContext;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.VoicemailPermissionHelper;
 import com.android.voicemail.stub.StubVoicemailClient;
@@ -27,6 +29,7 @@
 import javax.inject.Singleton;
 
 /** This module provides an instance of the voicemail client. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
 @Module
 public final class VoicemailModule {
 
diff --git a/packages.mk b/packages.mk
index f310669..3f94af2 100644
--- a/packages.mk
+++ b/packages.mk
@@ -53,6 +53,7 @@
 	com.android.dialer.precall.externalreceiver \
 	com.android.dialer.preferredsim.impl \
 	com.android.dialer.preferredsim.suggestion \
+	com.android.dialer.promotion \
 	com.android.dialer.rtt \
 	com.android.dialer.searchfragment.common \
 	com.android.dialer.searchfragment.cp2 \
