Clear interrupted flag on CallKit audio activation.

Bug: webrtc:9511, webrtc:9027
Change-Id: I7c08ca7fd08dcf3e204a838abc4705a4dd814ee3
Reviewed-on: https://webrtc-review.googlesource.com/88020
Commit-Queue: Zeke Chin <tkchin@webrtc.org>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23940}
This commit is contained in:
Zeke Chin
2018-07-10 13:53:55 -07:00
committed by Commit Bot
parent 70aa374d3e
commit 8280a56e15

View File

@ -568,9 +568,11 @@ NSString * const kRTCAudioSessionOutputVolumeSelector = @"outputVolume";
}
- (void)handleApplicationDidBecomeActive:(NSNotification *)notification {
BOOL isInterrupted = self.isInterrupted;
RTCLog(@"Application became active after an interruption. Treating as interruption "
" end. isInterrupted changed from %d to 0.", self.isInterrupted);
if (self.isInterrupted) {
"end. isInterrupted changed from %d to 0.",
isInterrupted);
if (isInterrupted) {
self.isInterrupted = NO;
[self updateAudioSessionAfterEvent];
}
@ -809,14 +811,26 @@ NSString * const kRTCAudioSessionOutputVolumeSelector = @"outputVolume";
if (_session != session) {
RTCLogError(@"audioSessionDidActivate called on different AVAudioSession");
}
RTCLog(@"Audio session was externally activated.");
[self incrementActivationCount];
self.isActive = YES;
// When a CallKit call begins, it's possible that we receive an interruption
// begin without a corresponding end. Since we know that we have an activated
// audio session at this point, just clear any saved interruption flag since
// the app may never be foregrounded during the duration of the call.
if (self.isInterrupted) {
RTCLog(@"Clearing interrupted state due to external activation.");
self.isInterrupted = NO;
}
// Treat external audio session activation as an end interruption event.
[self notifyDidEndInterruptionWithShouldResumeSession:YES];
}
- (void)audioSessionDidDeactivate:(AVAudioSession *)session {
if (_session != session) {
RTCLogError(@"audioSessionDidDeactivate called on different AVAudioSession");
}
RTCLog(@"Audio session was externally deactivated.");
self.isActive = NO;
[self decrementActivationCount];
}