summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2018-08-15 13:29:56 -0400
committerGitHub <noreply@github.com>2018-08-15 13:29:56 -0400
commit43efffc3e883d1beee890b9dc70cf948f448a767 (patch)
tree98ea60d8477212613b03ec3aa5b97db689913762
parentef0cfa3a77a32d36ce0bcb8c2fb8d580b378dc2b (diff)
parent304ddbce75e21de511e58506e922195caf52cc96 (diff)
downloadsdl_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.m11
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m11
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));
+ });
+ });
});
});