Merge "Audio: Add CEC volume feature callback" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
38c2ca7698
@@ -920,6 +920,8 @@ public class AudioService extends IAudioService.Stub
|
|||||||
if (mHdmiManager != null) {
|
if (mHdmiManager != null) {
|
||||||
mHdmiManager.addHdmiControlStatusChangeListener(
|
mHdmiManager.addHdmiControlStatusChangeListener(
|
||||||
mHdmiControlStatusChangeListenerCallback);
|
mHdmiControlStatusChangeListenerCallback);
|
||||||
|
mHdmiManager.addHdmiCecVolumeControlFeatureListener(mContext.getMainExecutor(),
|
||||||
|
mMyHdmiCecVolumeControlFeatureListener);
|
||||||
}
|
}
|
||||||
mHdmiTvClient = mHdmiManager.getTvClient();
|
mHdmiTvClient = mHdmiManager.getTvClient();
|
||||||
if (mHdmiTvClient != null) {
|
if (mHdmiTvClient != null) {
|
||||||
@@ -2248,6 +2250,7 @@ public class AudioService extends IAudioService.Stub
|
|||||||
if (mHdmiManager != null) {
|
if (mHdmiManager != null) {
|
||||||
// mHdmiCecSink true => mHdmiPlaybackClient != null
|
// mHdmiCecSink true => mHdmiPlaybackClient != null
|
||||||
if (mHdmiCecSink
|
if (mHdmiCecSink
|
||||||
|
&& mHdmiCecVolumeControlEnabled
|
||||||
&& streamTypeAlias == AudioSystem.STREAM_MUSIC
|
&& streamTypeAlias == AudioSystem.STREAM_MUSIC
|
||||||
// vol change on a full volume device
|
// vol change on a full volume device
|
||||||
&& isFullVolumeDevice(device)) {
|
&& isFullVolumeDevice(device)) {
|
||||||
@@ -2320,7 +2323,8 @@ public class AudioService extends IAudioService.Stub
|
|||||||
@GuardedBy("mHdmiClientLock")
|
@GuardedBy("mHdmiClientLock")
|
||||||
private void maybeSendSystemAudioStatusCommand(boolean isMuteAdjust) {
|
private void maybeSendSystemAudioStatusCommand(boolean isMuteAdjust) {
|
||||||
if (mHdmiAudioSystemClient == null
|
if (mHdmiAudioSystemClient == null
|
||||||
|| !mHdmiSystemAudioSupported) {
|
|| !mHdmiSystemAudioSupported
|
||||||
|
|| !mHdmiCecVolumeControlEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2340,7 +2344,8 @@ public class AudioService extends IAudioService.Stub
|
|||||||
|| mHdmiTvClient == null
|
|| mHdmiTvClient == null
|
||||||
|| oldVolume == newVolume
|
|| oldVolume == newVolume
|
||||||
|| (flags & AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME) != 0
|
|| (flags & AudioManager.FLAG_HDMI_SYSTEM_AUDIO_VOLUME) != 0
|
||||||
|| !mHdmiSystemAudioSupported) {
|
|| !mHdmiSystemAudioSupported
|
||||||
|
|| !mHdmiCecVolumeControlEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
@@ -2940,16 +2945,18 @@ public class AudioService extends IAudioService.Stub
|
|||||||
mVolumeController.postVolumeChanged(streamType, flags);
|
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) {
|
private int updateFlagsForTvPlatform(int flags) {
|
||||||
synchronized (mHdmiClientLock) {
|
synchronized (mHdmiClientLock) {
|
||||||
if (mHdmiTvClient != null && mHdmiSystemAudioSupported) {
|
if ((mHdmiTvClient != null && mHdmiSystemAudioSupported && mHdmiCecVolumeControlEnabled)
|
||||||
|
|| (mHdmiPlaybackClient != null && mHdmiCecVolumeControlEnabled)) {
|
||||||
flags &= ~AudioManager.FLAG_SHOW_UI;
|
flags &= ~AudioManager.FLAG_SHOW_UI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
// UI update and Broadcast Intent
|
// UI update and Broadcast Intent
|
||||||
private void sendMasterMuteUpdate(boolean muted, int flags) {
|
private void sendMasterMuteUpdate(boolean muted, int flags) {
|
||||||
mVolumeController.postMasterMuteChanged(updateFlagsForTvPlatform(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();
|
private final Object mHdmiClientLock = new Object();
|
||||||
|
|
||||||
// If HDMI-CEC system audio is supported
|
// 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;
|
private boolean mHdmiSystemAudioSupported = false;
|
||||||
// Set only when device is tv.
|
// Set only when device is tv.
|
||||||
@GuardedBy("mHdmiClientLock")
|
@GuardedBy("mHdmiClientLock")
|
||||||
@@ -7161,10 +7180,16 @@ public class AudioService extends IAudioService.Stub
|
|||||||
// Set only when device is an audio system.
|
// Set only when device is an audio system.
|
||||||
@GuardedBy("mHdmiClientLock")
|
@GuardedBy("mHdmiClientLock")
|
||||||
private HdmiAudioSystemClient mHdmiAudioSystemClient;
|
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 =
|
private MyHdmiControlStatusChangeListenerCallback mHdmiControlStatusChangeListenerCallback =
|
||||||
new MyHdmiControlStatusChangeListenerCallback();
|
new MyHdmiControlStatusChangeListenerCallback();
|
||||||
|
|
||||||
|
private MyHdmiCecVolumeControlFeatureListener mMyHdmiCecVolumeControlFeatureListener =
|
||||||
|
new MyHdmiCecVolumeControlFeatureListener();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int setHdmiSystemAudioSupported(boolean on) {
|
public int setHdmiSystemAudioSupported(boolean on) {
|
||||||
int device = AudioSystem.DEVICE_NONE;
|
int device = AudioSystem.DEVICE_NONE;
|
||||||
@@ -7403,6 +7428,7 @@ public class AudioService extends IAudioService.Stub
|
|||||||
pw.print(" mHdmiPlaybackClient="); pw.println(mHdmiPlaybackClient);
|
pw.print(" mHdmiPlaybackClient="); pw.println(mHdmiPlaybackClient);
|
||||||
pw.print(" mHdmiTvClient="); pw.println(mHdmiTvClient);
|
pw.print(" mHdmiTvClient="); pw.println(mHdmiTvClient);
|
||||||
pw.print(" mHdmiSystemAudioSupported="); pw.println(mHdmiSystemAudioSupported);
|
pw.print(" mHdmiSystemAudioSupported="); pw.println(mHdmiSystemAudioSupported);
|
||||||
|
pw.print(" mHdmiCecVolumeControlEnabled="); pw.println(mHdmiCecVolumeControlEnabled);
|
||||||
pw.print(" mIsCallScreeningModeSupported="); pw.println(mIsCallScreeningModeSupported);
|
pw.print(" mIsCallScreeningModeSupported="); pw.println(mIsCallScreeningModeSupported);
|
||||||
pw.print(" mic mute FromSwitch=" + mMicMuteFromSwitch
|
pw.print(" mic mute FromSwitch=" + mMicMuteFromSwitch
|
||||||
+ " FromRestrictions=" + mMicMuteFromRestrictions
|
+ " FromRestrictions=" + mMicMuteFromRestrictions
|
||||||
|
|||||||
Reference in New Issue
Block a user