summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2021-11-12 02:12:43 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2021-11-12 02:12:43 +0000
commite27b9897c3d9cdbe482ec31966315e17b12ffc34 (patch)
tree09bbd60652e7db4225d93ff7bdd06b57aeea192b
parent82eaf57b6bdb55728a25ce76faa64b9e4a3e826d (diff)
parent4ddacb909dde67c93d6188d39fd4c63ecff01bdf (diff)
Merge "Fix hardware TvInputService binding issue"
-rwxr-xr-xservices/core/java/com/android/server/tv/TvInputManagerService.java11
1 files changed, 11 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 28947083854b..b9ceec15c9ab 100755
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -315,6 +315,7 @@ public final class TvInputManagerService extends SystemService {
PackageManager.GET_SERVICES | PackageManager.GET_META_DATA,
userId);
List<TvInputInfo> inputList = new ArrayList<>();
+ List<ComponentName> hardwareComponents = new ArrayList<>();
for (ResolveInfo ri : services) {
ServiceInfo si = ri.serviceInfo;
if (!android.Manifest.permission.BIND_TV_INPUT.equals(si.permission)) {
@@ -325,6 +326,7 @@ public final class TvInputManagerService extends SystemService {
ComponentName component = new ComponentName(si.packageName, si.name);
if (hasHardwarePermission(pm, component)) {
+ hardwareComponents.add(component);
ServiceState serviceState = userState.serviceStateMap.get(component);
if (serviceState == null) {
// New hardware input found. Create a new ServiceState and connect to the
@@ -397,6 +399,15 @@ public final class TvInputManagerService extends SystemService {
}
}
+ // Clean up ServiceState corresponding to the removed hardware inputs
+ Iterator<ServiceState> it = userState.serviceStateMap.values().iterator();
+ while (it.hasNext()) {
+ ServiceState serviceState = it.next();
+ if (serviceState.isHardware && !hardwareComponents.contains(serviceState.component)) {
+ it.remove();
+ }
+ }
+
userState.inputMap.clear();
userState.inputMap = inputMap;
}