diff options
author | Joel Fischer <joeljfischer@gmail.com> | 2018-08-15 13:29:56 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-15 13:29:56 -0400 |
commit | 43efffc3e883d1beee890b9dc70cf948f448a767 (patch) | |
tree | 98ea60d8477212613b03ec3aa5b97db689913762 | |
parent | ef0cfa3a77a32d36ce0bcb8c2fb8d580b378dc2b (diff) | |
parent | 304ddbce75e21de511e58506e922195caf52cc96 (diff) | |
download | sdl_ios-43efffc3e883d1beee890b9dc70cf948f448a767.tar.gz |
Merge pull request #1048 from t-yoshii/fix/shutdown-video-session-in-suspended-state
Fix/shutdown video session even in suspended state
-rw-r--r-- | SmartDeviceLink/SDLStreamingVideoLifecycleManager.m | 11 | ||||
-rw-r--r-- | SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m | 11 |
2 files changed, 19 insertions, 3 deletions
diff --git a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m index 8c69b3c55..b95d3fc9d 100644 --- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m +++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m @@ -208,6 +208,10 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateReady]; } +- (BOOL)isVideoSuspended { + return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateSuspended]; +} + - (BOOL)isVideoStreamingPaused { return !(self.isVideoConnected && self.isHmiStateVideoStreamCapable && self.isAppStateVideoStreamCapable); } @@ -250,7 +254,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N [self sdl_sendBackgroundFrames]; [self.touchManager cancelPendingTouches]; - if ([self.videoStreamStateMachine.currentState isEqualToString:SDLVideoStreamManagerStateReady]) { + if (self.isVideoConnected) { [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateSuspended]; } else { [self sdl_stopVideoSession]; @@ -263,7 +267,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N SDLLogD(@"App became active"); if (!self.protocol) { return; } - if ([self.videoStreamStateMachine.currentState isEqualToString:SDLVideoStreamManagerStateSuspended]) { + if (self.isVideoSuspended) { [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady]; } else { [self sdl_startVideoSession]; @@ -610,7 +614,8 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N return; } - if (self.isVideoConnected) { + + if (self.isVideoConnected || self.isVideoSuspended) { [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateShuttingDown]; } } diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m index 33062b9db..857ca6b83 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m @@ -304,6 +304,17 @@ describe(@"the streaming video manager", ^{ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown)); }); }); + + context(@"and hmi state changes to background after app becomes inactive", ^{ + beforeEach(^{ + [streamingLifecycleManager.appStateMachine setToState:SDLAppStateInactive fromOldState:nil callEnterTransition:YES]; + sendNotificationForHMILevel(SDLHMILevelBackground, SDLVideoStreamingStateNotStreamable); + }); + + it(@"should close the stream", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown)); + }); + }); }); }); |