AudioService: more communication mode fix
Do not reset communication mode when an app is not playing or capturing audio if the app is not the audio mode owner. In case of dual call situation, a VoIP call can be placed on hold and it is legit for the app to remain in the mode owner stack but pause capture and playback. Bug: 161564483 Test: VoIP call interrupted by Cell call. Change-Id: Iac5bee9b606e3663b63a4c1c58f9c7a880ab0311
This commit is contained in:
@@ -6735,14 +6735,17 @@ public class AudioService extends IAudioService.Stub
|
|||||||
if (msg.obj == null) {
|
if (msg.obj == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// If the app corresponding to this mode death handler object is not
|
// If no other app is currently owning the audio mode and
|
||||||
// capturing or playing audio anymore after 3 seconds, remove it
|
// the app corresponding to this mode death handler object is still in the
|
||||||
// from the stack. Otherwise, check again in 3 seconds.
|
// mode owner stack but not capturing or playing audio after 3 seconds,
|
||||||
|
// remove it from the stack.
|
||||||
|
// Otherwise, check again in 3 seconds.
|
||||||
SetModeDeathHandler h = (SetModeDeathHandler) msg.obj;
|
SetModeDeathHandler h = (SetModeDeathHandler) msg.obj;
|
||||||
if (mSetModeDeathHandlers.indexOf(h) < 0) {
|
if (mSetModeDeathHandlers.indexOf(h) < 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (mRecordMonitor.isRecordingActiveForUid(h.getUid())
|
if (getModeOwnerUid() != h.getUid()
|
||||||
|
|| mRecordMonitor.isRecordingActiveForUid(h.getUid())
|
||||||
|| mPlaybackMonitor.isPlaybackActiveForUid(h.getUid())) {
|
|| mPlaybackMonitor.isPlaybackActiveForUid(h.getUid())) {
|
||||||
sendMsg(mAudioHandler,
|
sendMsg(mAudioHandler,
|
||||||
MSG_CHECK_MODE_FOR_UID,
|
MSG_CHECK_MODE_FOR_UID,
|
||||||
|
|||||||
Reference in New Issue
Block a user