diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java index e22b37d13328f..0566d32160fc0 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java @@ -83,12 +83,6 @@ public class HdmiCecConfig { }) private @interface ValueType {} - /** - * System property key for Audio Mode Muting. - */ - public static final String SYSPROP_SYSTEM_AUDIO_MODE_MUTING = - "ro.hdmi.cec.audio.system_audio_mode_muting.enabled"; - @NonNull private final Context mContext; @NonNull private final StorageAdapter mStorageAdapter; @Nullable private final CecSettings mSystemConfig; @@ -264,7 +258,7 @@ public class HdmiCecConfig { case HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST: return STORAGE_SHARED_PREFS; case HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING: - return STORAGE_SYSPROPS; + return STORAGE_SHARED_PREFS; default: throw new RuntimeException("Invalid CEC setting '" + setting.getName() + "' storage."); @@ -282,7 +276,7 @@ public class HdmiCecConfig { case HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST: return setting.getName(); case HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING: - return SYSPROP_SYSTEM_AUDIO_MODE_MUTING; + return setting.getName(); default: throw new RuntimeException("Invalid CEC setting '" + setting.getName() + "' storage key."); diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java index 4110de6fee909..46b09dc07e61a 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java @@ -778,11 +778,14 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { switchToAudioInput(); } // Mute device when feature is turned off and unmute device when feature is turned on. - // PROPERTY_SYSTEM_AUDIO_MODE_MUTING_ENABLE is false when device never needs to be muted. + // CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING is false when device never needs to be muted. + boolean systemAudioModeMutingEnabled = mService.getHdmiCecConfig().getIntValue( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING) + == HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_ENABLED; boolean currentMuteStatus = mService.getAudioManager().isStreamMute(AudioManager.STREAM_MUSIC); if (currentMuteStatus == newSystemAudioMode) { - if (HdmiProperties.system_audio_mode_muting().orElse(true) || newSystemAudioMode) { + if (systemAudioModeMutingEnabled || newSystemAudioMode) { mService.getAudioManager() .adjustStreamVolume( AudioManager.STREAM_MUSIC, @@ -806,7 +809,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { // Audio Mode is off even without terminating the ARC. This can stop the current // audio device from playing audio when system audio mode is off. if (mArcIntentUsed - && !HdmiProperties.system_audio_mode_muting().orElse(true) + && !systemAudioModeMutingEnabled && !newSystemAudioMode && getLocalActivePort() == Constants.CEC_SWITCH_ARC) { routeToInputFromPortId(getRoutingPort()); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java index a7f6b82fae10e..227e8c76987f8 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java @@ -68,6 +68,15 @@ final class FakeHdmiCecConfig extends HdmiCecConfig { + " " + " " + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + ""; FakeHdmiCecConfig(@NonNull Context context) { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java index 596faee46eb75..d10e075c51360 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java @@ -750,9 +750,9 @@ public final class HdmiCecConfigTest { } @Test - public void getIntValue_SystemProperty_BasicSanity() { - when(mStorageAdapter.retrieveSystemProperty( - HdmiCecConfig.SYSPROP_SYSTEM_AUDIO_MODE_MUTING, + public void getIntValue_SharedPref_BasicSanity() { + when(mStorageAdapter.retrieveSharedPref( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_ENABLED))) .thenReturn(Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( @@ -997,7 +997,7 @@ public final class HdmiCecConfigTest { } @Test - public void setIntValue_SystemProperty_BasicSanity() { + public void setIntValue_SharedPref_BasicSanity() { HdmiCecConfig hdmiCecConfig = HdmiCecConfig.createFromStrings( mContext, mStorageAdapter, "" @@ -1015,8 +1015,8 @@ public final class HdmiCecConfigTest { hdmiCecConfig.setIntValue( HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); - verify(mStorageAdapter).storeSystemProperty( - HdmiCecConfig.SYSPROP_SYSTEM_AUDIO_MODE_MUTING, + verify(mStorageAdapter).storeSharedPref( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, Integer.toString(HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED)); } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java index 25530940e9648..3fd3ce3cd0df2 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java @@ -27,6 +27,7 @@ import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF; import static com.google.common.truth.Truth.assertThat; import android.content.Context; +import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiControlCallback; @@ -451,6 +452,39 @@ public class HdmiCecLocalDeviceAudioSystemTest { .isTrue(); } + @Test + public void systemAudioModeMuting_enabled() { + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, + HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_ENABLED); + mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(true); + assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isTrue(); + assertThat(mHdmiControlService.getAudioManager().isStreamMute( + AudioManager.STREAM_MUSIC)).isFalse(); + mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(false); + assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isFalse(); + assertThat(mHdmiControlService.getAudioManager().isStreamMute( + AudioManager.STREAM_MUSIC)).isTrue(); + } + + @Test + public void systemAudioModeMuting_disabled() { + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, + HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_DISABLED); + mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(true); + assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isTrue(); + assertThat(mHdmiControlService.getAudioManager().isStreamMute( + AudioManager.STREAM_MUSIC)).isFalse(); + mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(false); + assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isFalse(); + assertThat(mHdmiControlService.getAudioManager().isStreamMute( + AudioManager.STREAM_MUSIC)).isFalse(); + mHdmiControlService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, + HdmiControlManager.SYSTEM_AUDIO_MODE_MUTING_ENABLED); + } + @Test public void terminateSystemAudioMode_systemAudioModeOff() throws Exception { mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(false);