diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java index dddf7352424b2..78584990e75e2 100644 --- a/core/java/android/hardware/hdmi/HdmiControlManager.java +++ b/core/java/android/hardware/hdmi/HdmiControlManager.java @@ -1110,7 +1110,8 @@ public final class HdmiControlManager { * * Note: Value of isCecAvailable is only valid when isCecEnabled is true. **/ - void onStatusChange(boolean isCecEnabled, boolean isCecAvailable); + void onStatusChange(@HdmiControlManager.HdmiCecControl int isCecEnabled, + boolean isCecAvailable); } private final ArrayMap @@ -1351,7 +1352,7 @@ public final class HdmiControlManager { Executor executor, final HdmiControlStatusChangeListener listener) { return new IHdmiControlStatusChangeListener.Stub() { @Override - public void onStatusChange(boolean isCecEnabled, boolean isCecAvailable) { + public void onStatusChange(@HdmiCecControl int isCecEnabled, boolean isCecAvailable) { final long token = Binder.clearCallingIdentity(); try { executor.execute(() -> listener.onStatusChange(isCecEnabled, isCecAvailable)); diff --git a/core/java/android/hardware/hdmi/IHdmiControlStatusChangeListener.aidl b/core/java/android/hardware/hdmi/IHdmiControlStatusChangeListener.aidl index 889d3fe1fae10..d61ab6ac2da70 100644 --- a/core/java/android/hardware/hdmi/IHdmiControlStatusChangeListener.aidl +++ b/core/java/android/hardware/hdmi/IHdmiControlStatusChangeListener.aidl @@ -28,11 +28,11 @@ oneway interface IHdmiControlStatusChangeListener { * Called when HDMI Control (CEC) is enabled/disabled. * * @param isCecEnabled status of HDMI Control - * {@link android.provider.Settings.Global#HDMI_CONTROL_ENABLED}: {@code true} if enabled. + * {@link android.hardware.hdmi.HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_ENABLED}: {@link android.hardware.hdmi.HdmiControlManager#HDMI_CEC_CONTROL_ENABLED} if enabled. * @param isCecAvailable status of CEC support of the connected display (the TV). * {@code true} if supported. * - * Note: Value of isCecAvailable is only valid when isCecEnabled is true. + * Note: Value of isCecAvailable is only valid when isCecEnabled is {@link android.hardware.hdmi.HdmiControlManager#HDMI_CEC_CONTROL_ENABLED}. **/ - void onStatusChange(boolean isCecEnabled, boolean isCecAvailable); + void onStatusChange(int isCecEnabled, boolean isCecAvailable); } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index e13d6af99231d..7115c9ad5a05f 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -7724,10 +7724,12 @@ public class AudioService extends IAudioService.Stub private class MyHdmiControlStatusChangeListenerCallback implements HdmiControlManager.HdmiControlStatusChangeListener { - public void onStatusChange(boolean isCecEnabled, boolean isCecAvailable) { + public void onStatusChange(@HdmiControlManager.HdmiCecControl int isCecEnabled, + boolean isCecAvailable) { synchronized (mHdmiClientLock) { if (mHdmiManager == null) return; - updateHdmiCecSinkLocked(isCecEnabled ? isCecAvailable : false); + boolean cecEnabled = isCecEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; + updateHdmiCecSinkLocked(cecEnabled ? isCecAvailable : false); } } }; diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index beaf6d53370d1..9b194ae84a378 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -18,6 +18,7 @@ package com.android.server.hdmi; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_ADD_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE; +import static android.hardware.hdmi.HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED; import static com.android.server.hdmi.Constants.DISABLED; @@ -325,7 +326,8 @@ public class HdmiControlService extends SystemService { // Set to true while HDMI control is enabled. If set to false, HDMI-CEC/MHL protocol // handling will be disabled and no request will be handled. @GuardedBy("mLock") - private boolean mHdmiControlEnabled; + @HdmiControlManager.HdmiCecControl + private int mHdmiControlEnabled; // Set to true while the service is in normal mode. While set to false, no input change is // allowed. Used for situations where input change can confuse users such as channel auto-scan, @@ -477,8 +479,7 @@ public class HdmiControlService extends SystemService { mPowerStatusController.setPowerStatus(getInitialPowerStatus()); mProhibitMode = false; mHdmiControlEnabled = mHdmiCecConfig.getIntValue( - HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED) - == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED); setHdmiCecVolumeControlEnabledInternal(getHdmiCecConfig().getIntValue( HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)); mMhlInputChangeEnabled = readBooleanSetting(Global.MHL_INPUT_SWITCHING_ENABLED, true); @@ -497,7 +498,7 @@ public class HdmiControlService extends SystemService { Slog.i(TAG, "Device does not support MHL-control."); } mHdmiCecNetwork = new HdmiCecNetwork(this, mCecController, mMhlController); - if (mHdmiControlEnabled) { + if (mHdmiControlEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED) { initializeCec(INITIATED_BY_BOOT_UP); } else { mCecController.setOption(OptionKey.ENABLE_CEC, false); @@ -513,9 +514,8 @@ public class HdmiControlService extends SystemService { new HdmiCecConfig.SettingChangeListener() { @Override public void onChange(String setting) { - boolean enabled = mHdmiCecConfig.getIntValue( - HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED) - == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; + @HdmiControlManager.HdmiCecControl int enabled = mHdmiCecConfig.getIntValue( + HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED); setControlEnabled(enabled); } }); @@ -630,7 +630,7 @@ public class HdmiControlService extends SystemService { } if (reason != -1) { invokeVendorCommandListenersOnControlStateChanged(true, reason); - announceHdmiControlStatusChange(true); + announceHdmiControlStatusChange(HDMI_CEC_CONTROL_ENABLED); } } @@ -2193,7 +2193,6 @@ public class HdmiControlService extends SystemService { // System settings pw.println("System_settings:"); pw.increaseIndent(); - pw.println("mHdmiControlEnabled: " + mHdmiControlEnabled); pw.println("mMhlInputChangeEnabled: " + mMhlInputChangeEnabled); pw.println("mSystemAudioActivated: " + isSystemAudioActivated()); pw.println("mHdmiCecVolumeControlEnabled: " + mHdmiCecVolumeControl); @@ -2773,7 +2772,7 @@ public class HdmiControlService extends SystemService { } } - private void announceHdmiControlStatusChange(boolean isEnabled) { + private void announceHdmiControlStatusChange(@HdmiControlManager.HdmiCecControl int isEnabled) { assertRunOnServiceThread(); synchronized (mLock) { List listeners = new ArrayList<>( @@ -2787,16 +2786,18 @@ public class HdmiControlService extends SystemService { } private void invokeHdmiControlStatusChangeListenerLocked( - IHdmiControlStatusChangeListener listener, boolean isEnabled) { + IHdmiControlStatusChangeListener listener, + @HdmiControlManager.HdmiCecControl int isEnabled) { invokeHdmiControlStatusChangeListenerLocked(Collections.singletonList(listener), isEnabled); } private void invokeHdmiControlStatusChangeListenerLocked( - Collection listeners, boolean isEnabled) { + Collection listeners, + @HdmiControlManager.HdmiCecControl int isEnabled) { if (listeners.isEmpty()) { return; } - if (isEnabled) { + if (isEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED) { queryDisplayStatus(new IHdmiControlCallback.Stub() { public void onComplete(int status) { boolean isAvailable = true; @@ -2814,7 +2815,8 @@ public class HdmiControlService extends SystemService { } private void invokeHdmiControlStatusChangeListenerLocked( - Collection listeners, boolean isEnabled, + Collection listeners, + @HdmiControlManager.HdmiCecControl int isEnabled, boolean isCecAvailable) { for (IHdmiControlStatusChangeListener listener : listeners) { try { @@ -2881,7 +2883,7 @@ public class HdmiControlService extends SystemService { boolean isControlEnabled() { synchronized (mLock) { - return mHdmiControlEnabled; + return mHdmiControlEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; } } @@ -2955,7 +2957,7 @@ public class HdmiControlService extends SystemService { mPowerStatusController.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON, false); if (mCecController != null) { - if (mHdmiControlEnabled) { + if (mHdmiControlEnabled == HDMI_CEC_CONTROL_ENABLED) { int startReason = -1; switch (wakeUpAction) { case WAKE_UP_SCREEN_ON: @@ -3224,14 +3226,14 @@ public class HdmiControlService extends SystemService { } @ServiceThreadOnly - void setControlEnabled(boolean enabled) { + void setControlEnabled(@HdmiControlManager.HdmiCecControl int enabled) { assertRunOnServiceThread(); synchronized (mLock) { mHdmiControlEnabled = enabled; } - if (enabled) { + if (enabled == HDMI_CEC_CONTROL_ENABLED) { enableHdmiControlService(); setHdmiCecVolumeControlEnabledInternal(getHdmiCecConfig().getIntValue( HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java index 6e4d994bd416c..44418ce1e9c4e 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java @@ -104,6 +104,10 @@ public class ArcInitiationActionFromAvrTest { return true; } + @Override + protected void writeStringSystemProperty(String key, String value) { + } + @Override Looper getServiceLooper() { return mTestLooper.getLooper(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java index bbe1156c5d616..d454d8771e153 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java @@ -105,6 +105,10 @@ public class ArcTerminationActionFromAvrTest { return true; } + @Override + protected void writeStringSystemProperty(String key, String value) { + } + @Override Looper getServiceLooper() { return mTestLooper.getLooper(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java index dbb03cb6dbdc4..be584d7b45914 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -153,6 +153,10 @@ public class HdmiControlServiceTest { return mStandbyMessageReceived; } + @Override + protected void writeStringSystemProperty(String key, String value) { + } + @Override protected HdmiCecConfig getHdmiCecConfig() { return hdmiCecConfig; @@ -251,7 +255,7 @@ public class HdmiControlServiceTest { HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_1_4_B); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); mNativeWrapper.clearResultMessages(); assertThat(mHdmiControlService.getInitialPowerStatus()).isEqualTo( @@ -271,7 +275,7 @@ public class HdmiControlServiceTest { HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); mNativeWrapper.clearResultMessages(); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); @@ -347,11 +351,11 @@ public class HdmiControlServiceTest { int volumeControlEnabled = HdmiControlManager.VOLUME_CONTROL_ENABLED; mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(volumeControlEnabled); - mHdmiControlService.setControlEnabled(false); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED); assertThat(mHdmiControlService.getHdmiCecVolumeControl()).isEqualTo( HdmiControlManager.VOLUME_CONTROL_DISABLED); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getHdmiCecVolumeControl()).isEqualTo(volumeControlEnabled); } @@ -361,12 +365,12 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE, volumeControlEnabled); - mHdmiControlService.setControlEnabled(false); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED); assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue( HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo( volumeControlEnabled); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getHdmiCecConfig().getIntValue( HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)).isEqualTo( volumeControlEnabled); @@ -381,13 +385,13 @@ public class HdmiControlServiceTest { VolumeControlFeatureCallback callback = new VolumeControlFeatureCallback(); mHdmiControlService.addHdmiCecVolumeControlFeatureListener(callback); - mHdmiControlService.setControlEnabled(false); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED); assertThat(callback.mCallbackReceived).isTrue(); assertThat(callback.mVolumeControlEnabled).isEqualTo( HdmiControlManager.VOLUME_CONTROL_DISABLED); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(callback.mVolumeControlEnabled).isEqualTo( HdmiControlManager.VOLUME_CONTROL_ENABLED); } @@ -485,7 +489,7 @@ public class HdmiControlServiceTest { Settings.Global.putString(mContextSpy.getContentResolver(), Settings.Global.HDMI_CEC_VERSION, null); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getCecVersion()).isEqualTo( HdmiControlManager.HDMI_CEC_VERSION_1_4_B); } @@ -495,7 +499,7 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_1_4_B); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getCecVersion()).isEqualTo( HdmiControlManager.HDMI_CEC_VERSION_1_4_B); } @@ -505,7 +509,7 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getCecVersion()).isEqualTo( HdmiControlManager.HDMI_CEC_VERSION_2_0); } @@ -515,14 +519,14 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_1_4_B); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getCecVersion()).isEqualTo( HdmiControlManager.HDMI_CEC_VERSION_1_4_B); mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); assertThat(mHdmiControlService.getCecVersion()).isEqualTo( HdmiControlManager.HDMI_CEC_VERSION_2_0); } @@ -532,7 +536,7 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_1_4_B); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); mTestLooper.dispatchAll(); mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildGiveFeatures(Constants.ADDR_TV, @@ -550,7 +554,7 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); @@ -572,7 +576,7 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_1_4_B); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); @@ -589,7 +593,7 @@ public class HdmiControlServiceTest { mHdmiControlService.getHdmiCecConfig().setIntValue( HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION, HdmiControlManager.HDMI_CEC_VERSION_2_0); - mHdmiControlService.setControlEnabled(true); + mHdmiControlService.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java index f80b5737d27b1..f9160abcbfbf8 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java @@ -137,6 +137,10 @@ public class SystemAudioInitiationActionFromAvrTest { return true; } + @Override + protected void writeStringSystemProperty(String key, String value) { + } + @Override void wakeUp() {}