Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +11 −12 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.hardware.hdmi.HdmiCec; import android.hardware.hdmi.HdmiCecDeviceInfo; import android.hardware.hdmi.HdmiCecDeviceInfo; import android.hardware.hdmi.HdmiCecMessage; import android.hardware.hdmi.HdmiCecMessage; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.hdmi.IHdmiControlCallback; import android.media.AudioSystem; import android.os.RemoteException; import android.os.RemoteException; import android.util.Slog; import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; Loading Loading @@ -47,7 +48,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @GuardedBy("mLock") @GuardedBy("mLock") private boolean mSystemAudioMode; private boolean mSystemAudioMode; // Copy of mDeviceInfos to guarantee thread-safety. // Copy of mDeviceInfos to guarantee thread-safety. @GuardedBy("mLock") @GuardedBy("mLock") private List<HdmiCecDeviceInfo> mSafeAllDeviceInfos = Collections.emptyList(); private List<HdmiCecDeviceInfo> mSafeAllDeviceInfos = Collections.emptyList(); Loading Loading @@ -312,15 +312,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { boolean oldStatus = mArcStatusEnabled; boolean oldStatus = mArcStatusEnabled; // 1. Enable/disable ARC circuit. // 1. Enable/disable ARC circuit. mService.setAudioReturnChannel(enabled); mService.setAudioReturnChannel(enabled); // 2. Notify arc status to audio service. // TODO: notify arc mode change to AudioManager. notifyArcStatusToAudioService(enabled); // 3. Update arc status; // 2. Update arc status; mArcStatusEnabled = enabled; mArcStatusEnabled = enabled; return oldStatus; return oldStatus; } } } } private void notifyArcStatusToAudioService(boolean enabled) { // Note that we don't set any name to ARC. mService.getAudioManager().setWiredDeviceConnectionState( AudioSystem.DEVICE_OUT_HDMI_ARC, enabled ? 1 : 0, ""); } /** /** * Returns whether ARC is enabled or not. * Returns whether ARC is enabled or not. */ */ Loading Loading @@ -613,7 +619,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @ServiceThreadOnly @ServiceThreadOnly void onHotplug(int portNo, boolean connected) { void onHotplug(int portNo, boolean connected) { assertRunOnServiceThread(); assertRunOnServiceThread(); // TODO: delegate onHotplug event to each local device. // Tv device will have permanent HotplugDetectionAction. // Tv device will have permanent HotplugDetectionAction. List<HotplugDetectionAction> hotplugActions = getActions(HotplugDetectionAction.class); List<HotplugDetectionAction> hotplugActions = getActions(HotplugDetectionAction.class); Loading @@ -623,10 +628,4 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { hotplugActions.get(0).pollAllDevicesNow(); hotplugActions.get(0).pollAllDevicesNow(); } } } } boolean canChangeSystemAudio() { // TODO: implement this. // return true if no system audio control sequence is running. return false; } } } services/core/java/com/android/server/hdmi/HdmiControlService.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.hardware.hdmi.IHdmiControlService; import android.hardware.hdmi.IHdmiDeviceEventListener; import android.hardware.hdmi.IHdmiDeviceEventListener; import android.hardware.hdmi.IHdmiHotplugEventListener; import android.hardware.hdmi.IHdmiHotplugEventListener; import android.hardware.hdmi.IHdmiSystemAudioModeChangeListener; import android.hardware.hdmi.IHdmiSystemAudioModeChangeListener; import android.media.AudioManager; import android.os.Build; import android.os.Build; import android.os.Handler; import android.os.Handler; import android.os.HandlerThread; import android.os.HandlerThread; Loading Loading @@ -870,4 +871,8 @@ public final class HdmiControlService extends SystemService { private HdmiCecLocalDevicePlayback playback() { private HdmiCecLocalDevicePlayback playback() { return (HdmiCecLocalDevicePlayback) mCecController.getLocalDevice(HdmiCec.DEVICE_PLAYBACK); return (HdmiCecLocalDevicePlayback) mCecController.getLocalDevice(HdmiCec.DEVICE_PLAYBACK); } } AudioManager getAudioManager() { return (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); } } } services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -115,6 +115,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction { } } private boolean canChangeSystemAudio() { private boolean canChangeSystemAudio() { return tv().canChangeSystemAudio(); return !(tv().hasAction(SystemAudioActionFromTv.class) || tv().hasAction(SystemAudioActionFromAvr.class)); } } } } Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +11 −12 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.hardware.hdmi.HdmiCec; import android.hardware.hdmi.HdmiCecDeviceInfo; import android.hardware.hdmi.HdmiCecDeviceInfo; import android.hardware.hdmi.HdmiCecMessage; import android.hardware.hdmi.HdmiCecMessage; import android.hardware.hdmi.IHdmiControlCallback; import android.hardware.hdmi.IHdmiControlCallback; import android.media.AudioSystem; import android.os.RemoteException; import android.os.RemoteException; import android.util.Slog; import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; Loading Loading @@ -47,7 +48,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @GuardedBy("mLock") @GuardedBy("mLock") private boolean mSystemAudioMode; private boolean mSystemAudioMode; // Copy of mDeviceInfos to guarantee thread-safety. // Copy of mDeviceInfos to guarantee thread-safety. @GuardedBy("mLock") @GuardedBy("mLock") private List<HdmiCecDeviceInfo> mSafeAllDeviceInfos = Collections.emptyList(); private List<HdmiCecDeviceInfo> mSafeAllDeviceInfos = Collections.emptyList(); Loading Loading @@ -312,15 +312,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { boolean oldStatus = mArcStatusEnabled; boolean oldStatus = mArcStatusEnabled; // 1. Enable/disable ARC circuit. // 1. Enable/disable ARC circuit. mService.setAudioReturnChannel(enabled); mService.setAudioReturnChannel(enabled); // 2. Notify arc status to audio service. // TODO: notify arc mode change to AudioManager. notifyArcStatusToAudioService(enabled); // 3. Update arc status; // 2. Update arc status; mArcStatusEnabled = enabled; mArcStatusEnabled = enabled; return oldStatus; return oldStatus; } } } } private void notifyArcStatusToAudioService(boolean enabled) { // Note that we don't set any name to ARC. mService.getAudioManager().setWiredDeviceConnectionState( AudioSystem.DEVICE_OUT_HDMI_ARC, enabled ? 1 : 0, ""); } /** /** * Returns whether ARC is enabled or not. * Returns whether ARC is enabled or not. */ */ Loading Loading @@ -613,7 +619,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @ServiceThreadOnly @ServiceThreadOnly void onHotplug(int portNo, boolean connected) { void onHotplug(int portNo, boolean connected) { assertRunOnServiceThread(); assertRunOnServiceThread(); // TODO: delegate onHotplug event to each local device. // Tv device will have permanent HotplugDetectionAction. // Tv device will have permanent HotplugDetectionAction. List<HotplugDetectionAction> hotplugActions = getActions(HotplugDetectionAction.class); List<HotplugDetectionAction> hotplugActions = getActions(HotplugDetectionAction.class); Loading @@ -623,10 +628,4 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { hotplugActions.get(0).pollAllDevicesNow(); hotplugActions.get(0).pollAllDevicesNow(); } } } } boolean canChangeSystemAudio() { // TODO: implement this. // return true if no system audio control sequence is running. return false; } } }
services/core/java/com/android/server/hdmi/HdmiControlService.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.hardware.hdmi.IHdmiControlService; import android.hardware.hdmi.IHdmiDeviceEventListener; import android.hardware.hdmi.IHdmiDeviceEventListener; import android.hardware.hdmi.IHdmiHotplugEventListener; import android.hardware.hdmi.IHdmiHotplugEventListener; import android.hardware.hdmi.IHdmiSystemAudioModeChangeListener; import android.hardware.hdmi.IHdmiSystemAudioModeChangeListener; import android.media.AudioManager; import android.os.Build; import android.os.Build; import android.os.Handler; import android.os.Handler; import android.os.HandlerThread; import android.os.HandlerThread; Loading Loading @@ -870,4 +871,8 @@ public final class HdmiControlService extends SystemService { private HdmiCecLocalDevicePlayback playback() { private HdmiCecLocalDevicePlayback playback() { return (HdmiCecLocalDevicePlayback) mCecController.getLocalDevice(HdmiCec.DEVICE_PLAYBACK); return (HdmiCecLocalDevicePlayback) mCecController.getLocalDevice(HdmiCec.DEVICE_PLAYBACK); } } AudioManager getAudioManager() { return (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); } } }
services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -115,6 +115,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction { } } private boolean canChangeSystemAudio() { private boolean canChangeSystemAudio() { return tv().canChangeSystemAudio(); return !(tv().hasAction(SystemAudioActionFromTv.class) || tv().hasAction(SystemAudioActionFromAvr.class)); } } } }