Merge "Add a permission for Descrambler"
diff --git a/api/system-current.txt b/api/system-current.txt
index 55460bb..92d1bf4 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -18,6 +18,7 @@
field public static final String ACCESS_SHARED_LIBRARIES = "android.permission.ACCESS_SHARED_LIBRARIES";
field public static final String ACCESS_SHORTCUTS = "android.permission.ACCESS_SHORTCUTS";
field public static final String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
+ field public static final String ACCESS_TV_DESCRAMBLER = "android.permission.ACCESS_TV_DESCRAMBLER";
field public static final String ACCESS_TV_TUNER = "android.permission.ACCESS_TV_TUNER";
field public static final String ACCESS_VIBRATOR_STATE = "android.permission.ACCESS_VIBRATOR_STATE";
field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
@@ -4877,7 +4878,7 @@
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public static android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities(@NonNull android.content.Context);
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo();
method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]);
- method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public android.media.tv.tuner.Descrambler openDescrambler();
+ method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.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);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9dc40c8..b2047ad 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -4941,7 +4941,13 @@
<p>Not for use by third-party applications.
@hide -->
<permission android:name="android.permission.ACCESS_TV_TUNER"
- android:protectionLevel="signature|privileged" />
+ android:protectionLevel="signature|privileged|vendorPrivileged" />
+
+ <!-- @SystemApi Allows an application to access descrambler of TV tuner HAL
+ <p>Not for use by third-party applications.
+ @hide -->
+ <permission android:name="android.permission.ACCESS_TV_DESCRAMBLER"
+ android:protectionLevel="signature|privileged|vendorPrivileged" />
<!-- @hide @SystemApi Allows an application to access locusId events in the usage stats. -->
<permission android:name="android.permission.ACCESS_LOCUS_ID_USAGE_STATS"
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 44142e3..4db1109 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -612,10 +612,10 @@
*
* @return a {@link Descrambler} object.
*/
- @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER)
+ @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER)
@Nullable
public Descrambler openDescrambler() {
- TunerUtils.checkTunerPermission(mContext);
+ TunerUtils.checkDescramblerPermission(mContext);
return nativeOpenDescrambler();
}
diff --git a/media/java/android/media/tv/tuner/TunerUtils.java b/media/java/android/media/tv/tuner/TunerUtils.java
index 30aaa02..5ecb8f0 100644
--- a/media/java/android/media/tv/tuner/TunerUtils.java
+++ b/media/java/android/media/tv/tuner/TunerUtils.java
@@ -27,7 +27,9 @@
* @hide
*/
public final class TunerUtils {
- private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER;
+ private static final String TUNER_PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER;
+ private static final String DESCRAMBLER_PERMISSION =
+ android.Manifest.permission.ACCESS_TV_DESCRAMBLER;
/**
* Checks whether the caller has permission to access tuner.
@@ -36,9 +38,30 @@
* @throws SecurityException if the caller doesn't have the permission.
*/
public static void checkTunerPermission(Context context) {
- if (context.checkCallingOrSelfPermission(PERMISSION)
+ checkPermission(context, TUNER_PERMISSION);
+ }
+
+ /**
+ * Checks whether the caller has permission to access the descrambler.
+ *
+ * @param context context of the caller.
+ * @throws SecurityException if the caller doesn't have the permission.
+ */
+ public static void checkDescramblerPermission(Context context) {
+ checkPermission(context, DESCRAMBLER_PERMISSION);
+ }
+
+ /**
+ * Checks whether the caller has the given permission.
+ *
+ * @param context context of the caller.
+ * @param permission the given permission.
+ * @throws SecurityException if the caller doesn't have the permission.
+ */
+ public static void checkPermission(Context context, String permission) {
+ if (context.checkCallingOrSelfPermission(permission)
!= PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Caller must have " + PERMISSION + " permission.");
+ throw new SecurityException("Caller must have " + permission + " permission.");
}
}