diff --git a/res/layout-sw600dp/preview_frame.xml b/res/layout-sw600dp/preview_frame.xml
index 961a407..896d394 100644
--- a/res/layout-sw600dp/preview_frame.xml
+++ b/res/layout-sw600dp/preview_frame.xml
@@ -31,6 +31,6 @@
                 android:visibility="gone"/>
         <include layout="@layout/focus_indicator"/>
         <include layout="@layout/priority_indicators"/>
-        <include layout="@layout/tap_to_focus_toast"/>
+        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
 </RelativeLayout>
diff --git a/res/layout-sw600dp/preview_frame_video.xml b/res/layout-sw600dp/preview_frame_video.xml
index 69b7fe3..4e59c90 100644
--- a/res/layout-sw600dp/preview_frame_video.xml
+++ b/res/layout-sw600dp/preview_frame_video.xml
@@ -44,5 +44,6 @@
                 android:background="@drawable/bg_pressed"
                 android:visibility="gone"
                 android:onClick="onReviewPlayClicked" />
+        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
 </RelativeLayout>
diff --git a/res/layout/tap_to_focus_toast.xml b/res/layout/first_hint_toast.xml
similarity index 92%
rename from res/layout/tap_to_focus_toast.xml
rename to res/layout/first_hint_toast.xml
index 1ea67e7..fb60d29 100644
--- a/res/layout/tap_to_focus_toast.xml
+++ b/res/layout/first_hint_toast.xml
@@ -17,13 +17,12 @@
 */
 -->
 <com.android.camera.ui.RotateLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/tap_to_focus_prompt"
+        android:id="@+id/first_use_hint"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerInParent="true"
         android:visibility="gone">
-    <TextView
-            android:text="@string/tap_to_focus"
+    <TextView android:id="@+id/toast_text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:paddingLeft="10dp"
@@ -32,4 +31,5 @@
             android:paddingBottom="5dp"
             android:textAppearance="?android:textAppearanceMedium"
             android:background="@color/on_viewfinder_label_background_color" />
-</com.android.camera.ui.RotateLayout>
\ No newline at end of file
+</com.android.camera.ui.RotateLayout>
+
diff --git a/res/layout/preview_frame.xml b/res/layout/preview_frame.xml
index c225a58..31ba61b 100644
--- a/res/layout/preview_frame.xml
+++ b/res/layout/preview_frame.xml
@@ -32,7 +32,7 @@
                 android:visibility="gone"/>
         <include layout="@layout/focus_indicator"/>
         <include layout="@layout/priority_indicators"/>
-        <include layout="@layout/tap_to_focus_toast"/>
+        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
     <include layout="@layout/indicator_bar" />
 </RelativeLayout>
diff --git a/res/layout/preview_frame_video.xml b/res/layout/preview_frame_video.xml
index 5e27169..af945f5 100644
--- a/res/layout/preview_frame_video.xml
+++ b/res/layout/preview_frame_video.xml
@@ -44,6 +44,7 @@
                 android:src="@drawable/ic_gallery_play"
                 android:visibility="gone"
                 android:onClick="onReviewPlayClicked"/>
+        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
 
     <!-- Fill up the space below preview frame with black. -->
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 151ef7a..8012a2b 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -303,7 +303,7 @@
                 }
 
                 case DISMISS_TAP_TO_FOCUS_TOAST: {
-                    View v = findViewById(R.id.tap_to_focus_prompt);
+                    View v = findViewById(R.id.first_use_hint);
                     v.setVisibility(View.GONE);
                     v.setAnimation(AnimationUtils.loadAnimation(Camera.this,
                             R.anim.on_screen_hint_exit));
@@ -389,7 +389,7 @@
         startFaceDetection();
         // Show the tap to focus toast if this is the first start.
         if (mFocusAreaSupported &&
-                mPreferences.getBoolean(CameraSettings.KEY_TAP_TO_FOCUS_PROMPT_SHOWN, true)) {
+                mPreferences.getBoolean(CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN, true)) {
             // Delay the toast for one second to wait for orientation.
             mHandler.sendEmptyMessageDelayed(SHOW_TAP_TO_FOCUS_TOAST, 1000);
         }
@@ -2214,15 +2214,18 @@
     }
 
     private void showTapToFocusToast() {
+        // Set the text of toast
+        TextView textView = (TextView) findViewById(R.id.toast_text);
+        textView.setText(R.string.tap_to_focus);
         // Show the toast.
-        RotateLayout v = (RotateLayout) findViewById(R.id.tap_to_focus_prompt);
+        RotateLayout v = (RotateLayout) findViewById(R.id.first_use_hint);
         v.setOrientation(mOrientationCompensation);
         v.startAnimation(AnimationUtils.loadAnimation(this, R.anim.on_screen_hint_enter));
         v.setVisibility(View.VISIBLE);
         mHandler.sendEmptyMessageDelayed(DISMISS_TAP_TO_FOCUS_TOAST, 5000);
         // Clear the preference.
         Editor editor = mPreferences.edit();
-        editor.putBoolean(CameraSettings.KEY_TAP_TO_FOCUS_PROMPT_SHOWN, false);
+        editor.putBoolean(CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN, false);
         editor.apply();
     }
 
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 9c3104b..c861366 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -50,7 +50,8 @@
     public static final String KEY_EXPOSURE = "pref_camera_exposure_key";
     public static final String KEY_VIDEO_EFFECT = "pref_video_effect_key";
     public static final String KEY_CAMERA_ID = "pref_camera_id_key";
