diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 7dcfab4..beac112 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -7136,6 +7136,7 @@
     field public static final int TUNER_VERSION_1_0 = 65536; // 0x10000
     field public static final int TUNER_VERSION_1_1 = 65537; // 0x10001
     field public static final int TUNER_VERSION_2_0 = 131072; // 0x20000
+    field public static final int TUNER_VERSION_3_0 = 196608; // 0x30000
     field public static final int TUNER_VERSION_UNKNOWN = 0; // 0x0
   }
 
@@ -7153,6 +7154,7 @@
     method public long read(@NonNull byte[], long, long);
     method public long seek(long);
     method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public int setPlaybackBufferStatusCheckIntervalHint(long);
     method public int start();
     method public int stop();
     field public static final int PLAYBACK_STATUS_ALMOST_EMPTY = 2; // 0x2
@@ -7168,6 +7170,7 @@
     method public int detachFilter(@NonNull android.media.tv.tuner.filter.Filter);
     method public int flush();
     method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public int setRecordBufferStatusCheckIntervalHint(long);
     method public int start();
     method public int stop();
     method public long write(long);
diff --git a/media/java/android/media/tv/tuner/TunerVersionChecker.java b/media/java/android/media/tv/tuner/TunerVersionChecker.java
index 3e13bed..f29a93c 100644
--- a/media/java/android/media/tv/tuner/TunerVersionChecker.java
+++ b/media/java/android/media/tv/tuner/TunerVersionChecker.java
@@ -59,6 +59,10 @@
      * Tuner version 2.0.
      */
     public static final int TUNER_VERSION_2_0 = (2 << 16);
