Loading services/core/java/com/android/server/audio/AudioService.java +37 −22 Original line number Diff line number Diff line Loading @@ -236,7 +236,6 @@ public class AudioService extends IAudioService.Stub private static final int MSG_PERSIST_RINGER_MODE = 3; private static final int MSG_AUDIO_SERVER_DIED = 4; private static final int MSG_PLAY_SOUND_EFFECT = 5; private static final int MSG_BTA2DP_DOCK_TIMEOUT = 6; private static final int MSG_LOAD_SOUND_EFFECTS = 7; private static final int MSG_SET_FORCE_USE = 8; private static final int MSG_BT_HEADSET_CNCT_FAILED = 9; Loading Loading @@ -268,6 +267,7 @@ public class AudioService extends IAudioService.Stub private static final int MSG_A2DP_DEVICE_CONFIG_CHANGE = 103; private static final int MSG_DISABLE_AUDIO_FOR_UID = 104; private static final int MSG_SET_HEARING_AID_CONNECTION_STATE = 105; private static final int MSG_BTA2DP_DOCK_TIMEOUT = 106; // end of messages handled under wakelock private static final int BTA2DP_DOCK_TIMEOUT_MILLIS = 8000; Loading Loading @@ -4545,13 +4545,21 @@ public class AudioService extends IAudioService.Stub } synchronized (mLastDeviceConnectMsgTime) { long time = SystemClock.uptimeMillis() + delay; handler.sendMessageAtTime(handler.obtainMessage(msg, arg1, arg2, obj), time); if (msg == MSG_SET_WIRED_DEVICE_CONNECTION_STATE || msg == MSG_SET_A2DP_SRC_CONNECTION_STATE || if (msg == MSG_SET_A2DP_SRC_CONNECTION_STATE || msg == MSG_SET_A2DP_SINK_CONNECTION_STATE || msg == MSG_SET_HEARING_AID_CONNECTION_STATE) { msg == MSG_SET_HEARING_AID_CONNECTION_STATE || msg == MSG_SET_WIRED_DEVICE_CONNECTION_STATE || msg == MSG_A2DP_DEVICE_CONFIG_CHANGE || msg == MSG_BTA2DP_DOCK_TIMEOUT) { if (mLastDeviceConnectMsgTime >= time) { // add a little delay to make sure messages are ordered as expected time = mLastDeviceConnectMsgTime + 30; } mLastDeviceConnectMsgTime = time; } handler.sendMessageAtTime(handler.obtainMessage(msg, arg1, arg2, obj), time); } } Loading Loading @@ -4713,6 +4721,13 @@ public class AudioService extends IAudioService.Stub } else { delay = 0; } if (DEBUG_DEVICES) { Log.d(TAG, "setBluetoothA2dpDeviceConnectionStateInt device: " + device + " state: " + state + " delay(ms): " + delay + " suppressNoisyIntent: " + suppressNoisyIntent); } queueMsgUnderWakeLock(mAudioHandler, (profile == BluetoothProfile.A2DP ? MSG_SET_A2DP_SINK_CONNECTION_STATE : MSG_SET_A2DP_SRC_CONNECTION_STATE), Loading Loading @@ -5615,6 +5630,7 @@ public class AudioService extends IAudioService.Stub synchronized (mConnectedDevices) { makeA2dpDeviceUnavailableNow( (String) msg.obj ); } mAudioEventWakeLock.release(); break; case MSG_SET_FORCE_USE: Loading Loading @@ -5845,6 +5861,9 @@ public class AudioService extends IAudioService.Stub // must be called synchronized on mConnectedDevices private void makeA2dpDeviceUnavailableNow(String address) { if (address == null) { return; } synchronized (mA2dpAvrcpLock) { mAvrcpAbsVolSupported = false; } Loading @@ -5854,6 +5873,9 @@ public class AudioService extends IAudioService.Stub makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address)); // Remove A2DP routes as well setCurrentAudioRouteName(null); if (mDockAddress == address) { mDockAddress = null; } } // must be called synchronized on mConnectedDevices Loading @@ -5865,9 +5887,12 @@ public class AudioService extends IAudioService.Stub mConnectedDevices.remove( makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address)); // send the delayed message to make the device unavailable later Message msg = mAudioHandler.obtainMessage(MSG_BTA2DP_DOCK_TIMEOUT, address); mAudioHandler.sendMessageDelayed(msg, delayMs); queueMsgUnderWakeLock(mAudioHandler, MSG_BTA2DP_DOCK_TIMEOUT, 0, 0, address, delayMs); } // must be called synchronized on mConnectedDevices Loading Loading @@ -5939,7 +5964,8 @@ public class AudioService extends IAudioService.Stub private void onSetA2dpSinkConnectionState(BluetoothDevice btDevice, int state, int a2dpVolume) { if (DEBUG_DEVICES) { Log.d(TAG, "onSetA2dpSinkConnectionState btDevice=" + btDevice+"state=" + state); Log.d(TAG, "onSetA2dpSinkConnectionState btDevice= " + btDevice+" state= " + state + " is dock: "+btDevice.isBluetoothDock()); } if (btDevice == null) { return; Loading Loading @@ -5976,7 +6002,7 @@ public class AudioService extends IAudioService.Stub } else { // this could be a connection of another A2DP device before the timeout of // a dock: cancel the dock timeout, and make the dock unavailable now if(hasScheduledA2dpDockTimeout()) { if (hasScheduledA2dpDockTimeout() && mDockAddress != null) { cancelA2dpDeviceTimeout(); makeA2dpDeviceUnavailableNow(mDockAddress); } Loading Loading @@ -6195,17 +6221,6 @@ public class AudioService extends IAudioService.Stub } } if (mAudioHandler.hasMessages(MSG_SET_A2DP_SRC_CONNECTION_STATE) || mAudioHandler.hasMessages(MSG_SET_A2DP_SINK_CONNECTION_STATE) || mAudioHandler.hasMessages(MSG_SET_HEARING_AID_CONNECTION_STATE) || mAudioHandler.hasMessages(MSG_SET_WIRED_DEVICE_CONNECTION_STATE)) { synchronized (mLastDeviceConnectMsgTime) { long time = SystemClock.uptimeMillis(); if (mLastDeviceConnectMsgTime > time) { delay = (int)(mLastDeviceConnectMsgTime - time) + 30; } } } return delay; } Loading Loading
services/core/java/com/android/server/audio/AudioService.java +37 −22 Original line number Diff line number Diff line Loading @@ -236,7 +236,6 @@ public class AudioService extends IAudioService.Stub private static final int MSG_PERSIST_RINGER_MODE = 3; private static final int MSG_AUDIO_SERVER_DIED = 4; private static final int MSG_PLAY_SOUND_EFFECT = 5; private static final int MSG_BTA2DP_DOCK_TIMEOUT = 6; private static final int MSG_LOAD_SOUND_EFFECTS = 7; private static final int MSG_SET_FORCE_USE = 8; private static final int MSG_BT_HEADSET_CNCT_FAILED = 9; Loading Loading @@ -268,6 +267,7 @@ public class AudioService extends IAudioService.Stub private static final int MSG_A2DP_DEVICE_CONFIG_CHANGE = 103; private static final int MSG_DISABLE_AUDIO_FOR_UID = 104; private static final int MSG_SET_HEARING_AID_CONNECTION_STATE = 105; private static final int MSG_BTA2DP_DOCK_TIMEOUT = 106; // end of messages handled under wakelock private static final int BTA2DP_DOCK_TIMEOUT_MILLIS = 8000; Loading Loading @@ -4545,13 +4545,21 @@ public class AudioService extends IAudioService.Stub } synchronized (mLastDeviceConnectMsgTime) { long time = SystemClock.uptimeMillis() + delay; handler.sendMessageAtTime(handler.obtainMessage(msg, arg1, arg2, obj), time); if (msg == MSG_SET_WIRED_DEVICE_CONNECTION_STATE || msg == MSG_SET_A2DP_SRC_CONNECTION_STATE || if (msg == MSG_SET_A2DP_SRC_CONNECTION_STATE || msg == MSG_SET_A2DP_SINK_CONNECTION_STATE || msg == MSG_SET_HEARING_AID_CONNECTION_STATE) { msg == MSG_SET_HEARING_AID_CONNECTION_STATE || msg == MSG_SET_WIRED_DEVICE_CONNECTION_STATE || msg == MSG_A2DP_DEVICE_CONFIG_CHANGE || msg == MSG_BTA2DP_DOCK_TIMEOUT) { if (mLastDeviceConnectMsgTime >= time) { // add a little delay to make sure messages are ordered as expected time = mLastDeviceConnectMsgTime + 30; } mLastDeviceConnectMsgTime = time; } handler.sendMessageAtTime(handler.obtainMessage(msg, arg1, arg2, obj), time); } } Loading Loading @@ -4713,6 +4721,13 @@ public class AudioService extends IAudioService.Stub } else { delay = 0; } if (DEBUG_DEVICES) { Log.d(TAG, "setBluetoothA2dpDeviceConnectionStateInt device: " + device + " state: " + state + " delay(ms): " + delay + " suppressNoisyIntent: " + suppressNoisyIntent); } queueMsgUnderWakeLock(mAudioHandler, (profile == BluetoothProfile.A2DP ? MSG_SET_A2DP_SINK_CONNECTION_STATE : MSG_SET_A2DP_SRC_CONNECTION_STATE), Loading Loading @@ -5615,6 +5630,7 @@ public class AudioService extends IAudioService.Stub synchronized (mConnectedDevices) { makeA2dpDeviceUnavailableNow( (String) msg.obj ); } mAudioEventWakeLock.release(); break; case MSG_SET_FORCE_USE: Loading Loading @@ -5845,6 +5861,9 @@ public class AudioService extends IAudioService.Stub // must be called synchronized on mConnectedDevices private void makeA2dpDeviceUnavailableNow(String address) { if (address == null) { return; } synchronized (mA2dpAvrcpLock) { mAvrcpAbsVolSupported = false; } Loading @@ -5854,6 +5873,9 @@ public class AudioService extends IAudioService.Stub makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address)); // Remove A2DP routes as well setCurrentAudioRouteName(null); if (mDockAddress == address) { mDockAddress = null; } } // must be called synchronized on mConnectedDevices Loading @@ -5865,9 +5887,12 @@ public class AudioService extends IAudioService.Stub mConnectedDevices.remove( makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address)); // send the delayed message to make the device unavailable later Message msg = mAudioHandler.obtainMessage(MSG_BTA2DP_DOCK_TIMEOUT, address); mAudioHandler.sendMessageDelayed(msg, delayMs); queueMsgUnderWakeLock(mAudioHandler, MSG_BTA2DP_DOCK_TIMEOUT, 0, 0, address, delayMs); } // must be called synchronized on mConnectedDevices Loading Loading @@ -5939,7 +5964,8 @@ public class AudioService extends IAudioService.Stub private void onSetA2dpSinkConnectionState(BluetoothDevice btDevice, int state, int a2dpVolume) { if (DEBUG_DEVICES) { Log.d(TAG, "onSetA2dpSinkConnectionState btDevice=" + btDevice+"state=" + state); Log.d(TAG, "onSetA2dpSinkConnectionState btDevice= " + btDevice+" state= " + state + " is dock: "+btDevice.isBluetoothDock()); } if (btDevice == null) { return; Loading Loading @@ -5976,7 +6002,7 @@ public class AudioService extends IAudioService.Stub } else { // this could be a connection of another A2DP device before the timeout of // a dock: cancel the dock timeout, and make the dock unavailable now if(hasScheduledA2dpDockTimeout()) { if (hasScheduledA2dpDockTimeout() && mDockAddress != null) { cancelA2dpDeviceTimeout(); makeA2dpDeviceUnavailableNow(mDockAddress); } Loading Loading @@ -6195,17 +6221,6 @@ public class AudioService extends IAudioService.Stub } } if (mAudioHandler.hasMessages(MSG_SET_A2DP_SRC_CONNECTION_STATE) || mAudioHandler.hasMessages(MSG_SET_A2DP_SINK_CONNECTION_STATE) || mAudioHandler.hasMessages(MSG_SET_HEARING_AID_CONNECTION_STATE) || mAudioHandler.hasMessages(MSG_SET_WIRED_DEVICE_CONNECTION_STATE)) { synchronized (mLastDeviceConnectMsgTime) { long time = SystemClock.uptimeMillis(); if (mLastDeviceConnectMsgTime > time) { delay = (int)(mLastDeviceConnectMsgTime - time) + 30; } } } return delay; } Loading