diff options
author | Austin Kirk <askirk@umich.edu> | 2018-05-17 10:09:41 -0400 |
---|---|---|
committer | Austin Kirk <askirk@umich.edu> | 2018-05-17 10:09:41 -0400 |
commit | 5cae33db1f26d668a15fa17e5757319650382b63 (patch) | |
tree | d0b3f44b711331d37db52b8b4545ec5b6bac5850 | |
parent | 46eb8344bab4ce8ddc61bc6eb77f3c2b264d77a0 (diff) | |
download | sdl_android-feature/multiplexing_only_handling_disconnect.tar.gz |
Adding logic to handle disconnectfeature/multiplexing_only_handling_disconnect
-rw-r--r-- | sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java | 10 | ||||
-rw-r--r-- | sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java | 40 |
2 files changed, 34 insertions, 16 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java b/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java index f2cd44dc5..916f80417 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java +++ b/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java @@ -542,7 +542,15 @@ public class SdlSession implements IProtocolListener, TransportManager.Transpor Log.d(TAG, "rpc transport? - " + wiProProtocol.getTransportForSession(SessionType.RPC));
if(type != null && type.equals(wiProProtocol.getTransportForSession(SessionType.RPC))){
this.sessionListener.onTransportDisconnected(info);
- }//TODO else { ensure no other services are connected over this transport }
+ }
+ if(type != null && type.equals(wiProProtocol.getTransportForSession(SessionType.NAV))){
+ stopVideoStream();
+ Log.d(TAG, "Stopping video stream.");
+ }
+ if(type != null && type.equals(wiProProtocol.getTransportForSession(SessionType.PCM))){
+ stopAudioStream();
+ Log.d(TAG, "Stopping audio stream.");
+ }
}
public void shutdown(String info){
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java b/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java index 6eee6e30f..6aa81fd3a 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java +++ b/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java @@ -1295,8 +1295,11 @@ public class SdlRouterService extends Service{ */ public boolean shouldServiceRemainOpen(Intent intent){ //Log.d(TAG, "Determining if this service should remain open"); - - if(altTransportService!=null || altTransportTimerHandler !=null){ + + if(!getConnectedTransports().isEmpty()){ // stay open if we have any transports connected + Log.d(TAG, "1 or more transports connected, remaining open"); + return true; + }else if(altTransportService!=null || altTransportTimerHandler !=null){ //We have been started by an alt transport, we must remain open. "My life for Auir...." Log.d(TAG, "Alt Transport connected, remaining open"); return true; @@ -1403,6 +1406,25 @@ public class SdlRouterService extends Service{ } public void onTransportDisconnected(TransportType type){ + cachedModuleVersion = -1; //Reset our cached version + if(registeredApps != null && !registeredApps.isEmpty()){ + Message message = Message.obtain(); + message.what = TransportConstants.HARDWARE_CONNECTION_EVENT; + Bundle bundle = new Bundle(); + bundle.putString(HARDWARE_DISCONNECTED, type.name()); + bundle.putBoolean(TransportConstants.ENABLE_LEGACY_MODE_EXTRA, legacyModeEnabled); + bundle.putStringArrayList(TransportConstants.CURRENT_HARDWARE_CONNECTED,getConnectedTransports()); + //TODO put other transports still connected + message.setData(bundle); + notifyClients(message); + } + if(!getConnectedTransports().isEmpty()){ + ArrayList<String> transports = getConnectedTransports(); + // Updates notification to one of still connected transport + enterForeground("Connected to " + transports.get(transports.size() - 1),0); + return; + } + if(altTransportService!=null){ //If we still have an alt transport open, then we don't need to tell the clients to close return; } @@ -1426,7 +1448,7 @@ public class SdlRouterService extends Service{ connectedTransportType = null; isTransportConnected = false; stopClientPings(); - + exitForeground();//Leave our foreground state as we don't have a connection anymore PacketWriteTaskMaster packetWriteTaskMaster = packetWriteTaskMasterMap.remove(type); @@ -1434,18 +1456,6 @@ public class SdlRouterService extends Service{ packetWriteTaskMaster.close(); } - cachedModuleVersion = -1; //Reset our cached version - if(registeredApps != null && !registeredApps.isEmpty()){ - Message message = Message.obtain(); - message.what = TransportConstants.HARDWARE_CONNECTION_EVENT; - Bundle bundle = new Bundle(); - bundle.putString(HARDWARE_DISCONNECTED, type.name()); - bundle.putBoolean(TransportConstants.ENABLE_LEGACY_MODE_EXTRA, legacyModeEnabled); - bundle.putStringArrayList(TransportConstants.CURRENT_HARDWARE_CONNECTED,getConnectedTransports()); - //TODO put other transports still connected - message.setData(bundle); - notifyClients(message); - } //TODO check to see if there are any transports still active //We've notified our clients, less clean up the mess now. synchronized(SESSION_LOCK){ |