From 8e10acae37e28b6088f6d7509f93d4dd5181875c Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Wed, 20 Jul 2022 18:12:59 -0700 Subject: [PATCH] Spatializer: Fix lost settings after reboot Test: Disable BT/headset spatializer and verify after reboot still disabled Bug: 239756754 Change-Id: I68e31377c8cbeab3df5c7924afb7277bf8a30dcd --- .../java/com/android/server/audio/AudioService.java | 5 +---- .../com/android/server/audio/SpatializerHelper.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 0040ea9215b3a..ebedcfdfe0aef 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -9181,11 +9181,8 @@ public class AudioService extends IAudioService.Stub Settings.Secure.SPATIAL_AUDIO_ENABLED, UserHandle.USER_CURRENT); if (settings == null) { Log.e(TAG, "error reading spatial audio device settings"); - } else { - Log.v(TAG, "restoring spatial audio device settings: " + settings); - mSpatializerHelper.setSADeviceSettings(settings); } - mSpatializerHelper.init(/*effectExpected*/ mHasSpatializerEffect); + mSpatializerHelper.init(/*effectExpected*/ mHasSpatializerEffect, settings); mSpatializerHelper.setFeatureEnabled(mHasSpatializerEffect); } diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java index dd44af1b68eea..cd5960ffbf324 100644 --- a/services/core/java/com/android/server/audio/SpatializerHelper.java +++ b/services/core/java/com/android/server/audio/SpatializerHelper.java @@ -175,7 +175,7 @@ public class SpatializerHelper { mASA = asa; } - synchronized void init(boolean effectExpected) { + synchronized void init(boolean effectExpected, @Nullable String settings) { loglogi("init effectExpected=" + effectExpected); if (!effectExpected) { loglogi("init(): setting state to STATE_NOT_SUPPORTED due to effect not expected"); @@ -278,6 +278,13 @@ public class SpatializerHelper { mSACapableDeviceTypes.add(SPAT_MODE_FOR_DEVICE_TYPE.keyAt(i)); } } + + // When initialized from AudioService, the settings string will be non-null. + // Saved settings need to be applied after spatialization support is initialized above. + if (settings != null) { + setSADeviceSettings(settings); + } + // for both transaural / binaural, we are not forcing enablement as the init() method // could have been called another time after boot in case of audioserver restart addCompatibleAudioDevice( @@ -316,7 +323,7 @@ public class SpatializerHelper { mState = STATE_UNINITIALIZED; mSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; mActualHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED; - init(true); + init(true, null /* settings */); setSpatializerEnabledInt(featureEnabled); } @@ -731,7 +738,7 @@ public class SpatializerHelper { return; } if (mState == STATE_UNINITIALIZED) { - init(true); + init(true, null /* settings */); } setSpatializerEnabledInt(true); } else {