Add permission check and @RequiresPermission annotation
Bug: 62347045
Test: make; flash; run
Change-Id: Icbd828fa5a4762cf335492a42d321e29c4e2ec5f
diff --git a/api/current.txt b/api/current.txt
index 7a2cecd..cce3af4 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -24976,6 +24976,7 @@
}
public final class TvInputManager {
+ method public java.util.List<android.media.tv.TvContentRating> getBlockedRatings();
method public int getInputState(java.lang.String);
method public android.media.tv.TvInputInfo getTvInputInfo(java.lang.String);
method public java.util.List<android.media.tv.TvInputInfo> getTvInputList();
diff --git a/api/test-current.txt b/api/test-current.txt
index 062381e..b3480cb 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -25087,6 +25087,7 @@
}
public final class TvInputManager {
+ method public java.util.List<android.media.tv.TvContentRating> getBlockedRatings();
method public int getInputState(java.lang.String);
method public android.media.tv.TvInputInfo getTvInputInfo(java.lang.String);
method public java.util.List<android.media.tv.TvInputInfo> getTvInputList();
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index 28fd338..d7a9ede 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -1329,9 +1329,7 @@
* Returns the list of blocked content ratings.
*
* @return the list of content ratings blocked by the user.
- * @hide
*/
- @SystemApi
public List<TvContentRating> getBlockedRatings() {
try {
List<TvContentRating> ratings = new ArrayList<>();
@@ -1387,6 +1385,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.READ_CONTENT_RATING_SYSTEMS)
public List<TvContentRatingSystemInfo> getTvContentRatingSystemList() {
try {
return mService.getTvContentRatingSystemList(mUserId);
@@ -1551,6 +1550,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT)
public boolean isSingleSessionActive() {
try {
return mService.isSingleSessionActive(mUserId);
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 1afde55..d5e59c8 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -928,6 +928,12 @@
@Override
public List<TvContentRatingSystemInfo> getTvContentRatingSystemList(int userId) {
+ if (mContext.checkCallingPermission(
+ android.Manifest.permission.READ_CONTENT_RATING_SYSTEMS)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException(
+ "The caller does not have permission to read content rating systems");
+ }
final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(),
Binder.getCallingUid(), userId, "getTvContentRatingSystemList");
final long identity = Binder.clearCallingIdentity();
@@ -1875,11 +1881,7 @@
@Override
public List<TvStreamConfig> getAvailableTvStreamConfigList(String inputId, int userId)
throws RemoteException {
- if (mContext.checkCallingPermission(
- android.Manifest.permission.CAPTURE_TV_INPUT)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Requires CAPTURE_TV_INPUT permission");
- }
+ ensureCaptureTvInputPermission();
final long identity = Binder.clearCallingIdentity();
final int callingUid = Binder.getCallingUid();
@@ -1897,11 +1899,7 @@
public boolean captureFrame(String inputId, Surface surface, TvStreamConfig config,
int userId)
throws RemoteException {
- if (mContext.checkCallingPermission(
- android.Manifest.permission.CAPTURE_TV_INPUT)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Requires CAPTURE_TV_INPUT permission");
- }
+ ensureCaptureTvInputPermission();
final long identity = Binder.clearCallingIdentity();
final int callingUid = Binder.getCallingUid();
@@ -1934,6 +1932,7 @@
@Override
public boolean isSingleSessionActive(int userId) throws RemoteException {
+ ensureCaptureTvInputPermission();
final long identity = Binder.clearCallingIdentity();
final int callingUid = Binder.getCallingUid();
final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
@@ -1959,6 +1958,14 @@
}
}
+ private void ensureCaptureTvInputPermission() {
+ if (mContext.checkCallingPermission(
+ android.Manifest.permission.CAPTURE_TV_INPUT)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Requires CAPTURE_TV_INPUT permission");
+ }
+ }
+
@Override
public void requestChannelBrowsable(Uri channelUri, int userId)
throws RemoteException {