diff options
| author | 2020-11-03 10:27:13 +0100 | |
|---|---|---|
| committer | 2020-11-17 14:01:45 +0100 | |
| commit | 559d8ed8306979a4d9052b6f184c67082c175fff (patch) | |
| tree | 0280d98a1bdfb474021f0ec066e6122f65cb6a07 | |
| parent | 6815a7ce808695282dd7256059686c5b922a57ee (diff) | |
Generalize queryDisplayStatus() to all source devices
Bug: 167962015
Test: atest HdmiCecLocalDevicePlaybackTest
Change-Id: I51527f9055a7be374614b452f75d8ab9ced6454f
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 98779197db69..23061153a14e 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<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 8f56fc893020..d45003715552 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -1183,6 +1183,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, |