diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java old mode 100755 new mode 100644 index fb2d2ee08cbda..84868f58d9227 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -1125,6 +1125,16 @@ abstract class HdmiCecLocalDevice { removeActionExcept(clazz, null); } + // Remove all running actions. + @ServiceThreadOnly + void removeAllActions() { + assertRunOnServiceThread(); + for (HdmiCecFeatureAction action : mActions) { + action.finish(false); + } + mActions.clear(); + } + // Remove all actions matched with the given Class type besides |exception|. @ServiceThreadOnly void removeActionExcept( diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java index 32ff5e2208254..a46dd0460d3b3 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java @@ -229,6 +229,14 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { super.disableDevice(initiatedByCec, callback); assertRunOnServiceThread(); mService.unregisterTvInputCallback(mTvInputCallback); + // Removing actions and invoking the callback is similar to + // HdmiCecLocalDevicePlayback#disableDevice and HdmiCecLocalDeviceTv#disableDevice, + // with the difference that in those classes only specific actions are removed and + // here we remove all actions. We don't expect any issues with removing all actions + // at this time, but we have to pay attention in the future. + removeAllActions(); + // Call the callback instantly or else it will be called 5 seconds later. + checkIfPendingActionsCleared(); } @Override