diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 98779197db693..23061153a14e2 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -143,25 +143,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { String.valueOf(addr)); } - @ServiceThreadOnly - void queryDisplayStatus(IHdmiControlCallback callback) { - assertRunOnServiceThread(); - List 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) { diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 4b589255b251e..3b3ac747db6cc 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java @@ -70,6 +70,25 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { super(service, deviceType); } + @ServiceThreadOnly + void queryDisplayStatus(IHdmiControlCallback callback) { + assertRunOnServiceThread(); + List 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) { diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 1ff8803e0af03..37b1459aa0a5b 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -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; } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java index 8f56fc8930202..d450037155528 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -1182,6 +1182,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(