Merge "Migrate CEC enabled value to CEC configuration"

This commit is contained in:
TreeHugger Robot
2021-01-20 15:31:37 +00:00
committed by Android (Google) Code Review
8 changed files with 63 additions and 42 deletions

View File

@@ -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>
@@ -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));

View File

@@ -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);
}

View File

@@ -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);
}
}
};

View File

@@ -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<IHdmiControlStatusChangeListener> 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<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;
@@ -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 {
@@ -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));

View File

@@ -104,6 +104,10 @@ public class ArcInitiationActionFromAvrTest {
return true;
}
@Override
protected void writeStringSystemProperty(String key, String value) {
}
@Override
Looper getServiceLooper() {
return mTestLooper.getLooper();

View File

@@ -105,6 +105,10 @@ public class ArcTerminationActionFromAvrTest {
return true;
}
@Override
protected void writeStringSystemProperty(String key, String value) {
}
@Override
Looper getServiceLooper() {
return mTestLooper.getLooper();

View File

@@ -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();

View File

@@ -137,6 +137,10 @@ public class SystemAudioInitiationActionFromAvrTest {
return true;
}
@Override
protected void writeStringSystemProperty(String key, String value) {
}
@Override
void wakeUp() {}