diff options
3 files changed, 17 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java index 0671464a1ed4..952af69f0e1a 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -1117,6 +1117,7 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice { } // Returns all actions matched with given class type. + @VisibleForTesting @ServiceThreadOnly <T extends HdmiCecFeatureAction> List<T> getActions(final Class<T> clazz) { assertRunOnServiceThread(); diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 824c8dbb144d..ba4d320df38c 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -126,6 +126,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { private void launchDeviceDiscovery() { assertRunOnServiceThread(); clearDeviceInfoList(); + if (hasAction(DeviceDiscoveryAction.class)) { + Slog.i(TAG, "Device Discovery Action is in progress. Restarting."); + removeAction(DeviceDiscoveryAction.class); + } DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, new DeviceDiscoveryAction.DeviceDiscoveryCallback() { @Override 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 dec89d90cea5..543fa5727f19 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -1774,6 +1774,18 @@ public class HdmiCecLocalDevicePlaybackTest { } @Test + public void wakeUp_hotPlugIn_invokesDeviceDiscoveryOnce() { + mNativeWrapper.setPollAddressResponse(Constants.ADDR_PLAYBACK_2, SendMessageResult.SUCCESS); + mHdmiControlService.onWakeUp(HdmiControlService.WAKE_UP_SCREEN_ON); + mTestLooper.dispatchAll(); + + mNativeWrapper.onHotplugEvent(1, true); + mTestLooper.dispatchAll(); + + assertThat(mHdmiCecLocalDevicePlayback.getActions(DeviceDiscoveryAction.class)).hasSize(1); + } + + @Test public void hotplugDetectionAction_addDevice() { int otherPlaybackLogicalAddress = mPlaybackLogicalAddress == Constants.ADDR_PLAYBACK_2 ? Constants.ADDR_PLAYBACK_1 : Constants.ADDR_PLAYBACK_2; |