Fix incorrect connection ID for remote connection service

Also cleans up incidental issues including:
* Remote connection service disconnects from the service it
  represents if it is not currently handling any connections;
  hope to avert excessive service pinning in the future.
* Fix destroyed connection handling.

Bug: 16828152
Change-Id: Id4555f91ddac5e9c1a12ce00bfd1ee0d6d2cb1d9
This commit is contained in:
Ihab Awad
2014-08-08 17:06:11 -07:00
parent 3afd00e9f2
commit 8aecfedb7b
3 changed files with 43 additions and 14 deletions

View File

@@ -232,7 +232,6 @@ final class RemoteConnectionService {
RemoteConnectionService(IConnectionService connectionService) throws RemoteException {
mConnectionService = connectionService;
mConnectionService.addConnectionServiceAdapter(mServant.getStub());
mConnectionService.asBinder().linkToDeath(mDeathRecipient, 0);
}
@@ -245,7 +244,7 @@ final class RemoteConnectionService {
PhoneAccountHandle connectionManagerPhoneAccount,
ConnectionRequest request,
boolean isIncoming) {
ConnectionRequest newRequest = new ConnectionRequest(
final ConnectionRequest newRequest = new ConnectionRequest(
request.getAccountHandle(),
UUID.randomUUID().toString(),
request.getHandle(),
@@ -253,14 +252,29 @@ final class RemoteConnectionService {
request.getExtras(),
request.getVideoState());
try {
if (mConnectionById.isEmpty()) {
mConnectionService.addConnectionServiceAdapter(mServant.getStub());
}
RemoteConnection connection =
new RemoteConnection(mConnectionService, newRequest);
mPendingConnections.add(connection);
mConnectionById.put(newRequest.getCallId(), connection);
mConnectionService.createConnection(
connectionManagerPhoneAccount,
newRequest,
isIncoming);
RemoteConnection connection =
new RemoteConnection(mConnectionService, request);
mPendingConnections.add(connection);
mConnectionById.put(newRequest.getCallId(), connection);
connection.addListener(new RemoteConnection.Listener() {
@Override
public void onDestroyed(RemoteConnection connection) {
mConnectionById.remove(newRequest.getCallId());
if (mConnectionById.isEmpty()) {
try {
mConnectionService.removeConnectionServiceAdapter(mServant.getStub());
} catch (RemoteException e) {
}
}
}
});
return connection;
} catch (RemoteException e) {
return RemoteConnection.failure(DisconnectCause.ERROR_UNSPECIFIED, e.toString());