diff options
| author | 2024-06-21 15:28:21 -0700 | |
|---|---|---|
| committer | 2024-06-21 16:30:43 -0700 | |
| commit | d826a2ded0e011ad59bea5d6f2c16e8155d99ecc (patch) | |
| tree | 1a7bae838169719e86c45832baf71f853cfbbfc6 | |
| parent | 592fca977abf84a465bbe324f56577ca551ec550 (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.xml | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/tv/TvInputManagerService.java | 8 |
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); } } |