Merge "Generalize queryDisplayStatus() to all source devices"

This commit is contained in:
TreeHugger Robot
2020-11-19 16:28:37 +00:00
committed by Android (Google) Code Review
4 changed files with 39 additions and 21 deletions

View File

@@ -128,25 +128,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
String.valueOf(addr));
}
@ServiceThreadOnly
void queryDisplayStatus(IHdmiControlCallback callback) {
assertRunOnServiceThread();
List<DevicePowerStatusAction> actions = getActions(DevicePowerStatusAction.class);
if (!actions.isEmpty()) {
Slog.i(TAG, "queryDisplayStatus already in progress");
actions.get(0).addCallback(callback);
return;
}
DevicePowerStatusAction action = DevicePowerStatusAction.create(this, Constants.ADDR_TV,
callback);
if (action == null) {
Slog.w(TAG, "Cannot initiate queryDisplayStatus");
invokeCallback(callback, HdmiControlManager.RESULT_EXCEPTION);
return;
}
addAndStartAction(action);
}
@Override
@ServiceThreadOnly
void onHotplug(int portId, boolean connected) {

View File

@@ -70,6 +70,25 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
super(service, deviceType);
}
@ServiceThreadOnly
void queryDisplayStatus(IHdmiControlCallback callback) {
assertRunOnServiceThread();
List<DevicePowerStatusAction> actions = getActions(DevicePowerStatusAction.class);
if (!actions.isEmpty()) {
Slog.i(TAG, "queryDisplayStatus already in progress");
actions.get(0).addCallback(callback);
return;
}
DevicePowerStatusAction action = DevicePowerStatusAction.create(this, Constants.ADDR_TV,
callback);
if (action == null) {
Slog.w(TAG, "Cannot initiate queryDisplayStatus");
invokeCallback(callback, HdmiControlManager.RESULT_EXCEPTION);
return;
}
addAndStartAction(action);
}
@Override
@ServiceThreadOnly
void onHotplug(int portId, boolean connected) {

View File

@@ -2400,9 +2400,13 @@ public class HdmiControlService extends SystemService {
return;
}
HdmiCecLocalDevicePlayback source = playback();
HdmiCecLocalDeviceSource source = playback();
if (source == null) {
Slog.w(TAG, "Local playback device not available");
source = audioSystem();
}
if (source == null) {
Slog.w(TAG, "Local source device not available");
invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}

View File

@@ -1249,6 +1249,20 @@ public class HdmiCecLocalDevicePlaybackTest {
externalDevice.getPhysicalAddress());
}
@Test
public void queryDisplayStatus() {
mHdmiControlService.queryDisplayStatus(new IHdmiControlCallback.Stub() {
@Override
public void onComplete(int result) {
}
});
mTestLooper.dispatchAll();
HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildGiveDevicePowerStatus(
mPlaybackLogicalAddress, Constants.ADDR_TV);
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
}
@Test
public void toggleAndFollowTvPower_ToTv_TvStatusOn() {
mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(