plpSettings;
+ FrontendAtsc3Settings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_ATSC3;
@@ -144,6 +167,7 @@ public abstract class FrontendSettings {
/**
* Frontend settings for DVBS.
+ * @hide
*/
public static class FrontendDvbsSettings extends FrontendSettings {
public int modulation;
@@ -154,6 +178,10 @@ public abstract class FrontendSettings {
public int inputStreamId;
public byte standard;
+ FrontendDvbsSettings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_DVBS;
@@ -162,6 +190,7 @@ public abstract class FrontendSettings {
/**
* Frontend settings for DVBC.
+ * @hide
*/
public static class FrontendDvbcSettings extends FrontendSettings {
public int modulation;
@@ -171,6 +200,10 @@ public abstract class FrontendSettings {
public byte annex;
public int spectralInversion;
+ FrontendDvbcSettings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_DVBC;
@@ -179,6 +212,7 @@ public abstract class FrontendSettings {
/**
* Frontend settings for DVBT.
+ * @hide
*/
public static class FrontendDvbtSettings extends FrontendSettings {
public int transmissionMode;
@@ -195,6 +229,10 @@ public abstract class FrontendSettings {
public byte plpId;
public byte plpGroupId;
+ FrontendDvbtSettings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_DVBT;
@@ -203,6 +241,7 @@ public abstract class FrontendSettings {
/**
* Frontend settings for ISDBS.
+ * @hide
*/
public static class FrontendIsdbsSettings extends FrontendSettings {
public int streamId;
@@ -212,6 +251,10 @@ public abstract class FrontendSettings {
public int symbolRate;
public int rolloff;
+ FrontendIsdbsSettings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_ISDBS;
@@ -220,6 +263,7 @@ public abstract class FrontendSettings {
/**
* Frontend settings for ISDBS-3.
+ * @hide
*/
public static class FrontendIsdbs3Settings extends FrontendSettings {
public int streamId;
@@ -229,6 +273,10 @@ public abstract class FrontendSettings {
public int symbolRate;
public int rolloff;
+ FrontendIsdbs3Settings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_ISDBS3;
@@ -237,6 +285,7 @@ public abstract class FrontendSettings {
/**
* Frontend settings for ISDBT.
+ * @hide
*/
public static class FrontendIsdbtSettings extends FrontendSettings {
public int modulation;
@@ -245,6 +294,10 @@ public abstract class FrontendSettings {
public int guardInterval;
public int serviceAreaId;
+ FrontendIsdbtSettings(int frequency) {
+ super(frequency);
+ }
+
@Override
public int getType() {
return TunerConstants.FRONTEND_TYPE_ISDBT;
@@ -253,6 +306,7 @@ public abstract class FrontendSettings {
/**
* PLP settings for ATSC-3.
+ * @hide
*/
public static class FrontendAtsc3PlpSettings {
public byte plpId;
@@ -264,6 +318,7 @@ public abstract class FrontendSettings {
/**
* Code rate for DVBS.
+ * @hide
*/
public static class FrontendDvbsCodeRate {
public long fec;
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 4c93101bc0b5c..a41974416d096 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -18,6 +18,10 @@ package android.media.tv.tuner;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
+import android.annotation.SystemApi;
+import android.content.Context;
+import android.content.pm.PackageManager;
import android.media.tv.tuner.TunerConstants.DemuxPidType;
import android.os.Handler;
import android.os.Looper;
@@ -26,14 +30,20 @@ import android.os.Message;
import java.util.List;
/**
- * Tuner is used to interact with tuner devices.
+ * This class is used to interact with hardware tuners devices.
+ *
+ * Each TvInputService Session should create one instance of this class.
+ *
+ *
This class controls the TIS interaction with Tuner HAL.
*
* @hide
*/
+@SystemApi
public final class Tuner implements AutoCloseable {
private static final String TAG = "MediaTvTuner";
private static final boolean DEBUG = false;
+ private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER;
private static final int MSG_ON_FRONTEND_EVENT = 1;
private static final int MSG_ON_FILTER_EVENT = 2;
private static final int MSG_ON_FILTER_STATUS = 3;
@@ -44,6 +54,8 @@ public final class Tuner implements AutoCloseable {
nativeInit();
}
+ private final Context mContext;
+
private List mFrontendIds;
private Frontend mFrontend;
private EventHandler mHandler;
@@ -51,12 +63,26 @@ public final class Tuner implements AutoCloseable {
private List mLnbIds;
private Lnb mLnb;
- public Tuner() {
+ /**
+ * Constructs a Tuner instance.
+ *
+ * @param context context of the caller.
+ */
+ public Tuner(@NonNull Context context) {
+ mContext = context;
nativeSetup();
}
+ private void checkPermission() {
+ if (mContext.checkCallingOrSelfPermission(PERMISSION)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Caller must have " + PERMISSION + " permission.");
+ }
+ }
+
private long mNativeContext; // used by native jMediaTuner
+ /** @hide */
@Override
public void close() {}
@@ -92,6 +118,8 @@ public final class Tuner implements AutoCloseable {
/**
* Frontend Callback.
+ *
+ * @hide
*/
public interface FrontendCallback {
@@ -103,6 +131,8 @@ public final class Tuner implements AutoCloseable {
/**
* LNB Callback.
+ *
+ * @hide
*/
public interface LnbCallback {
/**
@@ -113,6 +143,8 @@ public final class Tuner implements AutoCloseable {
/**
* Frontend Callback.
+ *
+ * @hide
*/
public interface FilterCallback {
/**
@@ -123,6 +155,8 @@ public final class Tuner implements AutoCloseable {
/**
* DVR Callback.
+ *
+ * @hide
*/
public interface DvrCallback {
/**
@@ -177,7 +211,7 @@ public final class Tuner implements AutoCloseable {
}
}
- protected class Frontend {
+ private class Frontend {
private int mId;
private FrontendCallback mCallback;
@@ -210,9 +244,15 @@ public final class Tuner implements AutoCloseable {
}
/**
- * Tunes the frontend to using the settings given.
+ * Tunes the frontend to the settings given.
+ *
+ * @return result status of tune operation.
+ * @throws SecurityException if the caller does not have appropriate permissions.
+ * TODO: add result constants or throw exceptions.
*/
+ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
public int tune(@NonNull FrontendSettings settings) {
+ checkPermission();
return nativeTune(settings.getType(), settings);
}
@@ -238,7 +278,8 @@ public final class Tuner implements AutoCloseable {
}
}
- protected class Filter {
+ /** @hide */
+ public class Filter {
private long mNativeContext;
private FilterCallback mCallback;
int mId;
@@ -297,7 +338,8 @@ public final class Tuner implements AutoCloseable {
return filter;
}
- protected class Lnb {
+ /** @hide */
+ public class Lnb {
private int mId;
private LnbCallback mCallback;
@@ -338,7 +380,8 @@ public final class Tuner implements AutoCloseable {
}
}
- protected class Descrambler {
+ /** @hide */
+ public class Descrambler {
private long mNativeContext;
private native boolean nativeAddPid(int pidType, int pid, Filter filter);
@@ -362,7 +405,8 @@ public final class Tuner implements AutoCloseable {
}
// TODO: consider splitting Dvr to Playback and Recording
- protected class Dvr {
+ /** @hide */
+ public class Dvr {
private long mNativeContext;
private DvrCallback mCallback;