From 8c62ad3816fe455879ca1d41542b2864f03834dc Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 1 Apr 2021 15:30:54 +0200 Subject: [PATCH] AudioService: fix audio mode restoring Force onUpdateAudioMode() to reapply same audio mode in case of native audio server restart. Bug: 183919480 Test: kill audioserver during a call Change-Id: I1a988a537a50fae510ce0cc78ab8d1739b6e37d6 --- .../java/com/android/server/audio/AudioService.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 16a9626837078..cdeaca26375bb 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -1231,7 +1231,7 @@ public class AudioService extends IAudioService.Stub // Restore call state synchronized (mDeviceBroker.mSetModeLock) { onUpdateAudioMode(AudioSystem.MODE_CURRENT, android.os.Process.myPid(), - mContext.getPackageName()); + mContext.getPackageName(), true /*force*/); } final int forSys; synchronized (mSettingsLock) { @@ -4614,7 +4614,8 @@ public class AudioService extends IAudioService.Stub } @GuardedBy("mDeviceBroker.mSetModeLock") - void onUpdateAudioMode(int requestedMode, int requesterPid, String requesterPackage) { + void onUpdateAudioMode(int requestedMode, int requesterPid, String requesterPackage, + boolean force) { if (requestedMode == AudioSystem.MODE_CURRENT) { requestedMode = getMode(); } @@ -4631,7 +4632,7 @@ public class AudioService extends IAudioService.Stub Log.v(TAG, "onUpdateAudioMode() new mode: " + mode + ", current mode: " + mMode.get() + " requested mode: " + requestedMode); } - if (mode != mMode.get()) { + if (mode != mMode.get() || force) { final long identity = Binder.clearCallingIdentity(); int status = mAudioSystem.setPhoneState(mode, uid); Binder.restoreCallingIdentity(identity); @@ -7402,8 +7403,8 @@ public class AudioService extends IAudioService.Stub h.setPlaybackActive(mPlaybackMonitor.isPlaybackActiveForUid(h.getUid())); h.setRecordingActive(mRecordMonitor.isRecordingActiveForUid(h.getUid())); if (wasActive != h.isActive()) { - onUpdateAudioMode(AudioSystem.MODE_CURRENT, - android.os.Process.myPid(), mContext.getPackageName()); + onUpdateAudioMode(AudioSystem.MODE_CURRENT, android.os.Process.myPid(), + mContext.getPackageName(), false /*force*/); } } break; @@ -7428,7 +7429,7 @@ public class AudioService extends IAudioService.Stub case MSG_UPDATE_AUDIO_MODE: synchronized (mDeviceBroker.mSetModeLock) { - onUpdateAudioMode(msg.arg1, msg.arg2, (String) msg.obj); + onUpdateAudioMode(msg.arg1, msg.arg2, (String) msg.obj, false /*force*/); } break; }