Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +12 −2 Original line number Original line Diff line number Diff line Loading @@ -1029,11 +1029,21 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice { action.start(); action.start(); } } @ServiceThreadOnly void addAndStartAction(final HdmiCecFeatureAction action, final boolean remove) { assertRunOnServiceThread(); if (hasAction(action.getClass()) && remove) { // If the action is currently running, remove it and restart it. Slog.i(TAG, action.getClass().getName() + " is in progress. Restarting."); removeAction(action.getClass()); } addAndStartAction(action); } @ServiceThreadOnly @ServiceThreadOnly void startNewAvbAudioStatusAction(int targetAddress) { void startNewAvbAudioStatusAction(int targetAddress) { assertRunOnServiceThread(); assertRunOnServiceThread(); removeAction(AbsoluteVolumeAudioStatusAction.class); addAndStartAction(new AbsoluteVolumeAudioStatusAction(this, targetAddress), true); addAndStartAction(new AbsoluteVolumeAudioStatusAction(this, targetAddress)); } } @ServiceThreadOnly @ServiceThreadOnly Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +7 −21 Original line number Original line Diff line number Diff line Loading @@ -317,11 +317,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { if ((systemAudioOnPowerOnProp == ALWAYS_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) if ((systemAudioOnPowerOnProp == ALWAYS_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) || ((systemAudioOnPowerOnProp == USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) || ((systemAudioOnPowerOnProp == USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) && lastSystemAudioControlStatus && isSystemAudioControlFeatureEnabled())) { && lastSystemAudioControlStatus && isSystemAudioControlFeatureEnabled())) { if (hasAction(SystemAudioInitiationActionFromAvr.class)) { addAndStartAction(new SystemAudioInitiationActionFromAvr(this), true); Slog.i(TAG, "SystemAudioInitiationActionFromAvr is in progress. Restarting."); removeAction(SystemAudioInitiationActionFromAvr.class); } addAndStartAction(new SystemAudioInitiationActionFromAvr(this)); } } } } Loading Loading @@ -457,6 +453,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { HdmiLogger.debug("AVR device is not directly connected with TV"); HdmiLogger.debug("AVR device is not directly connected with TV"); return Constants.ABORT_NOT_IN_CORRECT_MODE; return Constants.ABORT_NOT_IN_CORRECT_MODE; } else { } else { // Action has been removed if it existed, do not attempt to remove again before start. addAndStartAction(new ArcInitiationActionFromAvr(this)); addAndStartAction(new ArcInitiationActionFromAvr(this)); return Constants.HANDLED; return Constants.HANDLED; } } Loading @@ -477,11 +474,9 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { && !getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.isEmpty()) { && !getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.isEmpty()) { IHdmiControlCallback callback = IHdmiControlCallback callback = getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.get(0); getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.get(0); removeAction(ArcTerminationActionFromAvr.class); addAndStartAction(new ArcTerminationActionFromAvr(this, callback), true); addAndStartAction(new ArcTerminationActionFromAvr(this, callback)); } else { } else { removeAction(ArcTerminationActionFromAvr.class); addAndStartAction(new ArcTerminationActionFromAvr(this), true); addAndStartAction(new ArcTerminationActionFromAvr(this)); } } return Constants.HANDLED; return Constants.HANDLED; } } Loading Loading @@ -1036,11 +1031,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { void onSystemAudioControlFeatureSupportChanged(boolean enabled) { void onSystemAudioControlFeatureSupportChanged(boolean enabled) { setSystemAudioControlFeatureEnabled(enabled); setSystemAudioControlFeatureEnabled(enabled); if (enabled) { if (enabled) { if (hasAction(SystemAudioInitiationActionFromAvr.class)) { addAndStartAction(new SystemAudioInitiationActionFromAvr(this), true); Slog.i(TAG, "SystemAudioInitiationActionFromAvr is in progress. Restarting."); removeAction(SystemAudioInitiationActionFromAvr.class); } addAndStartAction(new SystemAudioInitiationActionFromAvr(this)); } } } } Loading Loading @@ -1221,8 +1212,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { removeAction(ArcTerminationActionFromAvr.class); removeAction(ArcTerminationActionFromAvr.class); if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true) if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true) && isDirectConnectToTv() && !isArcEnabled()) { && isDirectConnectToTv() && !isArcEnabled()) { removeAction(ArcInitiationActionFromAvr.class); addAndStartAction(new ArcInitiationActionFromAvr(this), true); addAndStartAction(new ArcInitiationActionFromAvr(this)); } } } } Loading Loading @@ -1367,10 +1357,6 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { if (mService.isDeviceDiscoveryHandledByPlayback()) { if (mService.isDeviceDiscoveryHandledByPlayback()) { return; return; } } if (hasAction(DeviceDiscoveryAction.class)) { Slog.i(TAG, "Device Discovery Action is in progress. Restarting."); removeAction(DeviceDiscoveryAction.class); } DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, new DeviceDiscoveryCallback() { new DeviceDiscoveryCallback() { @Override @Override Loading @@ -1380,7 +1366,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { } } } } }); }); addAndStartAction(action); addAndStartAction(action, true); } } @Override @Override Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +18 −20 Original line number Original line Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.ComponentName; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.hardware.display.DeviceProductInfo; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.hdmi.IHdmiControlCallback; Loading @@ -32,7 +31,6 @@ import android.os.PowerManager; import android.os.SystemProperties; import android.os.SystemProperties; import android.sysprop.HdmiProperties; import android.sysprop.HdmiProperties; import android.util.Slog; import android.util.Slog; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.LocalePicker; import com.android.internal.app.LocalePicker; Loading Loading @@ -151,10 +149,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { private void launchDeviceDiscovery() { private void launchDeviceDiscovery() { assertRunOnServiceThread(); assertRunOnServiceThread(); clearDeviceInfoList(); clearDeviceInfoList(); if (hasAction(DeviceDiscoveryAction.class)) { Slog.i(TAG, "Device Discovery Action is in progress. Restarting."); removeAction(DeviceDiscoveryAction.class); } DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, new DeviceDiscoveryAction.DeviceDiscoveryCallback() { new DeviceDiscoveryAction.DeviceDiscoveryCallback() { @Override @Override Loading @@ -163,25 +157,21 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { mService.getHdmiCecNetwork().addCecDevice(info); mService.getHdmiCecNetwork().addCecDevice(info); } } // Since we removed all devices when it starts and device discovery action // Since we removed all devices when it starts and device discovery // does not poll local devices, we should put device info of local device // action does not poll local devices, we should put device info of // manually here. // local device manually here. for (HdmiCecLocalDevice device : mService.getAllCecLocalDevices()) { for (HdmiCecLocalDevice device : mService.getAllCecLocalDevices()) { mService.getHdmiCecNetwork().addCecDevice(device.getDeviceInfo()); mService.getHdmiCecNetwork().addCecDevice(device.getDeviceInfo()); } } List<HotplugDetectionAction> hotplugActions = if (!hasAction(HotplugDetectionAction.class)) { getActions(HotplugDetectionAction.class); if (hotplugActions.isEmpty()) { addAndStartAction( addAndStartAction( new HotplugDetectionAction(HdmiCecLocalDevicePlayback.this)); new HotplugDetectionAction( HdmiCecLocalDevicePlayback.this)); } } if (mService.isHdmiControlEnhancedBehaviorFlagEnabled()) { if (mService.isHdmiControlEnhancedBehaviorFlagEnabled()) { List<PowerStatusMonitorActionFromPlayback> if (!hasAction(PowerStatusMonitorActionFromPlayback.class)) { powerStatusMonitorActionsFromPlayback = getActions(PowerStatusMonitorActionFromPlayback.class); if (powerStatusMonitorActionsFromPlayback.isEmpty()) { addAndStartAction( addAndStartAction( new PowerStatusMonitorActionFromPlayback( new PowerStatusMonitorActionFromPlayback( HdmiCecLocalDevicePlayback.this)); HdmiCecLocalDevicePlayback.this)); Loading @@ -189,7 +179,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { } } } } }); }); addAndStartAction(action); addAndStartAction(action, true); } } @Override @Override Loading Loading @@ -235,8 +225,16 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); return; return; } } removeAction(DeviceSelectActionFromPlayback.class); List<DeviceSelectActionFromPlayback> actions = getActions( addAndStartAction(new DeviceSelectActionFromPlayback(this, targetDevice, callback)); DeviceSelectActionFromPlayback.class); if (!actions.isEmpty()) { DeviceSelectActionFromPlayback action = actions.get(0); if (action.getTargetAddress() == targetDevice.getLogicalAddress()) { return; } } addAndStartAction(new DeviceSelectActionFromPlayback(this, targetDevice, callback), true); } } @Override @Override Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +13 −15 Original line number Original line Diff line number Diff line Loading @@ -220,10 +220,6 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { List<HdmiCecMessage> bufferedActiveSource = mDelayedMessageBuffer List<HdmiCecMessage> bufferedActiveSource = mDelayedMessageBuffer .getBufferedMessagesWithOpcode(Constants.MESSAGE_ACTIVE_SOURCE); .getBufferedMessagesWithOpcode(Constants.MESSAGE_ACTIVE_SOURCE); if (bufferedActiveSource.isEmpty()) { if (bufferedActiveSource.isEmpty()) { if (hasAction(RequestActiveSourceAction.class)) { Slog.i(TAG, "RequestActiveSourceAction is in progress. Restarting."); removeAction(RequestActiveSourceAction.class); } addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() { addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() { @Override @Override public void onComplete(int result) { public void onComplete(int result) { Loading @@ -231,7 +227,7 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { launchRoutingControl(routingForBootup); launchRoutingControl(routingForBootup); } } } } })); }), true); } else { } else { addCecDeviceForBufferedActiveSource(bufferedActiveSource.get(0)); addCecDeviceForBufferedActiveSource(bufferedActiveSource.get(0)); } } Loading Loading @@ -328,8 +324,15 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); return; return; } } removeAction(DeviceSelectActionFromTv.class); List<DeviceSelectActionFromTv> actions = getActions(DeviceSelectActionFromTv.class); addAndStartAction(new DeviceSelectActionFromTv(this, targetDevice, callback)); if (!actions.isEmpty()) { DeviceSelectActionFromTv action = actions.get(0); if (action.getTargetAddress() == targetDevice.getLogicalAddress()) { return; } } addAndStartAction(new DeviceSelectActionFromTv(this, targetDevice, callback), true); } } @ServiceThreadOnly @ServiceThreadOnly Loading Loading @@ -475,9 +478,8 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { HdmiCecMessageBuilder.buildRoutingChange( HdmiCecMessageBuilder.buildRoutingChange( getDeviceInfo().getLogicalAddress(), oldPath, newPath); getDeviceInfo().getLogicalAddress(), oldPath, newPath); mService.sendCecCommand(routingChange); mService.sendCecCommand(routingChange); removeAction(RoutingControlAction.class); addAndStartAction( addAndStartAction( new RoutingControlAction(this, newPath, callback)); new RoutingControlAction(this, newPath, callback), true); } } @ServiceThreadOnly @ServiceThreadOnly Loading Loading @@ -801,16 +803,12 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { mSelectRequestBuffer.process(); mSelectRequestBuffer.process(); resetSelectRequestBuffer(); resetSelectRequestBuffer(); List<HotplugDetectionAction> hotplugActions if (!hasAction(HotplugDetectionAction.class)) { = getActions(HotplugDetectionAction.class); if (hotplugActions.isEmpty()) { addAndStartAction( addAndStartAction( new HotplugDetectionAction(HdmiCecLocalDeviceTv.this)); new HotplugDetectionAction(HdmiCecLocalDeviceTv.this)); } } List<PowerStatusMonitorAction> powerStatusActions if (!hasAction(PowerStatusMonitorAction.class)) { = getActions(PowerStatusMonitorAction.class); if (powerStatusActions.isEmpty()) { addAndStartAction( addAndStartAction( new PowerStatusMonitorAction(HdmiCecLocalDeviceTv.this)); new PowerStatusMonitorAction(HdmiCecLocalDeviceTv.this)); } } Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +1 −6 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.server.hdmi; package com.android.server.hdmi; import static android.media.tv.flags.Flags.hdmiControlEnhancedBehavior; import static android.media.tv.flags.Flags.hdmiControlEnhancedBehavior; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_ADD_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_ADD_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE; import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_DISABLED; import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_DISABLED; Loading Loading @@ -107,7 +106,6 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; import android.view.Display; import android.view.Display; import android.view.KeyEvent; import android.view.KeyEvent; import android.view.WindowManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -1218,9 +1216,6 @@ public class HdmiControlService extends SystemService { audioSystem.terminateSystemAudioMode(); audioSystem.terminateSystemAudioMode(); } } if (isArcEnabled) { if (isArcEnabled) { if (audioSystem.hasAction(ArcTerminationActionFromAvr.class)) { audioSystem.removeAction(ArcTerminationActionFromAvr.class); } audioSystem.addAndStartAction(new ArcTerminationActionFromAvr(audioSystem, audioSystem.addAndStartAction(new ArcTerminationActionFromAvr(audioSystem, new IHdmiControlCallback.Stub() { new IHdmiControlCallback.Stub() { @Override @Override Loading @@ -1228,7 +1223,7 @@ public class HdmiControlService extends SystemService { mAddressAllocated = false; mAddressAllocated = false; initializeCecLocalDevices(INITIATED_BY_SOUNDBAR_MODE); initializeCecLocalDevices(INITIATED_BY_SOUNDBAR_MODE); } } })); }), true); } } } } if (!isArcEnabled) { if (!isArcEnabled) { Loading Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +12 −2 Original line number Original line Diff line number Diff line Loading @@ -1029,11 +1029,21 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice { action.start(); action.start(); } } @ServiceThreadOnly void addAndStartAction(final HdmiCecFeatureAction action, final boolean remove) { assertRunOnServiceThread(); if (hasAction(action.getClass()) && remove) { // If the action is currently running, remove it and restart it. Slog.i(TAG, action.getClass().getName() + " is in progress. Restarting."); removeAction(action.getClass()); } addAndStartAction(action); } @ServiceThreadOnly @ServiceThreadOnly void startNewAvbAudioStatusAction(int targetAddress) { void startNewAvbAudioStatusAction(int targetAddress) { assertRunOnServiceThread(); assertRunOnServiceThread(); removeAction(AbsoluteVolumeAudioStatusAction.class); addAndStartAction(new AbsoluteVolumeAudioStatusAction(this, targetAddress), true); addAndStartAction(new AbsoluteVolumeAudioStatusAction(this, targetAddress)); } } @ServiceThreadOnly @ServiceThreadOnly Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +7 −21 Original line number Original line Diff line number Diff line Loading @@ -317,11 +317,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { if ((systemAudioOnPowerOnProp == ALWAYS_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) if ((systemAudioOnPowerOnProp == ALWAYS_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) || ((systemAudioOnPowerOnProp == USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) || ((systemAudioOnPowerOnProp == USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON) && lastSystemAudioControlStatus && isSystemAudioControlFeatureEnabled())) { && lastSystemAudioControlStatus && isSystemAudioControlFeatureEnabled())) { if (hasAction(SystemAudioInitiationActionFromAvr.class)) { addAndStartAction(new SystemAudioInitiationActionFromAvr(this), true); Slog.i(TAG, "SystemAudioInitiationActionFromAvr is in progress. Restarting."); removeAction(SystemAudioInitiationActionFromAvr.class); } addAndStartAction(new SystemAudioInitiationActionFromAvr(this)); } } } } Loading Loading @@ -457,6 +453,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { HdmiLogger.debug("AVR device is not directly connected with TV"); HdmiLogger.debug("AVR device is not directly connected with TV"); return Constants.ABORT_NOT_IN_CORRECT_MODE; return Constants.ABORT_NOT_IN_CORRECT_MODE; } else { } else { // Action has been removed if it existed, do not attempt to remove again before start. addAndStartAction(new ArcInitiationActionFromAvr(this)); addAndStartAction(new ArcInitiationActionFromAvr(this)); return Constants.HANDLED; return Constants.HANDLED; } } Loading @@ -477,11 +474,9 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { && !getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.isEmpty()) { && !getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.isEmpty()) { IHdmiControlCallback callback = IHdmiControlCallback callback = getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.get(0); getActions(ArcTerminationActionFromAvr.class).get(0).mCallbacks.get(0); removeAction(ArcTerminationActionFromAvr.class); addAndStartAction(new ArcTerminationActionFromAvr(this, callback), true); addAndStartAction(new ArcTerminationActionFromAvr(this, callback)); } else { } else { removeAction(ArcTerminationActionFromAvr.class); addAndStartAction(new ArcTerminationActionFromAvr(this), true); addAndStartAction(new ArcTerminationActionFromAvr(this)); } } return Constants.HANDLED; return Constants.HANDLED; } } Loading Loading @@ -1036,11 +1031,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { void onSystemAudioControlFeatureSupportChanged(boolean enabled) { void onSystemAudioControlFeatureSupportChanged(boolean enabled) { setSystemAudioControlFeatureEnabled(enabled); setSystemAudioControlFeatureEnabled(enabled); if (enabled) { if (enabled) { if (hasAction(SystemAudioInitiationActionFromAvr.class)) { addAndStartAction(new SystemAudioInitiationActionFromAvr(this), true); Slog.i(TAG, "SystemAudioInitiationActionFromAvr is in progress. Restarting."); removeAction(SystemAudioInitiationActionFromAvr.class); } addAndStartAction(new SystemAudioInitiationActionFromAvr(this)); } } } } Loading Loading @@ -1221,8 +1212,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { removeAction(ArcTerminationActionFromAvr.class); removeAction(ArcTerminationActionFromAvr.class); if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true) if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true) && isDirectConnectToTv() && !isArcEnabled()) { && isDirectConnectToTv() && !isArcEnabled()) { removeAction(ArcInitiationActionFromAvr.class); addAndStartAction(new ArcInitiationActionFromAvr(this), true); addAndStartAction(new ArcInitiationActionFromAvr(this)); } } } } Loading Loading @@ -1367,10 +1357,6 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { if (mService.isDeviceDiscoveryHandledByPlayback()) { if (mService.isDeviceDiscoveryHandledByPlayback()) { return; return; } } if (hasAction(DeviceDiscoveryAction.class)) { Slog.i(TAG, "Device Discovery Action is in progress. Restarting."); removeAction(DeviceDiscoveryAction.class); } DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, new DeviceDiscoveryCallback() { new DeviceDiscoveryCallback() { @Override @Override Loading @@ -1380,7 +1366,7 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { } } } } }); }); addAndStartAction(action); addAndStartAction(action, true); } } @Override @Override Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +18 −20 Original line number Original line Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.ComponentName; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.hardware.display.DeviceProductInfo; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.hdmi.IHdmiControlCallback; Loading @@ -32,7 +31,6 @@ import android.os.PowerManager; import android.os.SystemProperties; import android.os.SystemProperties; import android.sysprop.HdmiProperties; import android.sysprop.HdmiProperties; import android.util.Slog; import android.util.Slog; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.LocalePicker; import com.android.internal.app.LocalePicker; Loading Loading @@ -151,10 +149,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { private void launchDeviceDiscovery() { private void launchDeviceDiscovery() { assertRunOnServiceThread(); assertRunOnServiceThread(); clearDeviceInfoList(); clearDeviceInfoList(); if (hasAction(DeviceDiscoveryAction.class)) { Slog.i(TAG, "Device Discovery Action is in progress. Restarting."); removeAction(DeviceDiscoveryAction.class); } DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, DeviceDiscoveryAction action = new DeviceDiscoveryAction(this, new DeviceDiscoveryAction.DeviceDiscoveryCallback() { new DeviceDiscoveryAction.DeviceDiscoveryCallback() { @Override @Override Loading @@ -163,25 +157,21 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { mService.getHdmiCecNetwork().addCecDevice(info); mService.getHdmiCecNetwork().addCecDevice(info); } } // Since we removed all devices when it starts and device discovery action // Since we removed all devices when it starts and device discovery // does not poll local devices, we should put device info of local device // action does not poll local devices, we should put device info of // manually here. // local device manually here. for (HdmiCecLocalDevice device : mService.getAllCecLocalDevices()) { for (HdmiCecLocalDevice device : mService.getAllCecLocalDevices()) { mService.getHdmiCecNetwork().addCecDevice(device.getDeviceInfo()); mService.getHdmiCecNetwork().addCecDevice(device.getDeviceInfo()); } } List<HotplugDetectionAction> hotplugActions = if (!hasAction(HotplugDetectionAction.class)) { getActions(HotplugDetectionAction.class); if (hotplugActions.isEmpty()) { addAndStartAction( addAndStartAction( new HotplugDetectionAction(HdmiCecLocalDevicePlayback.this)); new HotplugDetectionAction( HdmiCecLocalDevicePlayback.this)); } } if (mService.isHdmiControlEnhancedBehaviorFlagEnabled()) { if (mService.isHdmiControlEnhancedBehaviorFlagEnabled()) { List<PowerStatusMonitorActionFromPlayback> if (!hasAction(PowerStatusMonitorActionFromPlayback.class)) { powerStatusMonitorActionsFromPlayback = getActions(PowerStatusMonitorActionFromPlayback.class); if (powerStatusMonitorActionsFromPlayback.isEmpty()) { addAndStartAction( addAndStartAction( new PowerStatusMonitorActionFromPlayback( new PowerStatusMonitorActionFromPlayback( HdmiCecLocalDevicePlayback.this)); HdmiCecLocalDevicePlayback.this)); Loading @@ -189,7 +179,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { } } } } }); }); addAndStartAction(action); addAndStartAction(action, true); } } @Override @Override Loading Loading @@ -235,8 +225,16 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); return; return; } } removeAction(DeviceSelectActionFromPlayback.class); List<DeviceSelectActionFromPlayback> actions = getActions( addAndStartAction(new DeviceSelectActionFromPlayback(this, targetDevice, callback)); DeviceSelectActionFromPlayback.class); if (!actions.isEmpty()) { DeviceSelectActionFromPlayback action = actions.get(0); if (action.getTargetAddress() == targetDevice.getLogicalAddress()) { return; } } addAndStartAction(new DeviceSelectActionFromPlayback(this, targetDevice, callback), true); } } @Override @Override Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +13 −15 Original line number Original line Diff line number Diff line Loading @@ -220,10 +220,6 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { List<HdmiCecMessage> bufferedActiveSource = mDelayedMessageBuffer List<HdmiCecMessage> bufferedActiveSource = mDelayedMessageBuffer .getBufferedMessagesWithOpcode(Constants.MESSAGE_ACTIVE_SOURCE); .getBufferedMessagesWithOpcode(Constants.MESSAGE_ACTIVE_SOURCE); if (bufferedActiveSource.isEmpty()) { if (bufferedActiveSource.isEmpty()) { if (hasAction(RequestActiveSourceAction.class)) { Slog.i(TAG, "RequestActiveSourceAction is in progress. Restarting."); removeAction(RequestActiveSourceAction.class); } addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() { addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() { @Override @Override public void onComplete(int result) { public void onComplete(int result) { Loading @@ -231,7 +227,7 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { launchRoutingControl(routingForBootup); launchRoutingControl(routingForBootup); } } } } })); }), true); } else { } else { addCecDeviceForBufferedActiveSource(bufferedActiveSource.get(0)); addCecDeviceForBufferedActiveSource(bufferedActiveSource.get(0)); } } Loading Loading @@ -328,8 +324,15 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE); return; return; } } removeAction(DeviceSelectActionFromTv.class); List<DeviceSelectActionFromTv> actions = getActions(DeviceSelectActionFromTv.class); addAndStartAction(new DeviceSelectActionFromTv(this, targetDevice, callback)); if (!actions.isEmpty()) { DeviceSelectActionFromTv action = actions.get(0); if (action.getTargetAddress() == targetDevice.getLogicalAddress()) { return; } } addAndStartAction(new DeviceSelectActionFromTv(this, targetDevice, callback), true); } } @ServiceThreadOnly @ServiceThreadOnly Loading Loading @@ -475,9 +478,8 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { HdmiCecMessageBuilder.buildRoutingChange( HdmiCecMessageBuilder.buildRoutingChange( getDeviceInfo().getLogicalAddress(), oldPath, newPath); getDeviceInfo().getLogicalAddress(), oldPath, newPath); mService.sendCecCommand(routingChange); mService.sendCecCommand(routingChange); removeAction(RoutingControlAction.class); addAndStartAction( addAndStartAction( new RoutingControlAction(this, newPath, callback)); new RoutingControlAction(this, newPath, callback), true); } } @ServiceThreadOnly @ServiceThreadOnly Loading Loading @@ -801,16 +803,12 @@ public class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { mSelectRequestBuffer.process(); mSelectRequestBuffer.process(); resetSelectRequestBuffer(); resetSelectRequestBuffer(); List<HotplugDetectionAction> hotplugActions if (!hasAction(HotplugDetectionAction.class)) { = getActions(HotplugDetectionAction.class); if (hotplugActions.isEmpty()) { addAndStartAction( addAndStartAction( new HotplugDetectionAction(HdmiCecLocalDeviceTv.this)); new HotplugDetectionAction(HdmiCecLocalDeviceTv.this)); } } List<PowerStatusMonitorAction> powerStatusActions if (!hasAction(PowerStatusMonitorAction.class)) { = getActions(PowerStatusMonitorAction.class); if (powerStatusActions.isEmpty()) { addAndStartAction( addAndStartAction( new PowerStatusMonitorAction(HdmiCecLocalDeviceTv.this)); new PowerStatusMonitorAction(HdmiCecLocalDeviceTv.this)); } } Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +1 −6 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.server.hdmi; package com.android.server.hdmi; import static android.media.tv.flags.Flags.hdmiControlEnhancedBehavior; import static android.media.tv.flags.Flags.hdmiControlEnhancedBehavior; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_ADD_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_ADD_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE; import static android.hardware.hdmi.HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE; import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_DISABLED; import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_DISABLED; Loading Loading @@ -107,7 +106,6 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; import android.view.Display; import android.view.Display; import android.view.KeyEvent; import android.view.KeyEvent; import android.view.WindowManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -1218,9 +1216,6 @@ public class HdmiControlService extends SystemService { audioSystem.terminateSystemAudioMode(); audioSystem.terminateSystemAudioMode(); } } if (isArcEnabled) { if (isArcEnabled) { if (audioSystem.hasAction(ArcTerminationActionFromAvr.class)) { audioSystem.removeAction(ArcTerminationActionFromAvr.class); } audioSystem.addAndStartAction(new ArcTerminationActionFromAvr(audioSystem, audioSystem.addAndStartAction(new ArcTerminationActionFromAvr(audioSystem, new IHdmiControlCallback.Stub() { new IHdmiControlCallback.Stub() { @Override @Override Loading @@ -1228,7 +1223,7 @@ public class HdmiControlService extends SystemService { mAddressAllocated = false; mAddressAllocated = false; initializeCecLocalDevices(INITIATED_BY_SOUNDBAR_MODE); initializeCecLocalDevices(INITIATED_BY_SOUNDBAR_MODE); } } })); }), true); } } } } if (!isArcEnabled) { if (!isArcEnabled) { Loading