summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java74
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java2
-rw-r--r--services/core/java/com/android/server/hdmi/HotplugDetectionAction.java2
-rw-r--r--services/core/java/com/android/server/hdmi/NewDeviceAction.java2
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java2
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java4
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java4
7 files changed, 36 insertions, 54 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index f75bdabc2f55..6aa86a72fc31 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -21,9 +21,6 @@ import android.hardware.hdmi.HdmiCecDeviceInfo;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.media.AudioManager;
-import android.media.AudioManager.OnAudioPortUpdateListener;
-import android.media.AudioPatch;
-import android.media.AudioPort;
import android.media.AudioSystem;
import android.os.RemoteException;
import android.os.SystemProperties;
@@ -56,9 +53,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
// Whether ARC feature is enabled or not.
private boolean mArcFeatureEnabled = false;
- // Whether SystemAudioMode is "On" or not.
+ // Whether System audio mode is activated or not.
+ // This becomes true only when all system audio sequences are finished.
@GuardedBy("mLock")
- private boolean mSystemAudioMode;
+ private boolean mSystemAudioActivated = false;
// The previous port id (input) before switching to the new one. This is remembered in order to
// be able to switch to it upon receiving <Inactive Source> from currently active source.
@@ -108,11 +106,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
mAddress, mService.getPhysicalAddress(), mDeviceType));
mService.sendCecCommand(HdmiCecMessageBuilder.buildDeviceVendorIdCommand(
mAddress, mService.getVendorId()));
- mSystemAudioMode = mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_ENABLED, false);
launchRoutingControl(fromBootup);
launchDeviceDiscovery();
- registerAudioPortUpdateListener();
- // TODO: unregister audio port update listener if local device is released.
}
@Override
@@ -130,30 +125,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
SystemProperties.set(Constants.PROPERTY_PREFERRED_ADDRESS_TV, String.valueOf(addr));
}
- private void registerAudioPortUpdateListener() {
- mService.getAudioManager().registerAudioPortUpdateListener(
- new OnAudioPortUpdateListener() {
- @Override
- public void OnAudioPatchListUpdate(AudioPatch[] patchList) {}
-
- @Override
- public void OnAudioPortListUpdate(AudioPort[] portList) {
- if (!mSystemAudioMode) {
- return;
- }
- int devices = mService.getAudioManager().getDevicesForStream(
- AudioSystem.STREAM_MUSIC);
- if ((devices & ~AudioSystem.DEVICE_ALL_HDMI_SYSTEM_AUDIO_AND_SPEAKER)
- != 0) {
- // TODO: release system audio here.
- }
- }
-
- @Override
- public void OnServiceDied() {}
- });
- }
-
/**
* Performs the action 'device select', or 'one touch play' initiated by TV.
*
@@ -565,7 +536,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
// If there is AVR, initiate System Audio Auto initiation action,
// which turns on and off system audio according to last system
// audio setting.
- if (mSystemAudioMode && getAvrDeviceInfo() != null) {
+ if (mSystemAudioActivated && getAvrDeviceInfo() != null) {
addAndStartAction(new SystemAudioAutoInitiationAction(
HdmiCecLocalDeviceTv.this,
getAvrDeviceInfo().getLogicalAddress()));
@@ -608,23 +579,36 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
// # Seq 25
void setSystemAudioMode(boolean on, boolean updateSetting) {
+ if (updateSetting) {
+ mService.writeBooleanSetting(Global.HDMI_SYSTEM_AUDIO_ENABLED, on);
+ }
+ updateAudioManagerForSystemAudio(on);
synchronized (mLock) {
- if (on != mSystemAudioMode) {
- mSystemAudioMode = on;
- if (updateSetting) {
- mService.writeBooleanSetting(Global.HDMI_SYSTEM_AUDIO_ENABLED, on);
- }
+ if (mSystemAudioActivated != on) {
+ mSystemAudioActivated = on;
mService.announceSystemAudioModeChange(on);
}
}
}
- boolean getSystemAudioMode() {
+ private void updateAudioManagerForSystemAudio(boolean on) {
+ // TODO: remove output device, once update AudioManager api.
+ mService.getAudioManager().setHdmiSystemAudioSupported(on);
+ }
+
+ boolean isSystemAudioActivated() {
+ if (getAvrDeviceInfo() == null) {
+ return false;
+ }
synchronized (mLock) {
- return mSystemAudioMode;
+ return mSystemAudioActivated;
}
}
+ boolean getSystemAudioModeSetting() {
+ return mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_ENABLED, false);
+ }
+
/**
* Change ARC status into the given {@code enabled} status.
*
@@ -722,7 +706,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
@ServiceThreadOnly
void changeVolume(int curVolume, int delta, int maxVolume) {
assertRunOnServiceThread();
- if (delta == 0 || !isSystemAudioOn()) {
+ if (delta == 0 || !isSystemAudioActivated()) {
return;
}
@@ -750,7 +734,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
@ServiceThreadOnly
void changeMute(boolean mute) {
assertRunOnServiceThread();
- if (!isSystemAudioOn()) {
+ if (!isSystemAudioActivated()) {
return;
}
@@ -761,12 +745,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
}
private boolean isSystemAudioOn() {
- if (getAvrDeviceInfo() == null) {
- return false;
- }
+
synchronized (mLock) {
- return mSystemAudioMode;
+ return mSystemAudioActivated;
}
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 7db5f0cc336a..0239c8319918 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -827,7 +827,7 @@ public final class HdmiControlService extends SystemService {
if (tv == null) {
return false;
}
- return tv.getSystemAudioMode();
+ return tv.isSystemAudioActivated();
}
@Override
diff --git a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
index 6204c169d1aa..813901d4b5fb 100644
--- a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
+++ b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
@@ -108,7 +108,7 @@ final class HotplugDetectionAction extends FeatureAction {
if (mTimeoutCount == 0) {
pollAllDevices();
} else {
- if (tv().getSystemAudioMode()) {
+ if (tv().isSystemAudioActivated()) {
pollAudioSystem();
}
}
diff --git a/services/core/java/com/android/server/hdmi/NewDeviceAction.java b/services/core/java/com/android/server/hdmi/NewDeviceAction.java
index f89e299687fa..7d7a95bda706 100644
--- a/services/core/java/com/android/server/hdmi/NewDeviceAction.java
+++ b/services/core/java/com/android/server/hdmi/NewDeviceAction.java
@@ -158,7 +158,7 @@ final class NewDeviceAction extends FeatureAction {
if (HdmiUtils.getTypeFromAddress(mDeviceLogicalAddress)
== HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM) {
- if (tv().getSystemAudioMode()) {
+ if (tv().getSystemAudioModeSetting()) {
addAndStartAction(new SystemAudioAutoInitiationAction(localDevice(),
mDeviceLogicalAddress));
}
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java b/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
index 77783b71ee49..df9bdfc2df5f 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
@@ -48,7 +48,7 @@ final class SystemAudioActionFromAvr extends SystemAudioAction {
}
private void handleSystemAudioActionFromAvr() {
- if (mTargetAudioStatus == tv().getSystemAudioMode()) {
+ if (mTargetAudioStatus == tv().isSystemAudioActivated()) {
finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
return;
}
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java b/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java
index d03634ec951a..137cada5513d 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java
@@ -73,7 +73,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction {
private void handleSystemAudioModeStatusMessage() {
// If the last setting is system audio, turn on system audio whatever AVR status is.
- if (tv().getSystemAudioMode()) {
+ if (tv().getSystemAudioModeSetting()) {
if (canChangeSystemAudio()) {
addAndStartAction(new SystemAudioActionFromTv(tv(), mAvrAddress, true, null));
}
@@ -102,7 +102,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction {
}
private void handleSystemAudioModeStatusTimeout() {
- if (tv().getSystemAudioMode()) {
+ if (tv().getSystemAudioModeSetting()) {
if (canChangeSystemAudio()) {
addAndStartAction(new SystemAudioActionFromTv(tv(), mAvrAddress, true, null));
}
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
index 91805c58e8a9..106620407aec 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
@@ -68,7 +68,7 @@ final class SystemAudioStatusAction extends FeatureAction {
// the audio amplifier is unknown.
tv().setAudioStatus(false, Constants.UNKNOWN_VOLUME);
- int uiCommand = tv().getSystemAudioMode()
+ int uiCommand = tv().isSystemAudioActivated()
? HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION // SystemAudioMode: ON
: HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION; // SystemAudioMode: OFF
sendUserControlPressedAndReleased(mAvrAddress, uiCommand);
@@ -98,7 +98,7 @@ final class SystemAudioStatusAction extends FeatureAction {
int volume = params[0] & 0x7F;
tv().setAudioStatus(mute, volume);
- if ((tv().getSystemAudioMode() && mute) || (!tv().getSystemAudioMode() && !mute)) {
+ if (!(tv().isSystemAudioActivated() ^ mute)) {
// Toggle AVR's mute status to match with the system audio status.
sendUserControlPressedAndReleased(mAvrAddress, HdmiCecKeycode.CEC_KEYCODE_MUTE);
}