diff options
4 files changed, 39 insertions, 21 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 109f6a7f56fe..9ca1f913f5ce 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -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) { diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 4b589255b251..3b3ac747db6c 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<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) { diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 1ff8803e0af0..37b1459aa0a5 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) { + source = audioSystem(); + } + if (source == null) { - Slog.w(TAG, "Local playback device not available"); + 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 f0d87cbe19a7..dfeed1362b81 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -1250,6 +1250,20 @@ public class HdmiCecLocalDevicePlaybackTest { } @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( HdmiControlManager.CEC_SETTING_NAME_SEND_STANDBY_ON_SLEEP, |