summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sherry Huang <sherrhxr@google.com> 2024-06-21 15:28:21 -0700
committer Sherry Huang <sherrhxr@google.com> 2024-06-21 16:30:43 -0700
commitd826a2ded0e011ad59bea5d6f2c16e8155d99ecc (patch)
tree1a7bae838169719e86c45832baf71f853cfbbfc6
parent592fca977abf84a465bbe324f56577ca551ec550 (diff)
TIS: Include ALWAYS_BOUND_TV_INPUT permission
Patch for preventing TIS being destoryed when TIF calls unbindService by introduce android.permission.ALWAYS_BOUND_TV_INPUT. Test: verified by vendor Flag: EXEMPT bugfix Bug: b/332201346 Change-Id: I87fef6291aa70be4c9aecd4dcc40ffc05666d485
-rw-r--r--core/res/AndroidManifest.xml9
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java8
2 files changed, 16 insertions, 1 deletions
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 8541704ecfb9..f926a8788012 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -5410,6 +5410,15 @@
<permission android:name="android.permission.BIND_TV_INPUT"
android:protectionLevel="signature|privileged" />
+ <!-- This permission is required among systems services to always keep the
+ binding with TvInputManagerService.
+ <p>This should only be used by the OEM TvInputService.
+ <p>Protection level: signature|privileged|vendorPrivileged
+ @hide
+ -->
+ <permission android:name="android.permission.ALWAYS_BOUND_TV_INPUT"
+ android:protectionLevel="signature|privileged|vendorPrivileged" />
+
<!-- Must be required by a {@link android.media.tv.interactive.TvInteractiveAppService}
to ensure that only the system can bind to it.
<p>Protection level: signature|privileged
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index e0a822604058..6721893e0c60 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -341,10 +341,16 @@ public final class TvInputManagerService extends SystemService {
}, UserHandle.ALL, intentFilter, null, null);
}
+ private static boolean hasAlwaysBoundPermission(PackageManager pm, ComponentName component) {
+ return pm.checkPermission(android.Manifest.permission.ALWAYS_BOUND_TV_INPUT,
+ component.getPackageName()) == PackageManager.PERMISSION_GRANTED;
+ }
+
private static boolean hasHardwarePermission(PackageManager pm, ComponentName component) {
return pm.checkPermission(android.Manifest.permission.TV_INPUT_HARDWARE,
component.getPackageName()) == PackageManager.PERMISSION_GRANTED;
}
+
@GuardedBy("mLock")
private void buildTvInputListLocked(int userId, String[] updatedPackages) {
UserState userState = getOrCreateUserStateLocked(userId);
@@ -3526,7 +3532,7 @@ public final class TvInputManagerService extends SystemService {
continue;
}
ComponentName component = new ComponentName(si.packageName, si.name);
- if (hasHardwarePermission(pm, component)) {
+ if (!hasAlwaysBoundPermission(pm, component) && hasHardwarePermission(pm, component)) {
updateServiceConnectionLocked(component, userId);
}
}