am 930ab23a: am 7d206d9b: Merge "TIF: Create TvInputState only once per each input" into lmp-dev
* commit '930ab23aaf41163f09a83a3060e1f1b78cb5af0c': TIF: Create TvInputState only once per each input
This commit is contained in:
@@ -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.addAll(serviceState.mInputList);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
inputList.add(TvInputInfo.createTvInputInfo(mContext, ri));
|
||||
} catch (XmlPullParserException | IOException e) {
|
||||
Slog.e(TAG, "Failed to load TV input " + si.name, e);
|
||||
continue;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
// Reconnect the service if existing input is updated.
|
||||
updateServiceConnectionLocked(component, userId);
|
||||
|
||||
userState.packageSet.add(si.packageName);
|
||||
} catch (IOException | XmlPullParserException e) {
|
||||
Slog.e(TAG, "Can't load TV input " + si.name, e);
|
||||
}
|
||||
|
||||
// Reconnect the service if existing input is updated.
|
||||
updateServiceConnectionLocked(component, userId);
|
||||
userState.packageSet.add(si.packageName);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user