summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Kirk <askirk@umich.edu>2018-05-17 10:09:41 -0400
committerAustin Kirk <askirk@umich.edu>2018-05-17 10:09:41 -0400
commit5cae33db1f26d668a15fa17e5757319650382b63 (patch)
treed0b3f44b711331d37db52b8b4545ec5b6bac5850
parent46eb8344bab4ce8ddc61bc6eb77f3c2b264d77a0 (diff)
downloadsdl_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.java10
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java40
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){