summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDongwon Kang <dwkang@google.com>2014-04-15 17:23:24 +0900
committerDongwon Kang <dwkang@google.com>2014-04-16 14:23:25 +0900
commitfd5b72f1ed2ee74a4204eef65f560fc82f0b62fe (patch)
treebb6ee5487aaeb9eff573d9b0f537a6f7d5ae91a2 /services
parent5b7edc5957a3c459169f56f99275cc8f997893f7 (diff)
downloadframeworks_base-fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe.zip
frameworks_base-fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe.tar.gz
frameworks_base-fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe.tar.bz2
Handle the failure of session creation request in TvInputManagerService.
Bug: 14073508 Change-Id: Idc9da323bb0000300faf662c7db031214ae6136c
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java36
1 files changed, 23 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 79c4a50..16ed7fe 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -277,8 +277,14 @@ public final class TvInputManagerService extends SystemService {
}
synchronized (mLock) {
sessionState.session = session;
- sendSessionTokenToClientLocked(sessionState.client, sessionState.name,
- sessionToken, sessionState.seq, userId);
+ if (session == null) {
+ removeSessionStateLocked(sessionToken, userId);
+ sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null,
+ sessionState.seq, userId);
+ } else {
+ sendSessionTokenToClientLocked(sessionState.client, sessionState.name,
+ sessionToken, sessionState.seq, userId);
+ }
}
}
};
@@ -288,6 +294,7 @@ public final class TvInputManagerService extends SystemService {
service.createSession(callback);
} catch (RemoteException e) {
Log.e(TAG, "error in createSession", e);
+ removeSessionStateLocked(sessionToken, userId);
sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null,
sessionState.seq, userId);
}
@@ -307,6 +314,19 @@ public final class TvInputManagerService extends SystemService {
}
}
+ private void removeSessionStateLocked(IBinder sessionToken, int userId) {
+ // Remove the session state from the global session state map of the current user.
+ UserState userState = getUserStateLocked(userId);
+ SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
+
+ // Also remove the session state from the session state map of the current service.
+ ServiceState serviceState = userState.serviceStateMap.get(sessionState.name);
+ if (serviceState != null) {
+ serviceState.sessionStateMap.remove(sessionToken);
+ }
+ updateServiceConnectionLocked(sessionState.name, userId);
+ }
+
private final class BinderService extends ITvInputManager.Stub {
@Override
public List<TvInputInfo> getTvInputList(int userId) {
@@ -474,17 +494,7 @@ public final class TvInputManagerService extends SystemService {
Log.e(TAG, "error in release", e);
}
- // Remove its state from the global session state map of the current user.
- UserState userState = getUserStateLocked(resolvedUserId);
- SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
-
- // Also remove it from the session state map of the current service.
- ServiceState serviceState = userState.serviceStateMap.get(sessionState.name);
- if (serviceState != null) {
- serviceState.sessionStateMap.remove(sessionToken);
- }
-
- updateServiceConnectionLocked(sessionState.name, resolvedUserId);
+ removeSessionStateLocked(sessionToken, resolvedUserId);
}
} finally {
Binder.restoreCallingIdentity(identity);