Merge "Audio: Add CEC volume feature callback" into rvc-dev am: 38c2ca7698 am: b9da3c32e0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11268733 Change-Id: I8d0a0a93ae831c4a58804196971a3267bd8707d4
This commit is contained in:
@@ -920,6 +920,8 @@ public class AudioService extends IAudioService.Stub
|
||||
if (mHdmiManager != null) {
|
||||
mHdmiManager.addHdmiControlStatusChangeListener(
|
||||
mHdmiControlStatusChangeListenerCallback);
|
||||
mHdmiManager.addHdmiCecVolumeControlFeatureListener(mContext.getMainExecutor(),
|
||||
mMyHdmiCecVolumeControlFeatureListener);
|
||||
}
|
||||
mHdmiTvClient = mHdmiManager.getTvClient();
|
||||
if (mHdmiTvClient != null) {
|
||||
@@ -2248,6 +2250,7 @@ public class AudioService extends IAudioService.Stub
|
||||
if (mHdmiManager != null) {
|
||||
// mHdmiCecSink true => mHdmiPlaybackClient != null
|
||||
if (mHdmiCecSink
|
||||
&& mHdmiCecVolumeControlEnabled
|
||||
&& streamTypeAlias == AudioSystem.STREAM_MUSIC
|
||||
// vol change on a full volume device
|
||||
&& isFullVolumeDevice(device)) {
|
||||
@@ -2320,7 +2323,8 @@ public class AudioService extends IAudioService.Stub
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private void maybeSendSystemAudioStatusCommand(boolean isMuteAdjust) {
|
||||
if (mHdmiAudioSystemClient == null
|
||||
|| !mHdmiSystemAudioSupported) {
|
||||
|| !mHdmiSystemAudioSupported
|
||||
|| !mHdmiCecVolumeControlEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2340,7 +2344,8 @@ public class AudioService extends IAudioService.Stub
|
||||
|| mHdmiTvClient == null
|
||||
|| oldVolume == newVolume
|
||||
|| (flags & AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME) != 0
|
||||
|| !mHdmiSystemAudioSupported) {
|
||||
|| !mHdmiSystemAudioSupported
|
||||
|| !mHdmiCecVolumeControlEnabled) {
|
||||
return;
|
||||
}
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
@@ -2940,16 +2945,18 @@ public class AudioService extends IAudioService.Stub
|
||||
mVolumeController.postVolumeChanged(streamType, flags);
|
||||
}
|
||||
|
||||
// If Hdmi-CEC system audio mode is on and we are a TV panel, never show volume bar.
|
||||
// Don't show volume UI when:
|
||||
// - Hdmi-CEC system audio mode is on and we are a TV panel
|
||||
// - CEC volume control enabled on a set-top box
|
||||
private int updateFlagsForTvPlatform(int flags) {
|
||||
synchronized (mHdmiClientLock) {
|
||||
if (mHdmiTvClient != null && mHdmiSystemAudioSupported) {
|
||||
if ((mHdmiTvClient != null && mHdmiSystemAudioSupported && mHdmiCecVolumeControlEnabled)
|
||||
|| (mHdmiPlaybackClient != null && mHdmiCecVolumeControlEnabled)) {
|
||||
flags &= ~AudioManager.FLAG_SHOW_UI;
|
||||
}
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
// UI update and Broadcast Intent
|
||||
private void sendMasterMuteUpdate(boolean muted, int flags) {
|
||||
mVolumeController.postMasterMuteChanged(updateFlagsForTvPlatform(flags));
|
||||
@@ -7141,9 +7148,21 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
};
|
||||
|
||||
private class MyHdmiCecVolumeControlFeatureListener
|
||||
implements HdmiControlManager.HdmiCecVolumeControlFeatureListener {
|
||||
public void onHdmiCecVolumeControlFeature(boolean enabled) {
|
||||
synchronized (mHdmiClientLock) {
|
||||
if (mHdmiManager == null) return;
|
||||
mHdmiCecVolumeControlEnabled = enabled;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final Object mHdmiClientLock = new Object();
|
||||
|
||||
// If HDMI-CEC system audio is supported
|
||||
// Note that for CEC volume commands mHdmiCecVolumeControlEnabled will play a role on volume
|
||||
// commands
|
||||
private boolean mHdmiSystemAudioSupported = false;
|
||||
// Set only when device is tv.
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
@@ -7161,10 +7180,16 @@ public class AudioService extends IAudioService.Stub
|
||||
// Set only when device is an audio system.
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private HdmiAudioSystemClient mHdmiAudioSystemClient;
|
||||
// True when volume control over HDMI CEC is used when CEC is enabled (meaningless otherwise)
|
||||
@GuardedBy("mHdmiClientLock")
|
||||
private boolean mHdmiCecVolumeControlEnabled;
|
||||
|
||||
private MyHdmiControlStatusChangeListenerCallback mHdmiControlStatusChangeListenerCallback =
|
||||
new MyHdmiControlStatusChangeListenerCallback();
|
||||
|
||||
private MyHdmiCecVolumeControlFeatureListener mMyHdmiCecVolumeControlFeatureListener =
|
||||
new MyHdmiCecVolumeControlFeatureListener();
|
||||
|
||||
@Override
|
||||
public int setHdmiSystemAudioSupported(boolean on) {
|
||||
int device = AudioSystem.DEVICE_NONE;
|
||||
@@ -7403,6 +7428,7 @@ public class AudioService extends IAudioService.Stub
|
||||
pw.print(" mHdmiPlaybackClient="); pw.println(mHdmiPlaybackClient);
|
||||
pw.print(" mHdmiTvClient="); pw.println(mHdmiTvClient);
|
||||
pw.print(" mHdmiSystemAudioSupported="); pw.println(mHdmiSystemAudioSupported);
|
||||
pw.print(" mHdmiCecVolumeControlEnabled="); pw.println(mHdmiCecVolumeControlEnabled);
|
||||
pw.print(" mIsCallScreeningModeSupported="); pw.println(mIsCallScreeningModeSupported);
|
||||
pw.print(" mic mute FromSwitch=" + mMicMuteFromSwitch
|
||||
+ " FromRestrictions=" + mMicMuteFromRestrictions
|
||||
|
||||
Reference in New Issue
Block a user