Skip to content

Commit 261a341

Browse files
Update VideoStreamManager to use VideoStreamingState
1 parent c62381c commit 261a341

1 file changed

Lines changed: 17 additions & 17 deletions

File tree

android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows;
6666
import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
6767
import com.smartdevicelink.proxy.rpc.enums.TouchType;
68+
import com.smartdevicelink.proxy.rpc.enums.VideoStreamingState;
6869
import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
6970
import com.smartdevicelink.streaming.video.SdlRemoteDisplay;
7071
import com.smartdevicelink.streaming.video.VideoStreamingParameters;
@@ -74,7 +75,6 @@
7475

7576
import java.lang.ref.WeakReference;
7677
import java.util.ArrayList;
77-
import java.util.Arrays;
7878
import java.util.List;
7979
import java.util.concurrent.CopyOnWriteArrayList;
8080
import java.util.concurrent.FutureTask;
@@ -90,13 +90,12 @@ public class VideoStreamManager extends BaseVideoStreamManager {
9090
private float[] touchScalar = {1.0f,1.0f}; //x, y
9191
private HapticInterfaceManager hapticManager;
9292
private SdlMotionEvent sdlMotionEvent = null;
93-
private HMILevel hmiLevel;
93+
private OnHMIStatus currentOnHMIStatus;
9494
private StreamingStateMachine stateMachine;
9595
private VideoStreamingParameters parameters;
9696
private IVideoStreamListener streamListener;
9797
private boolean isTransportAvailable = false;
9898
private boolean hasStarted;
99-
private List<HMILevel> streamableLevels = Arrays.asList(HMILevel.HMI_FULL, HMILevel.HMI_LIMITED);
10099

101100
// INTERNAL INTERFACES
102101

@@ -151,12 +150,10 @@ public void onNotified(RPCNotification notification) {
151150
if (onHMIStatus.getWindowID() != null && onHMIStatus.getWindowID() != PredefinedWindows.DEFAULT_WINDOW.getValue()) {
152151
return;
153152
}
154-
HMILevel prevHMILevel = hmiLevel;
155-
hmiLevel = onHMIStatus.getHmiLevel();
156-
if (streamableLevels.contains(hmiLevel)) {
157-
checkState();
158-
}
159-
if (hasStarted && (streamableLevels.contains(prevHMILevel)) && (!streamableLevels.contains(hmiLevel))) {
153+
OnHMIStatus prevOnHMIStatus = currentOnHMIStatus;
154+
currentOnHMIStatus = onHMIStatus;
155+
checkState();
156+
if (hasStarted && (isHMIStateVideoStreamCapable(prevOnHMIStatus)) && (!isHMIStateVideoStreamCapable(currentOnHMIStatus))) {
160157
internalInterface.stopVideoService();
161158
}
162159
}
@@ -183,7 +180,6 @@ public VideoStreamManager(ISdl internalInterface){
183180
super(internalInterface);
184181

185182
virtualDisplayEncoder = new VirtualDisplayEncoder();
186-
hmiLevel = HMILevel.HMI_NONE;
187183

188184
// Listen for video service events
189185
internalInterface.addServiceListener(SessionType.NAV, serviceListener);
@@ -206,14 +202,19 @@ public void start(CompletionListener listener) {
206202
private synchronized void checkState(){
207203
if(this.getState() == SETTING_UP
208204
&& isTransportAvailable
209-
&& hmiLevel != null
210-
&& streamableLevels.contains(hmiLevel)
205+
&& isHMIStateVideoStreamCapable(currentOnHMIStatus)
211206
&& parameters != null){
212207
stateMachine.transitionToState(StreamingStateMachine.READY);
213208
transitionToState(READY);
214209
}
215210
}
216211

212+
boolean isHMIStateVideoStreamCapable(OnHMIStatus onHMIStatus) {
213+
HMILevel hmiLevel = (onHMIStatus != null && onHMIStatus.getHmiLevel() != null) ? onHMIStatus.getHmiLevel() : HMILevel.HMI_NONE;
214+
VideoStreamingState videoStreamingState = (onHMIStatus != null && onHMIStatus.getVideoStreamingState() != null) ? onHMIStatus.getVideoStreamingState() : VideoStreamingState.STREAMABLE;
215+
return (hmiLevel.equals(HMILevel.HMI_FULL) || hmiLevel.equals(HMILevel.HMI_LIMITED)) && videoStreamingState.equals(VideoStreamingState.STREAMABLE);
216+
}
217+
217218
private void getVideoStreamingParams(){
218219
if(internalInterface.getProtocolVersion().getMajor() >= 5) {
219220
internalInterface.getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() {
@@ -305,13 +306,12 @@ public void onError(String info) {
305306
*/
306307
protected void startStreaming(VideoStreamingParameters parameters, boolean encrypted){
307308
this.parameters = parameters;
308-
if (!streamableLevels.contains(hmiLevel)) {
309-
Log.e(TAG, "Cannot start video service if HMILevel is not FULL or LIMITED.");
309+
if (!isHMIStateVideoStreamCapable(currentOnHMIStatus)) {
310+
Log.e(TAG, "Cannot start video service in the current HMI status");
310311
return;
311312
}
312313
//Start the video service
313314
this.internalInterface.startVideoService(parameters, encrypted);
314-
315315
}
316316

317317
/**
@@ -401,15 +401,15 @@ public boolean isServiceActive(){
401401
* @return boolean (true = yes, false = no)
402402
*/
403403
public boolean isStreaming(){
404-
return (stateMachine.getState() == StreamingStateMachine.STARTED) && (streamableLevels.contains(hmiLevel));
404+
return (stateMachine.getState() == StreamingStateMachine.STARTED) && (isHMIStateVideoStreamCapable(currentOnHMIStatus));
405405
}
406406

407407
/**
408408
* Check if video streaming has been paused due to app moving to background or manually stopped
409409
* @return boolean (true = not paused, false = paused)
410410
*/
411411
public boolean isPaused(){
412-
return (hasStarted && stateMachine.getState() == StreamingStateMachine.STOPPED) || (!streamableLevels.contains(hmiLevel));
412+
return (hasStarted && stateMachine.getState() == StreamingStateMachine.STOPPED) || (!isHMIStateVideoStreamCapable(currentOnHMIStatus));
413413
}
414414

415415
/**

0 commit comments

Comments
 (0)