Loading core/java/android/hardware/hdmi/HdmiControlManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -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<HdmiControlStatusChangeListener, IHdmiControlStatusChangeListener> Loading Loading @@ -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)); Loading core/java/android/hardware/hdmi/IHdmiControlStatusChangeListener.aidl +3 −3 Original line number Diff line number Diff line Loading @@ -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); } services/core/java/com/android/server/audio/AudioService.java +4 −2 Original line number Diff line number Diff line Loading @@ -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); } } }; Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +20 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); } }); Loading Loading @@ -630,7 +630,7 @@ public class HdmiControlService extends SystemService { } if (reason != -1) { invokeVendorCommandListenersOnControlStateChanged(true, reason); announceHdmiControlStatusChange(true); announceHdmiControlStatusChange(HDMI_CEC_CONTROL_ENABLED); } } Loading Loading @@ -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); Loading Loading @@ -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<IHdmiControlStatusChangeListener> listeners = new ArrayList<>( Loading @@ -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<IHdmiControlStatusChangeListener> listeners, boolean isEnabled) { Collection<IHdmiControlStatusChangeListener> 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; Loading @@ -2814,7 +2815,8 @@ public class HdmiControlService extends SystemService { } private void invokeHdmiControlStatusChangeListenerLocked( Collection<IHdmiControlStatusChangeListener> listeners, boolean isEnabled, Collection<IHdmiControlStatusChangeListener> listeners, @HdmiControlManager.HdmiCecControl int isEnabled, boolean isCecAvailable) { for (IHdmiControlStatusChangeListener listener : listeners) { try { Loading Loading @@ -2881,7 +2883,7 @@ public class HdmiControlService extends SystemService { boolean isControlEnabled() { synchronized (mLock) { return mHdmiControlEnabled; return mHdmiControlEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; } } Loading Loading @@ -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: Loading Loading @@ -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)); Loading services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ public class ArcInitiationActionFromAvrTest { return true; } @Override protected void writeStringSystemProperty(String key, String value) { } @Override Looper getServiceLooper() { return mTestLooper.getLooper(); Loading Loading
core/java/android/hardware/hdmi/HdmiControlManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -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<HdmiControlStatusChangeListener, IHdmiControlStatusChangeListener> Loading Loading @@ -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)); Loading
core/java/android/hardware/hdmi/IHdmiControlStatusChangeListener.aidl +3 −3 Original line number Diff line number Diff line Loading @@ -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); }
services/core/java/com/android/server/audio/AudioService.java +4 −2 Original line number Diff line number Diff line Loading @@ -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); } } }; Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +20 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); } }); Loading Loading @@ -630,7 +630,7 @@ public class HdmiControlService extends SystemService { } if (reason != -1) { invokeVendorCommandListenersOnControlStateChanged(true, reason); announceHdmiControlStatusChange(true); announceHdmiControlStatusChange(HDMI_CEC_CONTROL_ENABLED); } } Loading Loading @@ -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); Loading Loading @@ -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<IHdmiControlStatusChangeListener> listeners = new ArrayList<>( Loading @@ -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<IHdmiControlStatusChangeListener> listeners, boolean isEnabled) { Collection<IHdmiControlStatusChangeListener> 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; Loading @@ -2814,7 +2815,8 @@ public class HdmiControlService extends SystemService { } private void invokeHdmiControlStatusChangeListenerLocked( Collection<IHdmiControlStatusChangeListener> listeners, boolean isEnabled, Collection<IHdmiControlStatusChangeListener> listeners, @HdmiControlManager.HdmiCecControl int isEnabled, boolean isCecAvailable) { for (IHdmiControlStatusChangeListener listener : listeners) { try { Loading Loading @@ -2881,7 +2883,7 @@ public class HdmiControlService extends SystemService { boolean isControlEnabled() { synchronized (mLock) { return mHdmiControlEnabled; return mHdmiControlEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; } } Loading Loading @@ -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: Loading Loading @@ -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)); Loading
services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ public class ArcInitiationActionFromAvrTest { return true; } @Override protected void writeStringSystemProperty(String key, String value) { } @Override Looper getServiceLooper() { return mTestLooper.getLooper(); Loading