Update HDMI source volume change handling
Forward volume keys to HdmiControlManager if the Android device is a HDMI source device and if the volume behavior of the audio device is full volume. The output audio device will be full volume if the Android device is a HDMI source device with a sink that supports HDMI CEC OR if the user selected HDMI CEC as the volume control mechanism. In case the user prefers HDMI CEC, always attempt to send CEC messages, even if the audio sink possibly does not support CEC volume changes. Bug: 172539380 Test: make; test manually Change-Id: I520dbebaf5ed8f1827405c65137d039be8d816e3
This commit is contained in:
@@ -1076,7 +1076,6 @@ public class AudioService extends IAudioService.Stub
|
||||
|
||||
if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_HDMI_CEC)) {
|
||||
synchronized (mHdmiClientLock) {
|
||||
mHdmiCecSink = false;
|
||||
mHdmiManager = mContext.getSystemService(HdmiControlManager.class);
|
||||
if (mHdmiManager != null) {
|
||||
mHdmiManager.addHdmiControlStatusChangeListener(
|
||||
@@ -1508,7 +1507,8 @@ public class AudioService extends IAudioService.Stub
|
||||
if (isPlatformTelevision()) {
|
||||
synchronized (mHdmiClientLock) {
|
||||
if (mHdmiManager != null && mHdmiPlaybackClient != null) {
|
||||
updateHdmiCecSinkLocked(mHdmiCecSink | false);
|
||||
updateHdmiCecSinkLocked(
|
||||
mFullVolumeDevices.contains(AudioSystem.DEVICE_OUT_HDMI));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1518,7 +1518,8 @@ public class AudioService extends IAudioService.Stub
|
||||
if (isPlatformTelevision()) {
|
||||
synchronized (mHdmiClientLock) {
|
||||
if (mHdmiManager != null) {
|
||||
updateHdmiCecSinkLocked(mHdmiCecSink | false);
|
||||
updateHdmiCecSinkLocked(
|
||||
mFullVolumeDevices.contains(AudioSystem.DEVICE_OUT_HDMI));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2670,8 +2671,7 @@ public class AudioService extends IAudioService.Stub
|
||||
if (adjustVolume) {
|
||||
synchronized (mHdmiClientLock) {
|
||||
if (mHdmiManager != null) {
|
||||
// mHdmiCecSink true => mHdmiPlaybackClient != null
|
||||
if (mHdmiCecSink
|
||||
if (mHdmiPlaybackClient != null
|
||||
&& mHdmiCecVolumeControlEnabled
|
||||
&& streamTypeAlias == AudioSystem.STREAM_MUSIC
|
||||
// vol change on a full volume device
|
||||
@@ -7825,9 +7825,8 @@ public class AudioService extends IAudioService.Stub
|
||||
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private void updateHdmiCecSinkLocked(boolean hdmiCecSink) {
|
||||
mHdmiCecSink = hdmiCecSink;
|
||||
if (!hasDeviceVolumeBehavior(AudioSystem.DEVICE_OUT_HDMI)) {
|
||||
if (mHdmiCecSink) {
|
||||
if (hdmiCecSink) {
|
||||
if (DEBUG_VOL) {
|
||||
Log.d(TAG, "CEC sink: setting HDMI as full vol device");
|
||||
}
|
||||
@@ -7885,9 +7884,6 @@ public class AudioService extends IAudioService.Stub
|
||||
// Set only when device is a set-top box.
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private HdmiPlaybackClient mHdmiPlaybackClient;
|
||||
// true if we are a set-top box, an HDMI sink is connected and it supports CEC.
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private boolean mHdmiCecSink;
|
||||
// Set only when device is an audio system.
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private HdmiAudioSystemClient mHdmiAudioSystemClient;
|
||||
@@ -8142,7 +8138,6 @@ public class AudioService extends IAudioService.Stub
|
||||
pw.print(" mFixedVolumeDevices="); pw.println(dumpDeviceTypes(mFixedVolumeDevices));
|
||||
pw.print(" mFullVolumeDevices="); pw.println(dumpDeviceTypes(mFullVolumeDevices));
|
||||
pw.print(" mExtVolumeController="); pw.println(mExtVolumeController);
|
||||
pw.print(" mHdmiCecSink="); pw.println(mHdmiCecSink);
|
||||
pw.print(" mHdmiAudioSystemClient="); pw.println(mHdmiAudioSystemClient);
|
||||
pw.print(" mHdmiPlaybackClient="); pw.println(mHdmiPlaybackClient);
|
||||
pw.print(" mHdmiTvClient="); pw.println(mHdmiTvClient);
|
||||
|
||||
Reference in New Issue
Block a user