summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jungshik Jang <jayjang@google.com> 2014-06-23 17:17:47 +0900
committer Jungshik Jang <jayjang@google.com> 2014-06-25 16:32:19 +0900
commita858d221ff86c497e745222ea15bab141e337636 (patch)
treea4771fe060e904416a089da54a92bd0f67a26b44
parente9cf1583c74fd03977c1ecb14520663710f14439 (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
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java23
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java5
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java3
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));
}
}