[CEC Configuration] Port 'system_audio_mode_muting'
1. Make use of the API in framework code 2. Store the setting in SharedPreferences under the hood Bug: 171870169 Bug: 171958586 Test: atest HdmiCecLocalDevicePlaybackTest HdmiCecConfigTest Change-Id: I80c48ee1f19f07b412b24e3d27bc8f963e7b423d
This commit is contained in:
@@ -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.");
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -68,6 +68,15 @@ final class FakeHdmiCecConfig extends HdmiCecConfig {
|
||||
+ " </allowed-values>"
|
||||
+ " <default-value int-value=\"0x05\" />"
|
||||
+ " </setting>"
|
||||
+ " <setting name=\"system_audio_mode_muting\""
|
||||
+ " value-type=\"int\""
|
||||
+ " user-configurable=\"true\">"
|
||||
+ " <allowed-values>"
|
||||
+ " <value int-value=\"0\" />"
|
||||
+ " <value int-value=\"1\" />"
|
||||
+ " </allowed-values>"
|
||||
+ " <default-value int-value=\"1\" />"
|
||||
+ " </setting>"
|
||||
+ "</cec-settings>";
|
||||
|
||||
FakeHdmiCecConfig(@NonNull Context context) {
|
||||
|
||||
@@ -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,
|
||||
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user