summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorJae Seo <jaeseo@google.com>2014-08-13 20:13:17 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-13 16:52:03 +0000
commit67241476f3fd5d2ae145d64233193f823aa03a6a (patch)
treecb01f8392eb7e682f287eda3d7255ba3f8be68f7 /services
parent95ab7849444125387dc88088bb5197ee463d8c17 (diff)
parent9cc28e5175e1391646b29469d329c9c1c9311ee1 (diff)
downloadframeworks_base-67241476f3fd5d2ae145d64233193f823aa03a6a.zip
frameworks_base-67241476f3fd5d2ae145d64233193f823aa03a6a.tar.gz
frameworks_base-67241476f3fd5d2ae145d64233193f823aa03a6a.tar.bz2
Merge "TIF: Create TvInputState only once per each input" into lmp-dev
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java74
1 files changed, 31 insertions, 43 deletions
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 0b39598..2de305e 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -212,8 +212,6 @@ public final class TvInputManagerService extends SystemService {
private void buildTvInputListLocked(int userId) {
UserState userState = getUserStateLocked(userId);
-
- Map<String, TvInputState> inputMap = new HashMap<String, TvInputState>();
userState.packageSet.clear();
if (DEBUG) Slog.d(TAG, "buildTvInputList");
@@ -229,41 +227,42 @@ public final class TvInputManagerService extends SystemService {
+ android.Manifest.permission.BIND_TV_INPUT);
continue;
}
- try {
- inputList.clear();
- ComponentName component = new ComponentName(si.packageName, si.name);
- if (hasHardwarePermission(pm, component)) {
- ServiceState serviceState = userState.serviceStateMap.get(component);
- if (serviceState == null) {
- // We see this hardware TV input service for the first time; we need to
- // prepare the ServiceState object so that we can connect to the service and
- // let it add TvInputInfo objects to mInputList if there's any.
- serviceState = new ServiceState(component, userId);
- userState.serviceStateMap.put(component, serviceState);
- } else {
- inputList.addAll(serviceState.mInputList);
- }
+
+ ComponentName component = new ComponentName(si.packageName, si.name);
+ if (hasHardwarePermission(pm, component)) {
+ ServiceState serviceState = userState.serviceStateMap.get(component);
+ if (serviceState == null) {
+ // We see this hardware TV input service for the first time; we need to
+ // prepare the ServiceState object so that we can connect to the service and
+ // let it add TvInputInfo objects to mInputList if there's any.
+ serviceState = new ServiceState(component, userId);
+ userState.serviceStateMap.put(component, serviceState);
} else {
- inputList.add(TvInputInfo.createTvInputInfo(mContext, ri));
+ inputList.addAll(serviceState.mInputList);
}
-
- for (TvInputInfo info : inputList) {
- if (DEBUG) Slog.d(TAG, "add " + info.getId());
- TvInputState state = userState.inputMap.get(info.getId());
- if (state == null) {
- state = new TvInputState();
- }
- state.mInfo = info;
- inputMap.put(info.getId(), state);
+ } else {
+ try {
+ inputList.add(TvInputInfo.createTvInputInfo(mContext, ri));
+ } catch (XmlPullParserException | IOException e) {
+ Slog.e(TAG, "Failed to load TV input " + si.name, e);
+ continue;
}
+ }
- // Reconnect the service if existing input is updated.
- updateServiceConnectionLocked(component, userId);
+ // Reconnect the service if existing input is updated.
+ updateServiceConnectionLocked(component, userId);
+ userState.packageSet.add(si.packageName);
+ }
- userState.packageSet.add(si.packageName);
- } catch (IOException | XmlPullParserException e) {
- Slog.e(TAG, "Can't load TV input " + si.name, e);
+ Map<String, TvInputState> inputMap = new HashMap<String, TvInputState>();
+ for (TvInputInfo info : inputList) {
+ if (DEBUG) Slog.d(TAG, "add " + info.getId());
+ TvInputState state = userState.inputMap.get(info.getId());
+ if (state == null) {
+ state = new TvInputState();
}
+ state.mInfo = info;
+ inputMap.put(info.getId(), state);
}
for (String inputId : inputMap.keySet()) {
@@ -338,7 +337,6 @@ public final class TvInputManagerService extends SystemService {
Slog.e(TAG, "error in unregisterCallback", e);
}
}
- serviceState.mClientTokens.clear();
mContext.unbindService(serviceState.mConnection);
}
userState.serviceStateMap.clear();
@@ -401,9 +399,7 @@ public final class TvInputManagerService extends SystemService {
}
private static boolean shouldMaintainConnection(ServiceState serviceState) {
- return !serviceState.mClientTokens.isEmpty()
- || !serviceState.mSessionTokens.isEmpty()
- || serviceState.mIsHardware;
+ return !serviceState.mSessionTokens.isEmpty() || serviceState.mIsHardware;
// TODO: Find a way to maintain connection only when necessary.
}
@@ -1611,13 +1607,6 @@ public final class TvInputManagerService extends SystemService {
pw.increaseIndent();
- pw.println("mClientTokens:");
- pw.increaseIndent();
- for (IBinder token : service.mClientTokens) {
- pw.println("" + token);
- }
- pw.decreaseIndent();
-
pw.println("mSessionTokens:");
pw.increaseIndent();
for (IBinder token : service.mSessionTokens) {
@@ -1754,7 +1743,6 @@ public final class TvInputManagerService extends SystemService {
}
private final class ServiceState {
- private final List<IBinder> mClientTokens = new ArrayList<IBinder>();
private final List<IBinder> mSessionTokens = new ArrayList<IBinder>();
private final ServiceConnection mConnection;
private final ComponentName mComponent;