diff --git a/assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml
new file mode 100644
index 0000000..f607d53
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ 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
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M21,6h-2v9L6,15v2c0,0.55 0.45,1 1,1h11l4,4L22,7c0,-0.55 -0.45,-1 -1,-1zM17,12L17,3c0,-0.55 -0.45,-1 -1,-1L3,2c-0.55,0 -1,0.45 -1,1v14l4,-4h10c0.55,0 1,-0.45 1,-1z"/>
+</vector>
diff --git a/java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java b/java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java
new file mode 100644
index 0000000..8f081be
--- /dev/null
+++ b/java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java
@@ -0,0 +1,29 @@
+/*
+ * 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.incallui.rtt.impl;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView.ViewHolder;
+import android.view.View;
+
+/** ViewHolder class for RTT advisory text. */
+public class AdvisoryViewHolder extends ViewHolder {
+
+  public AdvisoryViewHolder(@NonNull View itemView) {
+    super(itemView);
+  }
+}
diff --git a/java/com/android/incallui/rtt/impl/RttChatAdapter.java b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
index 6922663..f1cde75 100644
--- a/java/com/android/incallui/rtt/impl/RttChatAdapter.java
+++ b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
@@ -18,8 +18,10 @@
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.support.annotation.IntDef;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.RecyclerView.ViewHolder;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -27,11 +29,29 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.rtt.RttTranscript;
 import com.android.dialer.rtt.RttTranscriptMessage;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.List;
 
 /** Adapter class for holding RTT chat data. */
