Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c62ad38 authored by Eric Laurent's avatar Eric Laurent
Browse files

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
parent 08d26fa3
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -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;
            }