Merge "Fix missing invocation of HdmiControlStatusListener" into sc-dev am: 7182e9a30e
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14964836 Change-Id: I6108da08cd0ece56ee2062bb392597dea24ad775
This commit is contained in:
@@ -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);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user