summaryrefslogtreecommitdiff
path: root/android/sdl_android/src/main/java/com/smartdevicelink
diff options
context:
space:
mode:
Diffstat (limited to 'android/sdl_android/src/main/java/com/smartdevicelink')
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java104
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java43
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java38
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java70
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java0
5 files changed, 107 insertions, 148 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java b/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java
index f4bdb7136..d9017bd69 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java
@@ -35,21 +35,11 @@ package com.smartdevicelink.SdlConnection;
import android.content.Context;
import com.smartdevicelink.exception.SdlException;
-import com.smartdevicelink.protocol.ProtocolMessage;
import com.smartdevicelink.protocol.SdlPacket;
import com.smartdevicelink.protocol.SdlProtocol;
import com.smartdevicelink.protocol.SdlProtocolBase;
import com.smartdevicelink.protocol.enums.SessionType;
-import com.smartdevicelink.proxy.interfaces.IAudioStreamListener;
import com.smartdevicelink.proxy.interfaces.ISdlServiceListener;
-import com.smartdevicelink.proxy.interfaces.IVideoStreamListener;
-import com.smartdevicelink.proxy.rpc.VideoStreamingFormat;
-import com.smartdevicelink.proxy.rpc.enums.VideoStreamingProtocol;
-import com.smartdevicelink.streaming.AbstractPacketizer;
-import com.smartdevicelink.streaming.IStreamListener;
-import com.smartdevicelink.streaming.StreamPacketizer;
-import com.smartdevicelink.streaming.video.RTPH264Packetizer;
-import com.smartdevicelink.streaming.video.VideoStreamingParameters;
import com.smartdevicelink.transport.MultiplexTransportConfig;
import com.smartdevicelink.transport.TCPTransportConfig;
import com.smartdevicelink.transport.enums.TransportType;
@@ -57,7 +47,6 @@ import com.smartdevicelink.util.DebugTool;
import com.smartdevicelink.util.MediaStreamingStatus;
import com.smartdevicelink.util.Version;
-import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -178,13 +167,8 @@ public class SdlSession extends BaseSdlSession {
@Override
public void onServiceEnded(SdlPacket packet, SessionType serviceType, int sessionID) {
-
if (SessionType.RPC.equals(serviceType)) {
this.sessionListener.onSessionEnded(sessionID);
- } else if (SessionType.NAV.equals(serviceType)) {
- stopVideoStream();
- } else if (SessionType.PCM.equals(serviceType)) {
- stopAudioStream();
}
if (serviceListeners != null && serviceListeners.containsKey(serviceType)) {
@@ -198,12 +182,6 @@ public class SdlSession extends BaseSdlSession {
@Override
public void onServiceError(SdlPacket packet, SessionType serviceType, int sessionID, String error) {
- if (SessionType.NAV.equals(serviceType)) {
- stopVideoStream();
- } else if (SessionType.PCM.equals(serviceType)) {
- stopAudioStream();
- }
-
if (serviceListeners != null && serviceListeners.containsKey(serviceType)) {
CopyOnWriteArrayList<ISdlServiceListener> listeners = serviceListeners.get(serviceType);
for (ISdlServiceListener listener : listeners) {
@@ -215,86 +193,4 @@ public class SdlSession extends BaseSdlSession {
@Override
public void onAuthTokenReceived(String authToken) {/* Do nothing */ }
- /* ***********************************************************************************************************************************************************************
- * ***************************************************************** Fix after initial refactor *********************************************************************************
- *************************************************************************************************************************************************************************/
- //FIXME there is a lot of spaghetti code here that needs to be addressed. For first refactor the
- // the goal is to only refactor SdlSession. Another PR should be opened to fix all the packetizer
- // classes and method calls.
-
- //FIXME Move this logic to the related streaming manager
- private AbstractPacketizer videoPacketizer;
- private StreamPacketizer audioPacketizer;
-
- IStreamListener streamListener = new IStreamListener() {
- @Override
- public void sendStreamPacket(ProtocolMessage pm) {
- sendMessage(pm);
- }
- };
-
- private VideoStreamingProtocol getAcceptedProtocol() {
- if (acceptedVideoParams != null) {
- VideoStreamingFormat format = acceptedVideoParams.getFormat();
- if (format != null && format.getProtocol() != null) {
- return format.getProtocol();
- }
- }
- //Returns default protocol if none are found
- return new VideoStreamingParameters().getFormat().getProtocol();
-
- }
-
- public IVideoStreamListener startVideoStream() {
- VideoStreamingProtocol protocol = getAcceptedProtocol();
- try {
- switch (protocol) {
- case RAW: {
- videoPacketizer = new StreamPacketizer(streamListener, null, SessionType.NAV, (byte) this.sessionId, this);
- videoPacketizer.start();
- return (IVideoStreamListener) videoPacketizer;
- }
- case RTP: {
- //FIXME why is this not an extension of StreamPacketizer?
- videoPacketizer = new RTPH264Packetizer(streamListener, SessionType.NAV, (byte) this.sessionId, this);
- videoPacketizer.start();
- return (IVideoStreamListener) videoPacketizer;
- }
- default:
- DebugTool.logError(TAG, "Protocol " + protocol + " is not supported.");
- return null;
- }
- } catch (IOException e) {
- return null;
- }
- }
-
- public IAudioStreamListener startAudioStream() {
- try {
- audioPacketizer = new StreamPacketizer(streamListener, null, SessionType.PCM, (byte) this.sessionId, this);
- audioPacketizer.start();
- return audioPacketizer;
- } catch (IOException e) {
- return null;
- }
-
- }
-
-
- public boolean stopVideoStream() {
- if (videoPacketizer != null) {
- videoPacketizer.stop();
- return true;
- }
- return false;
- }
-
- public boolean stopAudioStream() {
- if (audioPacketizer != null) {
- audioPacketizer.stop();
- return true;
- }
- return false;
- }
-
}
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java
index 38bc357b6..f7cc7b7a5 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java
@@ -45,6 +45,7 @@ import com.smartdevicelink.SdlConnection.SdlSession;
import com.smartdevicelink.managers.CompletionListener;
import com.smartdevicelink.managers.StreamingStateMachine;
import com.smartdevicelink.managers.lifecycle.OnSystemCapabilityListener;
+import com.smartdevicelink.protocol.ProtocolMessage;
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.protocol.enums.SessionType;
import com.smartdevicelink.proxy.RPCNotification;
@@ -57,10 +58,13 @@ import com.smartdevicelink.proxy.rpc.enums.HMILevel;
import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows;
import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
+import com.smartdevicelink.streaming.IStreamListener;
+import com.smartdevicelink.streaming.StreamPacketizer;
import com.smartdevicelink.transport.utl.TransportRecord;
import com.smartdevicelink.util.DebugTool;
import com.smartdevicelink.util.Version;
+import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
@@ -91,6 +95,9 @@ public class AudioStreamManager extends BaseAudioStreamManager {
private CompletionListener serviceCompletionListener;
// As the internal interface does not provide timeout we need to use a future task
private final Handler serviceCompletionHandler;
+ private StreamPacketizer audioPacketizer;
+ private SdlSession sdlSession = null;
+ private SessionType sessionType = null;
private final Runnable serviceCompletionTimeoutCallback = new Runnable() {
@Override
@@ -106,10 +113,12 @@ public class AudioStreamManager extends BaseAudioStreamManager {
private final ISdlServiceListener serviceListener = new ISdlServiceListener() {
@Override
public void onServiceStarted(SdlSession session, SessionType type, boolean isEncrypted) {
+ sdlSession = session;
+ sessionType = type;
if (SessionType.PCM.equals(type)) {
serviceCompletionHandler.removeCallbacks(serviceCompletionTimeoutCallback);
- sdlAudioStream = session.startAudioStream();
+ sdlAudioStream = startAudioStream(session);
streamingStateMachine.transitionToState(StreamingStateMachine.STARTED);
if (serviceCompletionListener != null) {
@@ -125,7 +134,7 @@ public class AudioStreamManager extends BaseAudioStreamManager {
if (SessionType.PCM.equals(type)) {
serviceCompletionHandler.removeCallbacks(serviceCompletionTimeoutCallback);
- session.stopAudioStream();
+ stopAudioStream();
sdlAudioStream = null;
streamingStateMachine.transitionToState(StreamingStateMachine.NONE);
@@ -142,6 +151,7 @@ public class AudioStreamManager extends BaseAudioStreamManager {
if (SessionType.PCM.equals(type)) {
serviceCompletionHandler.removeCallbacks(serviceCompletionTimeoutCallback);
+ stopAudioStream();
streamingStateMachine.transitionToState(StreamingStateMachine.ERROR);
DebugTool.logError(TAG, "OnServiceError: " + reason);
streamingStateMachine.transitionToState(StreamingStateMachine.NONE);
@@ -338,7 +348,8 @@ public class AudioStreamManager extends BaseAudioStreamManager {
streamingStateMachine.transitionToState(StreamingStateMachine.STOPPED);
serviceCompletionListener = completionListener;
serviceCompletionHandler.postDelayed(serviceCompletionTimeoutCallback, COMPLETION_TIMEOUT);
- internalInterface.stopAudioService();
+ stopAudioStream();
+ serviceListener.onServiceEnded(sdlSession, sessionType);
}
/**
@@ -490,4 +501,30 @@ public class AudioStreamManager extends BaseAudioStreamManager {
// range of ENCODING_PCM_FLOAT audio data is [-1.0, 1.0].
int FLOAT = Float.SIZE >> 3;
}
+
+ protected IAudioStreamListener startAudioStream(final SdlSession session) {
+
+ IStreamListener streamListener = new IStreamListener() {
+ @Override
+ public void sendStreamPacket(ProtocolMessage pm) {
+ session.sendMessage(pm);
+ }
+ };
+
+ try {
+ audioPacketizer = new StreamPacketizer(streamListener, null, SessionType.PCM, (byte) session.getSessionId(), session);
+ audioPacketizer.start();
+ return audioPacketizer;
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ protected boolean stopAudioStream() {
+ if (audioPacketizer != null) {
+ audioPacketizer.stop();
+ return true;
+ }
+ return false;
+ }
}
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java
index 2fe65b2fc..ed3f5f219 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lifecycle/LifecycleManager.java
@@ -225,25 +225,6 @@ public class LifecycleManager extends BaseLifecycleManager {
}
}
- /**
- * Closes the opened video service (serviceType 11)
- *
- * @return true if the video service is closed successfully, return false otherwise
- */
- @Override
- void endVideoStream() {
- if (session == null) {
- DebugTool.logWarning(TAG, "SdlSession is not created yet.");
- return;
- }
- if (!session.getIsConnected()) {
- DebugTool.logWarning(TAG, "Connection is not available.");
- return;
- }
-
- session.stopVideoStream();
- }
-
@Override
void startAudioService(boolean isEncrypted) {
if (session == null) {
@@ -256,23 +237,4 @@ public class LifecycleManager extends BaseLifecycleManager {
}
session.startService(SessionType.PCM, isEncrypted);
}
-
- /**
- * Closes the opened audio service (serviceType 10)
- *
- * @return true if the audio service is closed successfully, return false otherwise
- */
- @Override
- void endAudioStream() {
- if (session == null) {
- DebugTool.logWarning(TAG, "SdlSession is not created yet.");
- return;
- }
- if (!session.getIsConnected()) {
- DebugTool.logWarning(TAG, "Connection is not available.");
- return;
- }
-
- session.stopAudioStream();
- }
}
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java
index 81db89049..a55cecb4d 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java
@@ -46,6 +46,7 @@ import com.smartdevicelink.managers.BaseSubManager;
import com.smartdevicelink.managers.CompletionListener;
import com.smartdevicelink.managers.StreamingStateMachine;
import com.smartdevicelink.managers.lifecycle.OnSystemCapabilityListener;
+import com.smartdevicelink.protocol.ProtocolMessage;
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.protocol.enums.SessionType;
import com.smartdevicelink.proxy.RPCNotification;
@@ -59,18 +60,25 @@ import com.smartdevicelink.proxy.rpc.OnTouchEvent;
import com.smartdevicelink.proxy.rpc.TouchCoord;
import com.smartdevicelink.proxy.rpc.TouchEvent;
import com.smartdevicelink.proxy.rpc.VideoStreamingCapability;
+import com.smartdevicelink.proxy.rpc.VideoStreamingFormat;
import com.smartdevicelink.proxy.rpc.enums.HMILevel;
import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows;
import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
import com.smartdevicelink.proxy.rpc.enums.TouchType;
+import com.smartdevicelink.proxy.rpc.enums.VideoStreamingProtocol;
import com.smartdevicelink.proxy.rpc.enums.VideoStreamingState;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
+import com.smartdevicelink.streaming.AbstractPacketizer;
+import com.smartdevicelink.streaming.IStreamListener;
+import com.smartdevicelink.streaming.StreamPacketizer;
+import com.smartdevicelink.streaming.video.RTPH264Packetizer;
import com.smartdevicelink.streaming.video.SdlRemoteDisplay;
import com.smartdevicelink.streaming.video.VideoStreamingParameters;
import com.smartdevicelink.transport.utl.TransportRecord;
import com.smartdevicelink.util.DebugTool;
import com.smartdevicelink.util.Version;
+import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -95,6 +103,7 @@ public class VideoStreamManager extends BaseVideoStreamManager {
private boolean isTransportAvailable = false;
private boolean hasStarted;
private String vehicleMake = null;
+ private AbstractPacketizer videoPacketizer;
// INTERNAL INTERFACES
@@ -104,7 +113,7 @@ public class VideoStreamManager extends BaseVideoStreamManager {
if(SessionType.NAV.equals(type)){
if (session != null && session.getAcceptedVideoParams() != null) {
parameters = session.getAcceptedVideoParams();
- VideoStreamManager.this.streamListener = session.startVideoStream();
+ VideoStreamManager.this.streamListener = startVideoStream(session.getAcceptedVideoParams(), session);
}
if (VideoStreamManager.this.streamListener == null) {
@@ -125,6 +134,7 @@ public class VideoStreamManager extends BaseVideoStreamManager {
@Override
public void onServiceEnded(SdlSession session, SessionType type) {
if(SessionType.NAV.equals(type)){
+ stopVideoStream();
if(remoteDisplay!=null){
stopStreaming();
}
@@ -136,6 +146,7 @@ public class VideoStreamManager extends BaseVideoStreamManager {
@Override
public void onServiceError(SdlSession session, SessionType type, String reason) {
DebugTool.logError(TAG, "Unable to start video service: " + reason);
+ stopVideoStream();
stateMachine.transitionToState(StreamingStateMachine.ERROR);
transitionToState(BaseSubManager.ERROR);
}
@@ -156,7 +167,7 @@ public class VideoStreamManager extends BaseVideoStreamManager {
}
checkState();
if (hasStarted && (isHMIStateVideoStreamCapable(prevOnHMIStatus)) && (!isHMIStateVideoStreamCapable(currentOnHMIStatus))) {
- internalInterface.stopVideoService();
+ stopVideoStream();
}
}
}
@@ -375,13 +386,13 @@ public class VideoStreamManager extends BaseVideoStreamManager {
parameters = null;
virtualDisplayEncoder = null;
if (internalInterface != null) {
- internalInterface.stopVideoService();
// Remove listeners
internalInterface.removeServiceListener(SessionType.NAV, serviceListener);
internalInterface.removeOnRPCNotificationListener(FunctionID.ON_TOUCH_EVENT, touchListener);
internalInterface.removeOnRPCNotificationListener(FunctionID.ON_HMI_STATUS, hmiListener);
}
+ stopVideoStream();
stateMachine.transitionToState(StreamingStateMachine.NONE);
@@ -704,4 +715,57 @@ public class VideoStreamManager extends BaseVideoStreamManager {
}
}
+ private VideoStreamingProtocol getAcceptedProtocol(VideoStreamingParameters params) {
+ if (params != null) {
+ VideoStreamingFormat format = params.getFormat();
+ if (format != null && format.getProtocol() != null) {
+ return format.getProtocol();
+ }
+ }
+ //Returns default protocol if none are found
+ return new VideoStreamingParameters().getFormat().getProtocol();
+
+ }
+
+ protected IVideoStreamListener startVideoStream(VideoStreamingParameters params, final SdlSession session) {
+ VideoStreamingProtocol protocol = getAcceptedProtocol(params);
+
+ IStreamListener iStreamListener = new IStreamListener() {
+ @Override
+ public void sendStreamPacket(ProtocolMessage pm) {
+ session.sendMessage(pm);
+ }
+ };
+
+ try {
+ switch (protocol) {
+ case RAW: {
+ videoPacketizer = new StreamPacketizer(iStreamListener, null, SessionType.NAV, (byte) session.getSessionId(), session);
+ videoPacketizer.start();
+ return (IVideoStreamListener) videoPacketizer;
+ }
+ case RTP: {
+ //FIXME why is this not an extension of StreamPacketizer?
+ videoPacketizer = new RTPH264Packetizer(iStreamListener, SessionType.NAV, (byte) session.getSessionId(), session);
+ videoPacketizer.start();
+ return (IVideoStreamListener) videoPacketizer;
+ }
+ default:
+ DebugTool.logError(TAG, "Protocol " + protocol + " is not supported.");
+ return null;
+ }
+ } catch (IOException e) {
+ return null;
+ }
+
+ }
+
+ protected boolean stopVideoStream() {
+ if (videoPacketizer != null) {
+ videoPacketizer.stop();
+ return true;
+ }
+ return false;
+ }
+
}
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java