-    public static final String KEY_TAP_TO_FOCUS_PROMPT_SHOWN = "pref_tap_to_focus_prompt_shown_key";
+    public static final String KEY_CAMERA_FIRST_USE_HINT_SHOWN = "pref_camera_first_use_hint_shown_key";
+    public static final String KEY_VIDEO_FIRST_USE_HINT_SHOWN = "pref_video_first_use_hint_shown_key";
 
     public static final String EXPOSURE_DEFAULT_VALUE = "0";
 
diff --git a/src/com/android/camera/ComboPreferences.java b/src/com/android/camera/ComboPreferences.java
index 1af634c..bea2ffd 100644
--- a/src/com/android/camera/ComboPreferences.java
+++ b/src/com/android/camera/ComboPreferences.java
@@ -76,7 +76,8 @@
         return key.equals(CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL)
                 || key.equals(CameraSettings.KEY_CAMERA_ID)
                 || key.equals(CameraSettings.KEY_RECORD_LOCATION)
-                || key.equals(CameraSettings.KEY_TAP_TO_FOCUS_PROMPT_SHOWN)
+                || key.equals(CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN)
+                || key.equals(CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN)
                 || key.equals(CameraSettings.KEY_VIDEO_EFFECT);
     }
 
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 7c87892..78978f5 100755
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -32,6 +32,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.SharedPreferences.Editor;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
@@ -65,6 +66,7 @@
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
+import android.view.animation.AnimationUtils;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -95,6 +97,8 @@
     private static final int CLEAR_SCREEN_DELAY = 4;
     private static final int UPDATE_RECORD_TIME = 5;
     private static final int ENABLE_SHUTTER_BUTTON = 6;
+    private static final int SHOW_TAP_TO_SNAPSHOT_TOAST = 7;
+    private static final int DISMISS_TAP_TO_SNAPSHOT_TOAST = 8;
 
     private static final int SCREEN_DELAY = 2 * 60 * 1000;
 
@@ -298,6 +302,19 @@
                     break;
                 }
 
+                case SHOW_TAP_TO_SNAPSHOT_TOAST: {
+                    showTapToSnapshotToast();
+                    break;
+                }
+
+                case DISMISS_TAP_TO_SNAPSHOT_TOAST: {
+                    View v = findViewById(R.id.first_use_hint);
+                    v.setVisibility(View.GONE);
+                    v.setAnimation(AnimationUtils.loadAnimation(VideoCamera.this,
+                            R.anim.on_screen_hint_exit));
+                    break;
+                }
+
                 default:
                     Log.v(TAG, "Unhandled message: " + msg.what);
                     break;
@@ -540,6 +557,12 @@
                     setOrientationIndicator(mOrientationCompensation);
                 }
             }
+
+            // Show the toast after getting the first orientation changed.
+            if (mHandler.hasMessages(SHOW_TAP_TO_SNAPSHOT_TOAST)) {
+                mHandler.removeMessages(SHOW_TAP_TO_SNAPSHOT_TOAST);
+                showTapToSnapshotToast();
+            }
         }
     }
 
@@ -2292,6 +2315,12 @@
     private void initializeVideoSnapshot() {
         if (mParameters.isVideoSnapshotSupported() && !mIsVideoCaptureIntent) {
             findViewById(R.id.camera_preview).setOnTouchListener(this);
+            // Show the tap to focus toast if this is the first start.
+            if (mPreferences.getBoolean(
+                        CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN, true)) {
+                // Delay the toast for one second to wait for orientation.
+                mHandler.sendEmptyMessageDelayed(SHOW_TAP_TO_SNAPSHOT_TOAST, 1000);
+            }
         }
     }
 
@@ -2405,4 +2434,20 @@
             mVideoFileDescriptor = null;
         }
     }
+
+    private void showTapToSnapshotToast() {
+        // Set the text of toast
+        TextView textView = (TextView) findViewById(R.id.toast_text);
+        textView.setText(R.string.video_snapshot_hint);
+        // Show the toast.
+        RotateLayout v = (RotateLayout) findViewById(R.id.first_use_hint);
+        v.setOrientation(mOrientationCompensation);
+        v.startAnimation(AnimationUtils.loadAnimation(this, R.anim.on_screen_hint_enter));
+        v.setVisibility(View.VISIBLE);
+        mHandler.sendEmptyMessageDelayed(DISMISS_TAP_TO_SNAPSHOT_TOAST, 5000);
+        // Clear the preference.
+        Editor editor = mPreferences.edit();
+        editor.putBoolean(CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN, false);
+        editor.apply();
+    }
 }
