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/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/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index e426ed2..39a4371 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.bottomsheet.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..b608cd5
--- /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.bottomsheet.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/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/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 0e89ac7..4d737e5 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,
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 77e2ea3..4db5547 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;
     }
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 \
