2828import android .hardware .hdmi .IHdmiDeviceEventListener ;
2929import android .hardware .hdmi .IHdmiHotplugEventListener ;
3030import android .hardware .hdmi .IHdmiInputChangeListener ;
31+ import android .hardware .hdmi .IHdmiSystemAudioModeChangeListener ;
3132import android .media .AudioDevicePort ;
3233import android .media .AudioFormat ;
3334import android .media .AudioGain ;
@@ -93,6 +94,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
9394 new HdmiHotplugEventListener ();
9495 private final IHdmiDeviceEventListener mHdmiDeviceEventListener = new HdmiDeviceEventListener ();
9596 private final IHdmiInputChangeListener mHdmiInputChangeListener = new HdmiInputChangeListener ();
97+ private final IHdmiSystemAudioModeChangeListener mHdmiSystemAudioModeChangeListener =
98+ new HdmiSystemAudioModeChangeListener ();
9699 // TODO: Should handle STANDBY case.
97100 private final SparseBooleanArray mHdmiStateMap = new SparseBooleanArray ();
98101 private final List <Message > mPendingHdmiDeviceEvents = new LinkedList <>();
@@ -117,6 +120,8 @@ public void onBootPhase(int phase) {
117120 try {
118121 mHdmiControlService .addHotplugEventListener (mHdmiHotplugEventListener );
119122 mHdmiControlService .addDeviceEventListener (mHdmiDeviceEventListener );
123+ mHdmiControlService .addSystemAudioModeChangeListener (
124+ mHdmiSystemAudioModeChangeListener );
120125 mHdmiDeviceList .addAll (mHdmiControlService .getInputDevices ());
121126 mHdmiControlService .setInputChangeListener (mHdmiInputChangeListener );
122127 } catch (RemoteException e ) {
@@ -615,7 +620,7 @@ private AudioDevicePort findAudioSinkFromAudioPolicy() {
615620 int sinkDevice = mAudioManager .getDevicesForStream (AudioManager .STREAM_MUSIC );
616621 for (AudioPort port : devicePorts ) {
617622 AudioDevicePort devicePort = (AudioDevicePort ) port ;
618- if (devicePort .type () == sinkDevice ) {
623+ if (( devicePort .type () & sinkDevice ) != 0 ) {
619624 return devicePort ;
620625 }
621626 }
@@ -838,6 +843,13 @@ private void updateAudioSinkLocked() {
838843 }
839844 }
840845
846+ private void handleAudioSinkUpdated () {
847+ synchronized (mImplLock ) {
848+ updateAudioSinkLocked ();
849+ updateAudioPatchLocked ();
850+ }
851+ }
852+
841853 @ Override
842854 public void overrideAudioSink (int audioType , String audioAddress , int samplingRate ,
843855 int channelMask , int format ) {
@@ -1006,4 +1018,17 @@ public void onChanged(HdmiDeviceInfo device) throws RemoteException {
10061018 }
10071019 }
10081020 }
1021+
1022+ private final class HdmiSystemAudioModeChangeListener extends
1023+ IHdmiSystemAudioModeChangeListener .Stub {
1024+ @ Override
1025+ public void onStatusChanged (boolean enabled ) throws RemoteException {
1026+ synchronized (mLock ) {
1027+ for (int i = 0 ; i < mConnections .size (); ++i ) {
1028+ TvInputHardwareImpl impl = mConnections .valueAt (i ).getHardwareImplLocked ();
1029+ impl .handleAudioSinkUpdated ();
1030+ }
1031+ }
1032+ }
1033+ }
10091034}
0 commit comments