diff options
| author | 2014-06-23 17:17:47 +0900 | |
|---|---|---|
| committer | 2014-06-25 16:32:19 +0900 | |
| commit | a858d221ff86c497e745222ea15bab141e337636 (patch) | |
| tree | a4771fe060e904416a089da54a92bd0f67a26b44 | |
| parent | e9cf1583c74fd03977c1ecb14520663710f14439 (diff) | |
Notify ARC status update to AudioService.
Whenever ARC status is updated it should be notified to
AudioService so that it reroutes audio output to others.
Bug: 15841544, Bug: 15844022, Bug: 15844112
Change-Id: I06674ee4dd22c0f9be08e33fbacdd785578ba55f
3 files changed, 18 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 2b53895b7dc4..0333dbf43c9b 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -20,6 +20,7 @@ import android.hardware.hdmi.HdmiCec; import android.hardware.hdmi.HdmiCecDeviceInfo; import android.hardware.hdmi.HdmiCecMessage; import android.hardware.hdmi.IHdmiControlCallback; +import android.media.AudioSystem; import android.os.RemoteException; import android.util.Slog; import android.util.SparseArray; @@ -47,7 +48,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @GuardedBy("mLock") private boolean mSystemAudioMode; - // Copy of mDeviceInfos to guarantee thread-safety. @GuardedBy("mLock") private List<HdmiCecDeviceInfo> mSafeAllDeviceInfos = Collections.emptyList(); @@ -312,15 +312,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { boolean oldStatus = mArcStatusEnabled; // 1. Enable/disable ARC circuit. mService.setAudioReturnChannel(enabled); - - // TODO: notify arc mode change to AudioManager. - - // 2. Update arc status; + // 2. Notify arc status to audio service. + notifyArcStatusToAudioService(enabled); + // 3. Update arc status; mArcStatusEnabled = enabled; 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. */ @@ -613,7 +619,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @ServiceThreadOnly void onHotplug(int portNo, boolean connected) { assertRunOnServiceThread(); - // TODO: delegate onHotplug event to each local device. // Tv device will have permanent HotplugDetectionAction. List<HotplugDetectionAction> hotplugActions = getActions(HotplugDetectionAction.class); @@ -623,10 +628,4 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { hotplugActions.get(0).pollAllDevicesNow(); } } - - boolean canChangeSystemAudio() { - // TODO: implement this. - // return true if no system audio control sequence is running. - return false; - } } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 1a18c10ad541..53cb81d54705 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -28,6 +28,7 @@ import android.hardware.hdmi.IHdmiControlService; import android.hardware.hdmi.IHdmiDeviceEventListener; import android.hardware.hdmi.IHdmiHotplugEventListener; import android.hardware.hdmi.IHdmiSystemAudioModeChangeListener; +import android.media.AudioManager; import android.os.Build; import android.os.Handler; import android.os.HandlerThread; @@ -870,4 +871,8 @@ public final class HdmiControlService extends SystemService { private HdmiCecLocalDevicePlayback playback() { return (HdmiCecLocalDevicePlayback) mCecController.getLocalDevice(HdmiCec.DEVICE_PLAYBACK); } + + AudioManager getAudioManager() { + return (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); + } } diff --git a/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java b/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java index 845eaa9e3709..6f4164baf184 100644 --- a/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java +++ b/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java @@ -115,6 +115,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction { } private boolean canChangeSystemAudio() { - return tv().canChangeSystemAudio(); + return !(tv().hasAction(SystemAudioActionFromTv.class) + || tv().hasAction(SystemAudioActionFromAvr.class)); } } |