Merge "Fix missing invocation of HdmiControlStatusListener" into sc-dev am: 7182e9a30e am: 2781dd545a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14964836

Change-Id: I7baab3a973bcec7aa1a0e5c6fbec7004f991a5db
This commit is contained in:
TreeHugger Robot
2021-06-18 08:38:48 +00:00
committed by Automerger Merge Worker
2 changed files with 104 additions and 4 deletions

View File

@@ -2580,7 +2580,8 @@ public class HdmiControlService extends SystemService {
return null; return null;
} }
private void addHdmiControlStatusChangeListener( @VisibleForTesting
void addHdmiControlStatusChangeListener(
final IHdmiControlStatusChangeListener listener) { final IHdmiControlStatusChangeListener listener) {
final HdmiControlStatusChangeListenerRecord record = final HdmiControlStatusChangeListenerRecord record =
new HdmiControlStatusChangeListenerRecord(listener); new HdmiControlStatusChangeListenerRecord(listener);
@@ -2916,13 +2917,17 @@ public class HdmiControlService extends SystemService {
} else { } else {
mIsCecAvailable = true; mIsCecAvailable = true;
} }
if (!listeners.isEmpty()) {
invokeHdmiControlStatusChangeListenerLocked(listeners,
isEnabled, mIsCecAvailable);
}
} }
}); });
} else { } else {
mIsCecAvailable = false; mIsCecAvailable = false;
} if (!listeners.isEmpty()) {
if (!listeners.isEmpty()) { invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, mIsCecAvailable);
invokeHdmiControlStatusChangeListenerLocked(listeners, isEnabled, mIsCecAvailable); }
} }
} }

View File

@@ -40,6 +40,7 @@ import android.content.ContextWrapper;
import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.hdmi.IHdmiCecVolumeControlFeatureListener; import android.hardware.hdmi.IHdmiCecVolumeControlFeatureListener;
import android.hardware.hdmi.IHdmiControlStatusChangeListener;
import android.os.Binder; import android.os.Binder;
import android.os.IPowerManager; import android.os.IPowerManager;
import android.os.IThermalService; import android.os.IThermalService;
@@ -683,6 +684,100 @@ public class HdmiControlServiceTest {
HdmiControlManager.HDMI_CEC_VERSION_2_0); HdmiControlManager.HDMI_CEC_VERSION_2_0);
} }
@Test
public void initCec_statusListener_CecDisabled() {
HdmiControlStatusCallback hdmiControlStatusCallback = new HdmiControlStatusCallback();
mHdmiControlServiceSpy.addHdmiControlStatusChangeListener(hdmiControlStatusCallback);
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
mTestLooper.dispatchAll();
assertThat(hdmiControlStatusCallback.mCecEnabled).isFalse();
assertThat(hdmiControlStatusCallback.mCecAvailable).isFalse();
}
@Test
public void initCec_statusListener_CecEnabled_NoCecResponse() {
HdmiControlStatusCallback hdmiControlStatusCallback = new HdmiControlStatusCallback();
mHdmiControlServiceSpy.addHdmiControlStatusChangeListener(hdmiControlStatusCallback);
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
mTestLooper.dispatchAll();
mHdmiControlServiceSpy.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED,
HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
mTestLooper.dispatchAll();
// Hit timeout twice due to retries
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
mTestLooper.dispatchAll();
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
mTestLooper.dispatchAll();
assertThat(hdmiControlStatusCallback.mCecEnabled).isTrue();
assertThat(hdmiControlStatusCallback.mCecAvailable).isFalse();
}
@Test
public void initCec_statusListener_CecEnabled_CecAvailable_TvOn() {
HdmiControlStatusCallback hdmiControlStatusCallback = new HdmiControlStatusCallback();
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
mTestLooper.dispatchAll();
mHdmiControlServiceSpy.addHdmiControlStatusChangeListener(hdmiControlStatusCallback);
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
mTestLooper.dispatchAll();
HdmiCecMessage reportPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(
Constants.ADDR_TV,
mHdmiControlServiceSpy.playback().mAddress, HdmiControlManager.POWER_STATUS_ON);
mNativeWrapper.onCecMessage(reportPowerStatus);
mTestLooper.dispatchAll();
assertThat(hdmiControlStatusCallback.mCecEnabled).isTrue();
assertThat(hdmiControlStatusCallback.mCecAvailable).isTrue();
}
@Test
public void initCec_statusListener_CecEnabled_CecAvailable_TvStandby() {
HdmiControlStatusCallback hdmiControlStatusCallback = new HdmiControlStatusCallback();
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_DISABLED);
mTestLooper.dispatchAll();
mHdmiControlServiceSpy.addHdmiControlStatusChangeListener(hdmiControlStatusCallback);
mHdmiControlServiceSpy.setControlEnabled(HdmiControlManager.HDMI_CEC_CONTROL_ENABLED);
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
mTestLooper.dispatchAll();
HdmiCecMessage reportPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(
Constants.ADDR_TV,
mHdmiControlServiceSpy.playback().mAddress,
HdmiControlManager.POWER_STATUS_STANDBY);
mNativeWrapper.onCecMessage(reportPowerStatus);
mTestLooper.dispatchAll();
assertThat(hdmiControlStatusCallback.mCecEnabled).isTrue();
assertThat(hdmiControlStatusCallback.mCecAvailable).isTrue();
}
private static class HdmiControlStatusCallback extends IHdmiControlStatusChangeListener.Stub {
boolean mCecEnabled = false;
boolean mCecAvailable = false;
@Override
public void onStatusChange(int isCecEnabled, boolean isCecAvailable)
throws RemoteException {
mCecEnabled = isCecEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED;
mCecAvailable = isCecAvailable;
}
}
private static class VolumeControlFeatureCallback extends private static class VolumeControlFeatureCallback extends
IHdmiCecVolumeControlFeatureListener.Stub { IHdmiCecVolumeControlFeatureListener.Stub {
boolean mCallbackReceived = false; boolean mCallbackReceived = false;