summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapi/system-current.txt42
-rw-r--r--media/java/android/media/tv/tuner/Tuner.java46
-rw-r--r--media/java/android/media/tv/tuner/dvr/Dvr.java102
-rw-r--r--media/java/android/media/tv/tuner/dvr/DvrPlayback.java106
-rw-r--r--media/java/android/media/tv/tuner/dvr/DvrRecorder.java60
-rw-r--r--media/java/android/media/tv/tuner/dvr/DvrSettings.java48
-rw-r--r--media/java/android/media/tv/tuner/dvr/OnPlaybackStatusChangedListener.java32
-rw-r--r--media/java/android/media/tv/tuner/dvr/OnRecordStatusChangedListener.java (renamed from media/java/android/media/tv/tuner/dvr/DvrCallback.java)11
8 files changed, 299 insertions, 148 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 97d1583f11ef..06882eb280b6 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4691,6 +4691,8 @@ package android.media.tv.tuner {
ctor public Tuner(@NonNull android.content.Context);
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void clearOnTuneEventListener();
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Tuner.Descrambler openDescrambler();
+ method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener);
+ method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.dvr.OnRecordStatusChangedListener);
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.filter.Filter openFilter(int, int, long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.filter.FilterCallback);
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener);
method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int stopTune();
@@ -4714,6 +4716,34 @@ package android.media.tv.tuner {
package android.media.tv.tuner.dvr {
+ public class Dvr implements java.lang.AutoCloseable {
+ ctor protected Dvr(int);
+ method public int attachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+ method public void close();
+ method public int configure(@NonNull android.media.tv.tuner.dvr.DvrSettings);
+ 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 start();
+ method public int stop();
+ field public static final int TYPE_PLAYBACK = 1; // 0x1
+ field public static final int TYPE_RECORD = 0; // 0x0
+ }
+
+ public class DvrPlayback extends android.media.tv.tuner.dvr.Dvr {
+ method public long read(long);
+ method public long read(@NonNull byte[], long, long);
+ field public static final int PLAYBACK_STATUS_ALMOST_EMPTY = 2; // 0x2
+ field public static final int PLAYBACK_STATUS_ALMOST_FULL = 4; // 0x4
+ field public static final int PLAYBACK_STATUS_EMPTY = 1; // 0x1
+ field public static final int PLAYBACK_STATUS_FULL = 8; // 0x8
+ }
+
+ public class DvrRecorder extends android.media.tv.tuner.dvr.Dvr {
+ method public long write(long);
+ method public long write(@NonNull byte[], long, long);
+ }
+
public class DvrSettings {
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.dvr.DvrSettings.Builder builder(@NonNull android.content.Context);
method public int getDataFormat();
@@ -4721,13 +4751,10 @@ package android.media.tv.tuner.dvr {
method public long getLowThreshold();
method public long getPacketSize();
method public int getStatusMask();
- method public int getType();
field public static final int DATA_FORMAT_ES = 2; // 0x2
field public static final int DATA_FORMAT_PES = 1; // 0x1
field public static final int DATA_FORMAT_SHV_TLV = 3; // 0x3
field public static final int DATA_FORMAT_TS = 0; // 0x0
- field public static final int TYPE_PLAYBACK = 1; // 0x1
- field public static final int TYPE_RECORD = 0; // 0x0
}
public static final class DvrSettings.Builder {
@@ -4738,7 +4765,14 @@ package android.media.tv.tuner.dvr {
method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setLowThreshold(long);
method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setPacketSize(long);
method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setStatusMask(int);
- method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setType(int);
+ }
+
+ public interface OnPlaybackStatusChangedListener {
+ method public void onPlaybackStatusChanged(int);
+ }
+
+ public interface OnRecordStatusChangedListener {
+ method public void onRecordStatusChanged(int);
}
}
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index dd04bcd09647..f5f288d45d2c 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -24,9 +24,10 @@ import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.content.Context;
import android.media.tv.tuner.TunerConstants.Result;
-import android.media.tv.tuner.dvr.Dvr;
-import android.media.tv.tuner.dvr.DvrCallback;
-import android.media.tv.tuner.dvr.DvrSettings;
+import android.media.tv.tuner.dvr.DvrPlayback;
+import android.media.tv.tuner.dvr.DvrRecorder;
+import android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener;
+import android.media.tv.tuner.dvr.OnRecordStatusChangedListener;
import android.media.tv.tuner.filter.Filter;
import android.media.tv.tuner.filter.Filter.Subtype;
import android.media.tv.tuner.filter.Filter.Type;
@@ -166,7 +167,8 @@ public final class Tuner implements AutoCloseable {
private native Descrambler nativeOpenDescrambler();
- private native Dvr nativeOpenDvr(int type, long bufferSize);
+ private native DvrRecorder nativeOpenDvrRecorder(long bufferSize);
+ private native DvrPlayback nativeOpenDvrPlayback(long bufferSize);
private static native DemuxCapabilities nativeGetDemuxCapabilities();
@@ -639,24 +641,44 @@ public final class Tuner implements AutoCloseable {
}
/**
- * Open a DVR (Digital Video Record) instance.
+ * Open a DVR (Digital Video Record) recorder instance.
*
- * @param type the DVR type to be opened.
* @param bufferSize the buffer size of the output in bytes. It's used to hold output data of
* the attached filters.
* @param executor the executor on which callback will be invoked. The default event handler
* executor is used if it's {@code null}.
- * @param cb the callback to receive notifications from DVR.
- * @return the opened DVR object. {@code null} if the operation failed.
+ * @param l the listener to receive notifications from DVR recorder.
+ * @return the opened DVR recorder object. {@code null} if the operation failed.
+ */
+ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
+ @Nullable
+ public DvrRecorder openDvrRecorder(
+ @BytesLong long bufferSize,
+ @CallbackExecutor @Nullable Executor executor,
+ @Nullable OnRecordStatusChangedListener l) {
+ TunerUtils.checkTunerPermission(mContext);
+ DvrRecorder dvr = nativeOpenDvrRecorder(bufferSize);
+ return dvr;
+ }
+
+ /**
+ * Open a DVR (Digital Video Record) playback instance.
*
- * @hide
+ * @param bufferSize the buffer size of the output in bytes. It's used to hold output data of
+ * the attached filters.
+ * @param executor the executor on which callback will be invoked. The default event handler
+ * executor is used if it's {@code null}.
+ * @param l the listener to receive notifications from DVR recorder.
+ * @return the opened DVR playback object. {@code null} if the operation failed.
*/
@RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
@Nullable
- public Dvr openDvr(@DvrSettings.Type int type, @BytesLong long bufferSize,
- @CallbackExecutor @Nullable Executor executor, DvrCallback cb) {
+ public DvrPlayback openDvrPlayback(
+ @BytesLong long bufferSize,
+ @CallbackExecutor @Nullable Executor executor,
+ @Nullable OnPlaybackStatusChangedListener l) {
TunerUtils.checkTunerPermission(mContext);
- Dvr dvr = nativeOpenDvr(type, bufferSize);
+ DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize);
return dvr;
}
}
diff --git a/media/java/android/media/tv/tuner/dvr/Dvr.java b/media/java/android/media/tv/tuner/dvr/Dvr.java
index 320013056b2f..4183e3bbe640 100644
--- a/media/java/android/media/tv/tuner/dvr/Dvr.java
+++ b/media/java/android/media/tv/tuner/dvr/Dvr.java
@@ -16,9 +16,9 @@
package android.media.tv.tuner.dvr;
-import android.annotation.BytesLong;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.SystemApi;
import android.hardware.tv.tuner.V1_0.Constants;
import android.media.tv.tuner.TunerConstants.Result;
import android.media.tv.tuner.filter.Filter;
@@ -33,40 +33,26 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
-public class Dvr {
+@SystemApi
+public class Dvr implements AutoCloseable {
+
/** @hide */
+ @IntDef(prefix = "TYPE_", value = {TYPE_RECORD, TYPE_PLAYBACK})
@Retention(RetentionPolicy.SOURCE)
- @IntDef(prefix = "PLAYBACK_STATUS_",
- value = {PLAYBACK_STATUS_EMPTY, PLAYBACK_STATUS_ALMOST_EMPTY,
- PLAYBACK_STATUS_ALMOST_FULL, PLAYBACK_STATUS_FULL})
- @interface PlaybackStatus {}
+ public @interface Type {}
/**
- * The space of the playback is empty.
- */
- public static final int PLAYBACK_STATUS_EMPTY = Constants.PlaybackStatus.SPACE_EMPTY;
- /**
- * The space of the playback is almost empty.
- *
- * <p> the threshold is set in {@link DvrSettings}.
- */
- public static final int PLAYBACK_STATUS_ALMOST_EMPTY =
- Constants.PlaybackStatus.SPACE_ALMOST_EMPTY;
- /**
- * The space of the playback is almost full.
- *
- * <p> the threshold is set in {@link DvrSettings}.
+ * DVR for recording.
*/
- public static final int PLAYBACK_STATUS_ALMOST_FULL =
- Constants.PlaybackStatus.SPACE_ALMOST_FULL;
+ public static final int TYPE_RECORD = Constants.DvrType.RECORD;
/**
- * The space of the playback is full.
+ * DVR for playback of recorded programs.
*/
- public static final int PLAYBACK_STATUS_FULL = Constants.PlaybackStatus.SPACE_FULL;
+ public static final int TYPE_PLAYBACK = Constants.DvrType.PLAYBACK;
- private long mNativeContext;
- private DvrCallback mCallback;
+ final int mType;
+ long mNativeContext;
private native int nativeAttachFilter(Filter filter);
private native int nativeDetachFilter(Filter filter);
@@ -76,12 +62,10 @@ public class Dvr {
private native int nativeFlushDvr();
private native int nativeClose();
private native void nativeSetFileDescriptor(int fd);
- private native int nativeRead(long size);
- private native int nativeRead(byte[] bytes, long offset, long size);
- private native int nativeWrite(long size);
- private native int nativeWrite(byte[] bytes, long offset, long size);
- private Dvr() {}
+ protected Dvr(int type) {
+ mType = type;
+ }
/**
* Attaches a filter to DVR interface for recording.
@@ -154,12 +138,9 @@ public class Dvr {
/**
* Closes the DVR instance to release resources.
- *
- * @return result status of the operation.
*/
- @Result
- public int close() {
- return nativeClose();
+ public void close() {
+ nativeClose();
}
/**
@@ -171,51 +152,8 @@ public class Dvr {
nativeSetFileDescriptor(fd.getFd());
}
- /**
- * Reads data from the file for DVR playback.
- *
- * @param size the maximum number of bytes to read.
- * @return the number of bytes read.
- */
- public int read(@BytesLong long size) {
- return nativeRead(size);
- }
-
- /**
- * Reads data from the buffer for DVR playback and copies to the given byte array.
- *
- * @param bytes the byte array to store the data.
- * @param offset the index of the first byte in {@code bytes} to copy to.
- * @param size the maximum number of bytes to read.
- * @return the number of bytes read.
- */
- public int read(@NonNull byte[] bytes, @BytesLong long offset, @BytesLong long size) {
- if (size + offset > bytes.length) {
- throw new ArrayIndexOutOfBoundsException(
- "Array length=" + bytes.length + ", offset=" + offset + ", size=" + size);
- }
- return nativeRead(bytes, offset, size);
- }
-
- /**
- * Writes recording data to file.
- *
- * @param size the maximum number of bytes to write.
- * @return the number of bytes written.
- */
- public int write(@BytesLong long size) {
- return nativeWrite(size);
- }
-
- /**
- * Writes recording data to buffer.
- *
- * @param bytes the byte array stores the data to be written to DVR.
- * @param offset the index of the first byte in {@code bytes} to be written to DVR.
- * @param size the maximum number of bytes to write.
- * @return the number of bytes written.
- */
- public int write(@NonNull byte[] bytes, @BytesLong long offset, @BytesLong long size) {
- return nativeWrite(bytes, offset, size);
+ @Type
+ int getType() {
+ return mType;
}
}
diff --git a/media/java/android/media/tv/tuner/dvr/DvrPlayback.java b/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
new file mode 100644
index 000000000000..eb3157434a95
--- /dev/null
+++ b/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2019 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 android.media.tv.tuner.dvr;
+
+import android.annotation.BytesLong;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.hardware.tv.tuner.V1_0.Constants;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Digital Video Record (DVR) class which provides playback control on Demux's input buffer.
+ *
+ * <p>It's used to play recorded programs.
+ *
+ * @hide
+ */
+@SystemApi
+public class DvrPlayback extends Dvr {
+
+
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = "PLAYBACK_STATUS_",
+ value = {PLAYBACK_STATUS_EMPTY, PLAYBACK_STATUS_ALMOST_EMPTY,
+ PLAYBACK_STATUS_ALMOST_FULL, PLAYBACK_STATUS_FULL})
+ @interface PlaybackStatus {}
+
+ /**
+ * The space of the playback is empty.
+ */
+ public static final int PLAYBACK_STATUS_EMPTY = Constants.PlaybackStatus.SPACE_EMPTY;
+ /**
+ * The space of the playback is almost empty.
+ *
+ * <p> the threshold is set in {@link DvrSettings}.
+ */
+ public static final int PLAYBACK_STATUS_ALMOST_EMPTY =
+ Constants.PlaybackStatus.SPACE_ALMOST_EMPTY;
+ /**
+ * The space of the playback is almost full.
+ *
+ * <p> the threshold is set in {@link DvrSettings}.
+ */
+ public static final int PLAYBACK_STATUS_ALMOST_FULL =
+ Constants.PlaybackStatus.SPACE_ALMOST_FULL;
+ /**
+ * The space of the playback is full.
+ */
+ public static final int PLAYBACK_STATUS_FULL = Constants.PlaybackStatus.SPACE_FULL;
+
+
+
+ private native long nativeRead(long size);
+ private native long nativeRead(byte[] bytes, long offset, long size);
+
+ private DvrPlayback() {
+ super(Dvr.TYPE_PLAYBACK);
+ }
+
+
+ /**
+ * Reads data from the file for DVR playback.
+ *
+ * @param size the maximum number of bytes to read.
+ * @return the number of bytes read.
+ */
+ @BytesLong
+ public long read(@BytesLong long size) {
+ return nativeRead(size);
+ }
+
+ /**
+ * Reads data from the buffer for DVR playback and copies to the given byte array.
+ *
+ * @param bytes the byte array to store the data.
+ * @param offset the index of the first byte in {@code bytes} to copy to.
+ * @param size the maximum number of bytes to read.
+ * @return the number of bytes read.
+ */
+ @BytesLong
+ public long read(@NonNull byte[] bytes, @BytesLong long offset, @BytesLong long size) {
+ if (size + offset > bytes.length) {
+ throw new ArrayIndexOutOfBoundsException(
+ "Array length=" + bytes.length + ", offset=" + offset + ", size=" + size);
+ }
+ return nativeRead(bytes, offset, size);
+ }
+}
diff --git a/media/java/android/media/tv/tuner/dvr/DvrRecorder.java b/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
new file mode 100644
index 000000000000..3128ca5da641
--- /dev/null
+++ b/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2019 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 android.media.tv.tuner.dvr;
+
+import android.annotation.BytesLong;
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+
+/**
+ * Digital Video Record (DVR) recorder class which provides record control on Demux's output buffer.
+ *
+ * @hide
+ */
+@SystemApi
+public class DvrRecorder extends Dvr {
+ private native long nativeWrite(long size);
+ private native long nativeWrite(byte[] bytes, long offset, long size);
+
+ private DvrRecorder() {
+ super(Dvr.TYPE_RECORD);
+ }
+
+ /**
+ * Writes recording data to file.
+ *
+ * @param size the maximum number of bytes to write.
+ * @return the number of bytes written.
+ */
+ @BytesLong
+ public long write(@BytesLong long size) {
+ return nativeWrite(size);
+ }
+
+ /**
+ * Writes recording data to buffer.
+ *
+ * @param bytes the byte array stores the data to be written to DVR.
+ * @param offset the index of the first byte in {@code bytes} to be written to DVR.
+ * @param size the maximum number of bytes to write.
+ * @return the number of bytes written.
+ */
+ @BytesLong
+ public long write(@NonNull byte[] bytes, @BytesLong long offset, @BytesLong long size) {
+ return nativeWrite(bytes, offset, size);
+ }
+}
diff --git a/media/java/android/media/tv/tuner/dvr/DvrSettings.java b/media/java/android/media/tv/tuner/dvr/DvrSettings.java
index 68d615650abe..f9dc6821039a 100644
--- a/media/java/android/media/tv/tuner/dvr/DvrSettings.java
+++ b/media/java/android/media/tv/tuner/dvr/DvrSettings.java
@@ -61,22 +61,7 @@ public class DvrSettings {
public static final int DATA_FORMAT_SHV_TLV = Constants.DataFormat.SHV_TLV;
- /** @hide */
- @IntDef(prefix = "TYPE_", value = {TYPE_RECORD, TYPE_PLAYBACK})
- @Retention(RetentionPolicy.SOURCE)
- public @interface Type {}
-
- /**
- * DVR for recording.
- */
- public static final int TYPE_RECORD = Constants.DvrType.RECORD;
- /**
- * DVR for playback of recorded programs.
- */
- public static final int TYPE_PLAYBACK = Constants.DvrType.PLAYBACK;
-
-
- @FilterStatus
+ @Filter.Status
private final int mStatusMask;
@BytesLong
private final long mLowThreshold;
@@ -86,24 +71,20 @@ public class DvrSettings {
private final long mPacketSize;
@DataFormat
private final int mDataFormat;
- @Type
- private final int mType;
- private DvrSettings(@FilterStatus int statusMask, @BytesLong long lowThreshold,
- @BytesLong long highThreshold, @BytesLong long packetSize, @DataFormat int dataFormat,
- @Type int type) {
+ private DvrSettings(@Filter.Status int statusMask, @BytesLong long lowThreshold,
+ @BytesLong long highThreshold, @BytesLong long packetSize, @DataFormat int dataFormat) {
mStatusMask = statusMask;
mLowThreshold = lowThreshold;
mHighThreshold = highThreshold;
mPacketSize = packetSize;
mDataFormat = dataFormat;
- mType = type;
}
/**
* Gets status mask.
*/
- @FilterStatus
+ @Filter.Status
public int getStatusMask() {
return mStatusMask;
}
@@ -141,14 +122,6 @@ public class DvrSettings {
}
/**
- * Gets settings type.
- */
- @Type
- public int getType() {
- return mType;
- }
-
- /**
* Creates a builder for {@link DvrSettings}.
*
* @param context the context of the caller.
@@ -170,8 +143,6 @@ public class DvrSettings {
private long mPacketSize;
@DataFormat
private int mDataFormat;
- @Type
- private int mType;
/**
* Sets status mask.
@@ -219,21 +190,12 @@ public class DvrSettings {
}
/**
- * Sets settings type.
- */
- @NonNull
- public Builder setType(@Type int type) {
- this.mType = type;
- return this;
- }
-
- /**
* Builds a {@link DvrSettings} object.
*/
@NonNull
public DvrSettings build() {
return new DvrSettings(
- mStatusMask, mLowThreshold, mHighThreshold, mPacketSize, mDataFormat, mType);
+ mStatusMask, mLowThreshold, mHighThreshold, mPacketSize, mDataFormat);
}
}
}
diff --git a/media/java/android/media/tv/tuner/dvr/OnPlaybackStatusChangedListener.java b/media/java/android/media/tv/tuner/dvr/OnPlaybackStatusChangedListener.java
new file mode 100644
index 000000000000..a9a1779b8238
--- /dev/null
+++ b/media/java/android/media/tv/tuner/dvr/OnPlaybackStatusChangedListener.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2019 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 android.media.tv.tuner.dvr;
+
+import android.annotation.SystemApi;
+
+/**
+ * Listener interface for receiving information from DVR playback.
+ *
+ * @hide
+ */
+@SystemApi
+public interface OnPlaybackStatusChangedListener {
+ /**
+ * Invoked when playback status changed.
+ */
+ void onPlaybackStatusChanged(@DvrPlayback.PlaybackStatus int status);
+}
diff --git a/media/java/android/media/tv/tuner/dvr/DvrCallback.java b/media/java/android/media/tv/tuner/dvr/OnRecordStatusChangedListener.java
index 0a4029f51fa2..cb6ccabe2a73 100644
--- a/media/java/android/media/tv/tuner/dvr/DvrCallback.java
+++ b/media/java/android/media/tv/tuner/dvr/OnRecordStatusChangedListener.java
@@ -16,21 +16,18 @@
package android.media.tv.tuner.dvr;
-import android.media.tv.tuner.dvr.Dvr.PlaybackStatus;
+import android.annotation.SystemApi;
import android.media.tv.tuner.filter.Filter;
/**
- * Callback interface for receiving information from DVR interfaces.
+ * Listener interface for receiving information from DVR recorder.
*
* @hide
*/
-public interface DvrCallback {
+@SystemApi
+public interface OnRecordStatusChangedListener {
/**
* Invoked when record status changed.
*/
void onRecordStatusChanged(@Filter.Status int status);
- /**
- * Invoked when playback status changed.
- */
- void onPlaybackStatusChanged(@PlaybackStatus int status);
}