@@ -429,10 +429,13 @@ public void onError(int error) {
429429 // Devices for which the volume is fixed and VolumePanel slider should be disabled
430430 final int mFixedVolumeDevices = AudioSystem .DEVICE_OUT_AUX_DIGITAL |
431431 AudioSystem .DEVICE_OUT_DGTL_DOCK_HEADSET |
432+ AudioSystem .DEVICE_OUT_ANLG_DOCK_HEADSET |
432433 AudioSystem .DEVICE_OUT_ALL_USB ;
433434
434435 private final boolean mMonitorOrientation ;
435436
437+ private boolean mDockAudioMediaEnabled = true ;
438+
436439 ///////////////////////////////////////////////////////////////////////////
437440 // Construction
438441 ///////////////////////////////////////////////////////////////////////////
@@ -630,6 +633,27 @@ private void updateStreamVolumeAlias(boolean updateVolumes) {
630633 }
631634 }
632635
636+ private void readDockAudioSettings (ContentResolver cr )
637+ {
638+ mDockAudioMediaEnabled = Settings .Global .getInt (
639+ cr , Settings .Global .DOCK_AUDIO_MEDIA_ENABLED , 1 ) == 1 ;
640+
641+ if (mDockAudioMediaEnabled ) {
642+ mBecomingNoisyIntentDevices |= AudioSystem .DEVICE_OUT_ANLG_DOCK_HEADSET ;
643+ } else {
644+ mBecomingNoisyIntentDevices &= ~AudioSystem .DEVICE_OUT_ANLG_DOCK_HEADSET ;
645+ }
646+
647+ sendMsg (mAudioHandler ,
648+ MSG_SET_FORCE_USE ,
649+ SENDMSG_QUEUE ,
650+ AudioSystem .FOR_DOCK ,
651+ mDockAudioMediaEnabled ?
652+ AudioSystem .FORCE_ANALOG_DOCK : AudioSystem .FORCE_NONE ,
653+ null ,
654+ 0 );
655+ }
656+
633657 private void readPersistedSettings () {
634658 final ContentResolver cr = mContentResolver ;
635659
@@ -693,6 +717,8 @@ private void readPersistedSettings() {
693717 Settings .System .MODE_RINGER_STREAMS_AFFECTED ,
694718 mRingerModeAffectedStreams ,
695719 UserHandle .USER_CURRENT );
720+
721+ readDockAudioSettings (cr );
696722 }
697723
698724 mMuteAffectedStreams = System .getIntForUser (cr ,
@@ -3408,6 +3434,8 @@ private class SettingsObserver extends ContentObserver {
34083434 super (new Handler ());
34093435 mContentResolver .registerContentObserver (Settings .System .getUriFor (
34103436 Settings .System .MODE_RINGER_STREAMS_AFFECTED ), false , this );
3437+ mContentResolver .registerContentObserver (Settings .Global .getUriFor (
3438+ Settings .Global .DOCK_AUDIO_MEDIA_ENABLED ), false , this );
34113439 }
34123440
34133441 @ Override
@@ -3443,6 +3471,7 @@ public void onChange(boolean selfChange) {
34433471 mRingerModeAffectedStreams = ringerModeAffectedStreams ;
34443472 setRingerModeInt (getRingerMode (), false );
34453473 }
3474+ readDockAudioSettings (mContentResolver );
34463475 }
34473476 }
34483477 }
@@ -3722,7 +3751,13 @@ public void onReceive(Context context, Intent intent) {
37223751 config = AudioSystem .FORCE_BT_CAR_DOCK ;
37233752 break ;
37243753 case Intent .EXTRA_DOCK_STATE_LE_DESK :
3725- config = AudioSystem .FORCE_ANALOG_DOCK ;
3754+ synchronized (mSettingsLock ) {
3755+ if (mDockAudioMediaEnabled ) {
3756+ config = AudioSystem .FORCE_ANALOG_DOCK ;
3757+ } else {
3758+ config = AudioSystem .FORCE_NONE ;
3759+ }
3760+ }
37263761 break ;
37273762 case Intent .EXTRA_DOCK_STATE_HE_DESK :
37283763 config = AudioSystem .FORCE_DIGITAL_DOCK ;
@@ -3731,6 +3766,7 @@ public void onReceive(Context context, Intent intent) {
37313766 default :
37323767 config = AudioSystem .FORCE_NONE ;
37333768 }
3769+
37343770 AudioSystem .setForceUse (AudioSystem .FOR_DOCK , config );
37353771 } else if (action .equals (BluetoothHeadset .ACTION_CONNECTION_STATE_CHANGED )) {
37363772 state = intent .getIntExtra (BluetoothProfile .EXTRA_STATE ,
0 commit comments