-public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolder> {
+public class RttChatAdapter extends RecyclerView.Adapter<ViewHolder> {
+
+  /** IntDef for the different types of rows that can be shown in the call log. */
+  @Retention(RetentionPolicy.SOURCE)
+  @IntDef({
+    RowType.ADVISORY,
+    RowType.MESSAGE,
+  })
+  @interface RowType {
+    /** The transcript advisory message. */
+    int ADVISORY = 1;
+
+    /** RTT chat message. */
+    int MESSAGE = 2;
+  }
+
+  private static final int POSITION_ADVISORY = 0;
 
   private Drawable avatarDrawable;
 
@@ -45,6 +65,7 @@
   private List<RttChatMessage> rttMessages = new ArrayList<>();
   private int lastIndexOfLocalMessage = -1;
   private final MessageListener messageListener;
+  private boolean shouldShowAdvisory;
 
   RttChatAdapter(Context context, MessageListener listener) {
     this.context = context;
@@ -52,29 +73,54 @@
   }
 
   @Override
-  public RttChatMessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+  public ViewHolder onCreateViewHolder(ViewGroup parent, @RowType int viewType) {
     LayoutInflater layoutInflater = LayoutInflater.from(context);
-    View view = layoutInflater.inflate(R.layout.rtt_chat_list_item, parent, false);
-    return new RttChatMessageViewHolder(view);
+    switch (viewType) {
+      case RowType.ADVISORY:
+        View view = layoutInflater.inflate(R.layout.rtt_transcript_advisory, parent, false);
+        return new AdvisoryViewHolder(view);
+      case RowType.MESSAGE:
+        view = layoutInflater.inflate(R.layout.rtt_chat_list_item, parent, false);
+        return new RttChatMessageViewHolder(view);
+      default:
+        throw new RuntimeException("Unknown row type.");
+    }
   }
 
   @Override
   public int getItemViewType(int position) {
-    return super.getItemViewType(position);
+    if (shouldShowAdvisory && position == POSITION_ADVISORY) {
+      return RowType.ADVISORY;
+    } else {
+      return RowType.MESSAGE;
+    }
   }
 
   @Override
-  public void onBindViewHolder(RttChatMessageViewHolder rttChatMessageViewHolder, int i) {
-    boolean isSameGroup = false;
-    if (i > 0) {
-      isSameGroup = rttMessages.get(i).isRemote == rttMessages.get(i - 1).isRemote;
+  public void onBindViewHolder(ViewHolder viewHolder, int itemPosition) {
+    switch (getItemViewType(itemPosition)) {
+      case RowType.ADVISORY:
+        return;
+      case RowType.MESSAGE:
+        RttChatMessageViewHolder rttChatMessageViewHolder = (RttChatMessageViewHolder) viewHolder;
+        int messagePosition = toMessagePosition(itemPosition);
+        boolean isSameGroup = false;
+        if (messagePosition > 0) {
+          isSameGroup =
+              rttMessages.get(messagePosition).isRemote
+                  == rttMessages.get(messagePosition - 1).isRemote;
+        }
+        rttChatMessageViewHolder.setMessage(
+            rttMessages.get(messagePosition), isSameGroup, avatarDrawable);
+        return;
+      default:
+        throw new RuntimeException("Unknown row type.");
     }
-    rttChatMessageViewHolder.setMessage(rttMessages.get(i), isSameGroup, avatarDrawable);
   }
 
   @Override
   public int getItemCount() {
-    return rttMessages.size();
+    return shouldShowAdvisory ? rttMessages.size() + 1 : rttMessages.size();
   }
 
   private void updateCurrentLocalMessage(String newMessage) {
@@ -96,11 +142,31 @@
         notifyItemRemoved(lastIndexOfLocalMessage);
         lastIndexOfLocalMessage = -1;
       } else {
-        notifyItemChanged(lastIndexOfLocalMessage);
+        notifyItemChanged(toItemPosition(lastIndexOfLocalMessage));
       }
     }
   }
 
+  private int toMessagePosition(int itemPosition) {
+    if (shouldShowAdvisory) {
+      return itemPosition - 1;
+    } else {
+      return itemPosition;
+    }
+  }
+
+  // Converts position in message list into item position in adapter.
+  private int toItemPosition(int messagePosition) {
+    if (messagePosition < 0) {
+      return messagePosition;
+    }
+    if (shouldShowAdvisory) {
+      return messagePosition + 1;
+    } else {
+      return messagePosition;
+    }
+  }
+
   private void updateCurrentRemoteMessage(String newMessage) {
     RttChatMessage.updateRemoteRttChatMessage(rttMessages, newMessage);
     lastIndexOfLocalMessage = RttChatMessage.getLastIndexLocalMessage(rttMessages);
@@ -110,14 +176,14 @@
   void addLocalMessage(String message) {
     updateCurrentLocalMessage(message);
     if (messageListener != null) {
-      messageListener.onUpdateLocalMessage(lastIndexOfLocalMessage);
+      messageListener.onUpdateLocalMessage(toItemPosition(lastIndexOfLocalMessage));
     }
   }
 
   void submitLocalMessage() {
     LogUtil.enterBlock("RttChatAdapater.submitLocalMessage");
     rttMessages.get(lastIndexOfLocalMessage).finish();
-    notifyItemChanged(lastIndexOfLocalMessage);
+    notifyItemChanged(toItemPosition(lastIndexOfLocalMessage));
     lastIndexOfLocalMessage = -1;
   }
 
@@ -139,10 +205,21 @@
     }
     updateCurrentRemoteMessage(message);
     if (messageListener != null) {
-      messageListener.onUpdateRemoteMessage(RttChatMessage.getLastIndexRemoteMessage(rttMessages));
+      messageListener.onUpdateRemoteMessage(
+          toItemPosition(RttChatMessage.getLastIndexRemoteMessage(rttMessages)));
     }
   }
 
+  void hideAdvisory() {
+    shouldShowAdvisory = false;
+    notifyItemRemoved(POSITION_ADVISORY);
+  }
+
+  void showAdvisory() {
+    shouldShowAdvisory = true;
+    notifyItemInserted(POSITION_ADVISORY);
+  }
+
   /**
    * Retrieve last local message and update the index. This is used when deleting to previous
    * message bubble.
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index 47036cd..13e013f 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -467,6 +467,7 @@
       if (editText.requestFocus()) {
         UiUtil.openKeyboardFrom(getContext(), editText);
       }
+      adapter.showAdvisory();
     }
     if (primaryCallState.state() == State.DIALING) {
       showWaitingForJoinBanner();
diff --git a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
index f995185..cff2b3f 100644
--- a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
+++ b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
@@ -23,7 +23,7 @@
       android:id="@+id/rtt_recycler_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
-      android:paddingTop="70dp"
+      android:paddingTop="56dp"
       android:paddingBottom="70dp"
       android:clipToPadding="false"/>
 
diff --git a/java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml b/java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml
new file mode 100644
index 0000000..a2cf3e7
--- /dev/null
+++ b/java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml
@@ -0,0 +1,41 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="24dp"
+    android:paddingBottom="16dp"
+    android:orientation="vertical">
+  <ImageView
+      android:layout_width="16dp"
+      android:layout_height="16dp"
+      android:layout_gravity="center_horizontal"
+      android:src="@drawable/quantum_ic_question_answer_vd_theme_24"
+      android:tint="#DEFFFFFF"
+      android:tintMode="src_in"/>
+  <TextView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:paddingTop="4dp"
+      android:paddingBottom="9dp"
+      android:paddingStart="64dp"
+      android:paddingEnd="64dp"
+      android:gravity="center_horizontal"
+      android:text="@string/rtt_transcript_advisory"
+      android:textColor="#FFFFFF"
+      android:textSize="12sp"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/java/com/android/incallui/rtt/impl/res/values/strings.xml b/java/com/android/incallui/rtt/impl/res/values/strings.xml
index 1d09f54..462eea5 100644
--- a/java/com/android/incallui/rtt/impl/res/values/strings.xml
+++ b/java/com/android/incallui/rtt/impl/res/values/strings.xml
@@ -30,4 +30,7 @@
   <!-- Text for status banner. [CHAR LIMIT=100] -->
   <string name="rtt_status_banner_text">Waiting for <xliff:g id="name">%s</xliff:g> to join RTT call&#8230;</string>
 
+  <!-- Text for RTT transcript advisory. [CHAR LIMIT=NONE] -->
+  <string name="rtt_transcript_advisory">The other party can see you typing. Transcripts stored on your device in the call history.</string>
+
 </resources>
\ No newline at end of file