+    /**
+     * Tuner version 3.0.
+     */
+    public static final int TUNER_VERSION_3_0 = (3 << 16);
 
     /**
      * Get the current running Tuner version.
diff --git a/media/java/android/media/tv/tuner/dvr/DvrPlayback.java b/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
index 11e6999..0680240 100644
--- a/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
+++ b/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
@@ -23,6 +23,7 @@
 import android.media.tv.tuner.Tuner;
 import android.media.tv.tuner.Tuner.Result;
 import android.media.tv.tuner.TunerUtils;
+import android.media.tv.tuner.TunerVersionChecker;
 import android.media.tv.tuner.filter.Filter;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
@@ -91,6 +92,7 @@
     private native int nativeAttachFilter(Filter filter);
     private native int nativeDetachFilter(Filter filter);
     private native int nativeConfigureDvr(DvrSettings settings);
+    private native int nativeSetStatusCheckIntervalHint(long durationInMs);
     private native int nativeStartDvr();
     private native int nativeStopDvr();
     private native int nativeFlushDvr();
@@ -177,6 +179,35 @@
     }
 
     /**
+     * Set playback buffer status check time interval.
+     *
+     * This status check time interval will be used by the Dvr to decide how often to evaluate
+     * data. The default value will be decided by HAL if it’s not set.
+     *
+     * <p>This functionality is only available in Tuner version 3.0 and higher and will otherwise
+     * return a {@link Tuner#RESULT_UNAVAILABLE}. Use {@link TunerVersionChecker#getTunerVersion()}
+     * to get the version information.
+     *
+     * @param durationInMs specifies the duration of the delay in milliseconds.
+     *
+     * @return one of the following results:
+     * {@link Tuner#RESULT_SUCCESS} if succeed,
+     * {@link Tuner#RESULT_UNAVAILABLE} if Dvr is unavailable or unsupported HAL versions,
+     * {@link Tuner#RESULT_NOT_INITIALIZED} if Dvr is not initialized,
+     * {@link Tuner#RESULT_INVALID_STATE} if Dvr is in a wrong state,
+     * {@link Tuner#RESULT_INVALID_ARGUMENT}  if the input parameter is invalid.
+     */
+    @Result
+    public int setPlaybackBufferStatusCheckIntervalHint(long durationInMs) {
+        if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+                TunerVersionChecker.TUNER_VERSION_3_0, "Set status check interval hint")) {
+            // no-op
+            return Tuner.RESULT_UNAVAILABLE;
+        }
+        return nativeSetStatusCheckIntervalHint(durationInMs);
+    }
+
+    /**
      * Starts DVR.
      *
      * <p>Starts consuming playback data or producing data for recording.
diff --git a/media/java/android/media/tv/tuner/dvr/DvrRecorder.java b/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
index e72026a..1a65832 100644
--- a/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
+++ b/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
@@ -22,6 +22,7 @@
 import android.media.tv.tuner.Tuner;
 import android.media.tv.tuner.Tuner.Result;
 import android.media.tv.tuner.TunerUtils;
+import android.media.tv.tuner.TunerVersionChecker;
 import android.media.tv.tuner.filter.Filter;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
@@ -53,6 +54,7 @@
     private native int nativeAttachFilter(Filter filter);
     private native int nativeDetachFilter(Filter filter);
     private native int nativeConfigureDvr(DvrSettings settings);
+    private native int nativeSetStatusCheckIntervalHint(long durationInMs);
     private native int nativeStartDvr();
     private native int nativeStopDvr();
     private native int nativeFlushDvr();
@@ -131,6 +133,35 @@
     }
 
     /**
+     * Set record buffer status check time interval.
+     *
+     * This status check time interval will be used by the Dvr to decide how often to evaluate
+     * data. The default value will be decided by HAL if it’s not set.
+     *
+     * <p>This functionality is only available in Tuner version 3.0 and higher and will otherwise
+     * return a {@link Tuner#RESULT_UNAVAILABLE}. Use {@link TunerVersionChecker#getTunerVersion()}
+     * to get the version information.
+     *
+     * @param durationInMs specifies the duration of the delay in milliseconds.
+     *
+     * @return one of the following results:
+     * {@link Tuner#RESULT_SUCCESS} if succeed,
+     * {@link Tuner#RESULT_UNAVAILABLE} if Dvr is unavailable or unsupported HAL versions,
+     * {@link Tuner#RESULT_NOT_INITIALIZED} if Dvr is not initialized,
+     * {@link Tuner#RESULT_INVALID_STATE} if Dvr is in a wrong state,
+     * {@link Tuner#RESULT_INVALID_ARGUMENT}  if the input parameter is invalid.
+     */
+    @Result
+    public int setRecordBufferStatusCheckIntervalHint(long durationInMs) {
+        if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+                TunerVersionChecker.TUNER_VERSION_3_0, "Set status check interval hint")) {
+            // no-op
+            return Tuner.RESULT_UNAVAILABLE;
+        }
+        return nativeSetStatusCheckIntervalHint(durationInMs);
+    }
+
+    /**
      * Starts DVR.
      *
      * <p>Starts consuming playback data or producing data for recording.
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index 96a3781..a0304bb 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -175,7 +175,7 @@
 
     shared_libs: [
         "android.hardware.graphics.bufferqueue@2.0",
-        "android.hardware.tv.tuner-V1-ndk",
+        "android.hardware.tv.tuner-V2-ndk",
         "libbinder_ndk",
         "libandroid_runtime",
         "libcutils",
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 244730b..c18edcd 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -4485,6 +4485,17 @@
     return (jint)result;
 }
 
+static jint android_media_tv_Tuner_set_status_check_interval_hint(JNIEnv *env, jobject dvr,
+                                                                  jlong durationInMs) {
+    sp<DvrClient> dvrClient = getDvrClient(env, dvr);
+    if (dvrClient == nullptr) {
+        ALOGD("Failed to set status check interval hint: dvr client not found");
+        return (int)Result::NOT_INITIALIZED;
+    }
+    Result result = dvrClient->setStatusCheckIntervalHint(durationInMs);
+    return (jint)result;
+}
+
 static jint android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) {
     sp<DvrClient> dvrClient = getDvrClient(env, dvr);
     if (dvrClient == nullptr) {
@@ -4828,6 +4839,8 @@
             (void *)android_media_tv_Tuner_detach_filter },
     { "nativeConfigureDvr", "(Landroid/media/tv/tuner/dvr/DvrSettings;)I",
             (void *)android_media_tv_Tuner_configure_dvr },
+    { "nativeSetStatusCheckIntervalHint", "(J)I",
+            (void *)android_media_tv_Tuner_set_status_check_interval_hint},
     { "nativeStartDvr", "()I", (void *)android_media_tv_Tuner_start_dvr },
     { "nativeStopDvr", "()I", (void *)android_media_tv_Tuner_stop_dvr },
     { "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr },
@@ -4844,6 +4857,8 @@
             (void *)android_media_tv_Tuner_detach_filter},
     { "nativeConfigureDvr", "(Landroid/media/tv/tuner/dvr/DvrSettings;)I",
             (void *)android_media_tv_Tuner_configure_dvr},
+    { "nativeSetStatusCheckIntervalHint", "(J)I",
+            (void *)android_media_tv_Tuner_set_status_check_interval_hint},
     { "nativeStartDvr", "()I", (void *)android_media_tv_Tuner_start_dvr},
     { "nativeStopDvr", "()I", (void *)android_media_tv_Tuner_stop_dvr},
     { "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr},
diff --git a/media/jni/tuner/DvrClient.cpp b/media/jni/tuner/DvrClient.cpp
index 05683b6..6e47052 100644
--- a/media/jni/tuner/DvrClient.cpp
+++ b/media/jni/tuner/DvrClient.cpp
@@ -303,7 +303,17 @@
 
     return Result::INVALID_STATE;
 }
+Result DvrClient::setStatusCheckIntervalHint(int64_t durationInMs) {
+    if (mTunerDvr == nullptr) {
+      return Result::INVALID_STATE;
+    }
+    if (durationInMs < 0) {
+      return Result::INVALID_ARGUMENT;
+    }
 
+    Status s = mTunerDvr->setStatusCheckIntervalHint(durationInMs);
+    return ClientHelper::getServiceSpecificErrorCode(s);
+}
 /////////////// TunerDvrCallback ///////////////////////
 TunerDvrCallback::TunerDvrCallback(sp<DvrClientCallback> dvrClientCallback)
         : mDvrClientCallback(dvrClientCallback) {}
diff --git a/media/jni/tuner/DvrClient.h b/media/jni/tuner/DvrClient.h
index 61c0325..40ed75b 100644
--- a/media/jni/tuner/DvrClient.h
+++ b/media/jni/tuner/DvrClient.h
@@ -126,6 +126,11 @@
      */
     Result close();
 
+    /**
+     * Set status check time interval.
+     */
+    Result setStatusCheckIntervalHint(int64_t durationInMs);
+
 private:
     /**
      * An AIDL Tuner Dvr Singleton assigned at the first time the Tuner Client
